【CFAR】雷达目标检测之恒虚警检测(CA/SOCA/OS/GOCA-CFAR)【附MATLAB代码】

文摘   2025-02-02 20:33   黑龙江  

微信公众号:EW Frontier
关注可了解更多的雷达、通信、人工智能相关代码。问题或建议,请公众号留言;
如果你觉得EW Frontier对你有帮助,欢迎加入我的知识星球或面包多,更多代码等你来学
知识星球:https://wx.zsxq.com/dweb2/index/group/15552518881412
面包多:https://mbd.pub/o/author-a2mYl2tsbA==/work

QQ交流群:1022600869

如有侵权请联系删除~

主要内容

MATLAB代码


clear; close all; clc;% 生成一个例子,然后用以下算法处理% CA CFAR, OS CFAR, SOCA CFAR, GOCA CFAR, S-CFAR, Log CFAR% 位置在5055处有目标,50处信噪比10dB,55处信噪比15dB% 前100单元噪声功率20dB,后100单元噪声功率30dB
num_cell = 200;Pfa = 10^(-5);
signal1 = generateDataGaussianWhite(100, [50, 55], [35, 40], 20);signal2 = generateDataGaussianWhite(100, [], [], 30);signal = [signal1, signal2];plot(1:num_cell, pow2db(signal), 'k-', 'linewidth', 0.5);hold on;
% CA CFAR处理[position, threshold, start_cell, stop_cell] = cacfar(signal, Pfa, 10, 2);plot(start_cell:stop_cell, pow2db(threshold), 'linewidth', 1);% OS CFAR处理[position, threshold, start_cell, stop_cell] = oscfar(signal, Pfa, 10, 2, 15);plot(start_cell:stop_cell, pow2db(threshold), 'linewidth', 1);% SOCA CFAR处理[position, threshold, start_cell, stop_cell] = socacfar(signal, Pfa, 10, 2);plot(start_cell:stop_cell, pow2db(threshold), 'linewidth', 1);% GOCA CFAR处理[position, threshold, start_cell, stop_cell] = gocacfar(signal, Pfa, 10, 2);plot(start_cell:stop_cell, pow2db(threshold), 'linewidth', 1);

grid on;legend('信号', 'CA CFAR阈值', 'OS CFAR阈值', 'SOCA CFAR阈值', 'GOCA CFAR阈值');

CA-CFAR

function [position, threshold, start_cell, stop_cell] = cacfar(signal, Pfa, ref_num, guard_num)    % ======>INPUT:    % signal: Data of signal(include signal and noise).[DATATYPE: row vector]    % Pfa: Probability of false alarm.[DATATYPE: scalar]    % ref_num: Number of reference cell.[DATATYPE: scalar]    % guard_num: Number of guard cell.[DATATYPE: scalar]    % ======>OUTPUT:    % position: positions of target.[DATATYPE: row vector]    % threshold: CFAR threshold of input signal.[DATATYPE: row vector]    position = [];    left_num = guard_num + ref_num;    start_cell = left_num + 1;    stop_cell = length(signal) - left_num;    N = 2*ref_num;    alpha = N * (Pfa ^ (-1/N) - 1);
threshold = zeros(1, stop_cell - start_cell + 1); for ii = start_cell : stop_cell tmp_data = [signal(ii-left_num : ii-guard_num-1), ... signal(ii+guard_num+1 : ii+left_num)]; tmp = mean(tmp_data) * alpha; % threshold(ii - left_num) % tmp threshold(ii - left_num) = tmp; if tmp < signal(ii) position = [position, ii]; end endreturn

MATLAB仿真结果:

相关学习资料见面包多链接https://mbd.pub/o/author-a2mYl2tsbA==/work

欢迎加入我的知识星球:https://wx.zsxq.com/dweb2/index/group/15552518881412,永久获取更多相关资料、代码。

EW Frontier
学术交流123456群已满,进群请加学术交流Q7群:554073254,进群请备注单位+研究方向。
 最新文章