Matlab FFT的功率谱密度

Matlab 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

我有一段代码,可以得到一部分信号的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/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。