HE/Multi_Parameter.m
2024-03-30 16:35:40 +08:00

57 lines
1.8 KiB
Matlab

%%************************【多音干扰输出参数函数】****************************%%
%%=============================参数说明===================================%%
% J 检测出来的干扰点集合
% data 频域数据
% fs 采样频率
% NFFT FFT点数
% Power_multi 多音干扰功率集合
% f_multi 多音干扰频率集合
% Num_multi 多音干扰个数
%%========================================================================%%
function [Num_multi,f_multi,Power_multi] = Multi_Parameter(data,J,fs,NFFT)
J = sort(J,'ascend')-1;
len_J = length(J);
mono_d = cell(0,0);
mono_s = cell(0,0);
mono = [];
f_d = [];
f_s = [];
power_m = [];
power_d = [];
power_s = [];
c1 = 1;
while c1 < len_J
c2 = 0;
while (c1 + c2 + 1 <= len_J && J(c1) + c2 + 1==J(c1 + c2 + 1))
c2 = c2 + 1;
end
if c2 == 2
mono_d = [mono_d;(J(c1:1:c1+c2))]; %%频谱扩散的单音
end
if c2 == 1
mono_s = [mono_s;(J(c1:1:c1+c2))];
end
if c2 == 0
mono = [mono,J(c1)];
end
c1 = c1 + c2 +1;
if c1 == len_J && J(len_J-1) + 1 ~= J(len_J)
mono = [mono,J(len_J)];
end
end
for k = 1:numel(mono_d)
f_d(k) = mono_d{k}(2)*fs/NFFT/10^6;
power_d(k) = sum(abs(data(mono_d{k}+1)).^2)/NFFT^2;
end
for m = 1:numel(mono_s)
f_s(m) = 0.5*(mono_s{m}(1)+mono_s{m}(2))*fs/NFFT/10^6;
power_s(m) = sum(abs(data(mono_s{m}+1)).^2)/NFFT^2;
end
power_m = abs(data(mono+1)).^2/NFFT^2;
mono = mono*fs/NFFT/10^6;
power_multi1 = [power_m,power_d,power_s];
f_multi1 = [mono,f_d,f_s];
[f_multi,index] = sort(f_multi1,'ascend');
Power_multi = power_multi1(index);
Num_multi = length(f_multi1);
end