46 lines
2.0 KiB
Matlab
46 lines
2.0 KiB
Matlab
%%************************【FCME检测算法函数】****************************%%
|
||
%%=============================参数说明===================================%%
|
||
% data 待检测的频域信号
|
||
% Pf 虚警概率
|
||
% J 检测出来的干扰点集合
|
||
%%========================================================================%%
|
||
function J = FCME(data,Pf)
|
||
T = sqrt(-1*(4/pi)*log(Pf)); %%门限因子
|
||
J = [];
|
||
L = length(data);
|
||
fi = [];
|
||
[y_sort,index] = sort(abs(data),'ascend'); %%按幅度值升序排列
|
||
%%求每个频点的幅值
|
||
for k = 1:L
|
||
fi(k)=abs(data(k));
|
||
end
|
||
%%%%初始化两个集合
|
||
J = index(round(L/10)+1:end); %%剩余有干扰集合
|
||
I = index(1:round(L/10)); %%无干扰集合\
|
||
S = mean(fi(I));
|
||
%%迭代求出干扰点集合
|
||
for m = 1:50 %%FCME迭代次数
|
||
length_J = length(J); %%J集合的长度
|
||
ii = 1;
|
||
jj = 1;
|
||
new_I = [];
|
||
new_J = [];
|
||
for j1 = 1:length_J
|
||
J1 = J(j1); %%J集合的索引
|
||
if fi(J1) < T*S %%如果小于门限,则移到I集合,从J集合剔除
|
||
new_I(ii) = J1;
|
||
ii = ii +1;
|
||
else %%如果大于于门限,则继续留在J集合
|
||
new_J(jj) = J1;
|
||
jj = jj + 1;
|
||
end
|
||
end
|
||
if isempty(new_I) %%如果new_I为空,直接跳出
|
||
break;
|
||
end
|
||
J = new_J;
|
||
I = union(I,new_I);
|
||
S = mean(fi(I)); %%干扰频点
|
||
end
|
||
end
|