MATLAB功率谱函数pwelch 和specture.welch

http://www.ilovematlab.cn/thread-218001-1-1.html

http://www.ilovematlab.cn/thread-52799-1-1.html

http://www.ilovematlab.cn/thread-327632-1-1.html
你的版本是什么?从R2013a开始,建议用pwelch,在那之前,建议用spectrum.welch

形状上没啥差异,无非是缺省用的窗不一样,但是这个pwelch的结果没有除采样率



fs = 1000;

t=0:1/fs:1; 

y=cos(2*pi*40*t)+3*cos(2*pi*100*t)+randn(size(t));

nfft = 2^nextpow2(length(y));

subplot(3, 1, 1);

Hs=spectrum.welch;

hpsd = psd(Hs, y,'NFFT',nfft,'Fs',fs);

Pw = hpsd.Data; 

Fw = hpsd.Frequencies;

plot(Fw, Pw)

grid;axis([0 500 0 max(Pw)]);title('psd');

subplot(3, 1, 2);

[Pxx,fxx]=pwelch(y,[],[],[],fs,'twosided'); 

plot(fxx, Pxx);

grid;axis([0 500 0 max(Pxx)]);title('pwelch');

subplot(3, 1, 3);

n = 0 : nfft/2;

f = n * fs / nfft;

Y = fft(y, nfft) / nfft;

plot_Y = 2 * abs(Y(1:nfft/2+1));

plot(f, plot_Y);

grid;axis([0 500 0 max(plot_Y)]);title('fft');


在第8行后面加Hs.SegmentLength = 222;然后在第9行后面加twosided(hpsd);最后在pwelch里第四个输入用nfft这样前两个图应该基本上就一样了。至于fft,那个不是功率谱,而是频谱,所以没有可比性。而且就算你把它除采样频率,换成功率谱,它也是和周期图对应,和welch还是不一样的。



我认为在这两命令中window的含义是不一样的,在[Pxx,f]=pwelch(x,window,noverlap,nfft,fs)中window是一个具体的窗函数,例如window=hanning(256)而在h = spectrum.welch('Hann',window,100*noverlap/window);中window只是窗的长度,例如256。我做了一个试验得到的结果两命令完全一样:x=load('hdata.txt');fs=8000;nfft=256;noverlap=128;window=hanning(nfft);[Pxx,f]=pwelch(x,window,noverlap,nfft,fs);subplot 211; plot(f,Pxx);title('pwelch');window=256;h = spectrum.welch('Hann',window,100*noverlap/window);hpsd = psd(h,x,'NFFT',nfft,'Fs',fs);P=hpsd.Data;ff=hpsd.Frequencies;subplot 212; plot(ff,P);title('spectrum.welch');得的图如下:

原文地址:https://www.cnblogs.com/gisalameda/p/12840568.html