HE/Band_Mono_Parameter.m

72 lines
2.3 KiB
Mathematica
Raw Normal View History

2024-03-30 16:35:40 +08:00
%%************************<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>****************************%%
%%=============================<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>===================================%%
% J <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>
% Power_mono <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>
% f_mono Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>
% Power_band Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>
% f_wide Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD>
% f_startƵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼƵ<EFBFBD><EFBFBD>
% f_endƵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹƵ<EFBFBD><EFBFBD>
% Num_band Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD>
% data Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
% fs <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
%%========================================================================%%
function [f_mono,Power_mono,Num_band,f_start,f_end,f_wide,Power_band] = Band_Mono_Parameter(data,J,fs,NFFT)
J = sort(J,'ascend')-1;
len_J = length(J);
f_start = [];
f_end = [];
c1=1;
mono_d = cell(0,0);
mono_s = cell(0,0);
mono = [];
f_d = [];
f_s = [];
power_m = [];
power_d = [];
power_s = [];
band = cell(0,0);
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)
band = [band;(J(c1:1:c1+c2))]; %%<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪƵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
end
if c2 == 2
mono_d = [mono_d;(J(c1:1:c1+c2))]; %%Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD>
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_mono1 = [power_m,power_d,power_s];
f_mono1 = [mono,f_d,f_s];
[f_mono,index] = sort(f_mono1,'ascend');
Power_mono = power_mono1(index);
for k = 1 : numel(band)
f_start(k) = band{k}(1)*fs/NFFT/10^6;
f_end(k) = band{k}(end)*fs/NFFT/10^6;
end
f_wide = sum(abs(f_start - f_end));
Power_band = 2*sum(abs(data(J+1)).^2)/NFFT^2;
Num_band = length(f_end);
end