Получить энергию сигнала на определенных частотах в Matlab - PullRequest
0 голосов
/ 07 ноября 2019

Я использую функцию, которая вычисляет матрицу, которую можно использовать для построения спектрограммы сигнала. Теперь я должен найти энергию на определенных частотах сигнала (от -50 до 50 Гц), но я не уверен, как получить доступ только к столбцам моей матрицы спектрограммы, которые соответствуют правильным частотам. Честно говоря, я понимаю, что строки S соответствуют времени, но я не уверен, что представляют столбцы S.

function S = spectrogram_proj(x,L,NFFT,step,Fs) 
     N=length(x); 
     K=fix((N-L+step)/step); 
     w=hanning(L); 
     time=(1:L);
     N2=NFFT/2+1; 
     S=zeros(K,N2);
     for k=1:K
           xw=x(time).*w;
           X=fft(xw,NFFT);
           X1=X(1:N2);
           S(k,1:N2)=X1.*conj(X1);
           time=time+step;
     end
end

[y,Fs] = audioread('FINS.wav');
Fs;
x=y;
L = 200;
NFFT = nextpow2(L);
step = 1;
S = spectrogram_proj(x,L,NFFT,step,Fs);
avg_f = mean(S);
S_denoise = max(0,S-repmat(avg_f,size(S,1),1));

Мне дали следующие отношения о том, как найти энергию, и я пыталсяиспользуйте приведенный ниже код, но он не кажется правильным.

energy calculation

 for k=1:2399801
     energy = sum(S_denoise(k, 3 ));
 end

В S_denoise есть 23990801 строк, и я думаю, что в 3-м столбце содержатся частоты от -50 до 50 Гц. Не уверен, что я просто предположил. Спасибо за помощь !!

...