Matlab FFT的功率谱密度
我有一段代码,可以得到一部分信号的FFT,我现在正试图得到PSDMatlab FFT的功率谱密度,matlab,audio,signal-processing,fft,Matlab,Audio,Signal Processing,Fft,我有一段代码,可以得到一部分信号的FFT,我现在正试图得到PSD Fs = 44100; cj = sqrt(-1); %T=.6; dt = 1/Fs; left=test(:,1); right=test(:,2); time = 45; interval =.636; w_range = time*Fs: (time+interval)*Fs-1; I = left(w_range); Q = right(w_range); n = interval * Fs; f
Fs = 44100;
cj = sqrt(-1);
%T=.6;
dt = 1/Fs;
left=test(:,1);
right=test(:,2);
time = 45;
interval =.636;
w_range = time*Fs: (time+interval)*Fs-1;
I = left(w_range);
Q = right(w_range);
n = interval * Fs;
f = -Fs/2:Fs/n:Fs/2-Fs/n;
s = I+cj.*Q;
% Smooth the signal ss = smooth(s,201);
sf = (fftshift(fft(ss(1:n)))); %FFT of signal
figure(1) plot(f,((20*log10((abs(sf))./max(abs(sf))))))
根据我的理解,为了获得PSD,我只需要将sf提高到2的幂,或者我还需要执行其他操作吗?你完全正确。您只需构建绝对值的平方。技术上是的,您可以通过获取周期信号FFT的平方幅度来获得其功率谱密度(PSD)。请注意,如果要以对数分贝标度绘制,则
20*log10(abs(sf))
或10*log10(abs(sf)。^2)
之间实际上没有区别
然而,通常情况下,以这种方式计算的PSD估计值往往具有相当大的方差。有许多方法可用于改进估计。一个简单的方法是将A应用于数据段,执行FFT,然后平均得到的PSD(即平均平方震级)。我想应该是
sf.*conj(sf)
或(abs(sf))。^2
?我的意思是从频谱的绝对平方计算PSD。另一种方法是使用维纳-钦钦定理,该定理使您能够通过傅里叶变换自相关函数计算PSD。若我提供了任何不相关的信息,我会说对不起,因为我并没有在教科书中查找PSD。