|
pwelch的计算过程应该说还是比较简单的,和信号处理树上的推导一致,可以用fft实现一下,就是能量在频率范围内的平均,我认为可以代表谱密度的概念,应该是不需要修正的
但是让我很迷惑的是几种算法,在幅值上的巨大差异如:periodgram和直接进行fft都不同有点崩溃
clear all
clc
fs=8000;
t=0:1/fs:1-1/fs;
x=sin(2*pi*600*t)+cos(2*pi*1000*t);
%------------pwelch算法----------------
%已经做过用fft来做Pwelch可以做到完全一致
% nfft=1024;
% window=hamming(nfft);
% [Pxf]=pwelch(x,window,[],'onesided',nfft,fs);
% Px1=10*log10(Px);
% figure; plot(f,Px1);hold on
%-------FFT法-------------------------
nfft=8192;
nfft1=nfft/2+1;
N=length(x);
Pxx=abs(fft(x,nfft)).^2/N;
Pxx(1)=Pxx(1)/2;
Pxx(nfft1)=Pxx(nfft1)/2;
Pxx1=10*log10(Pxx);
f1=(1:length(Pxx))/nfft*fs;
figure;plot(f1(1:nfft1),Pxx1(1:nfft1),'r');holdon
grid on
%--------周期图-----------------------
window=boxcar(length(x));
[Pxx2 f2]=periodogram(x);
Pxx2=10*log10(Pxx2);
plot(f2/pi*fs/2,Pxx2,'g');
figure
error=Pxx1(1:nfft1).'-Pxx2;
plot(error); |
|