MATLAB功率谱函数psd与pwelch的使用 |
您所在的位置:网站首页 › matlab中factor函数的用法 › MATLAB功率谱函数psd与pwelch的使用 |
目录
一、遇到的问题 二、功率谱函数psd与pwelch的用法与区别 一、遇到的问题在网上看到这样一个问题,然后搬过来记一下。 大家好,我用matlab的psd函数和pwelch函数求功率谱密度,但是得到的结果为什么下差大约30db,这个是怎么回事? 摘自:https://www.ilovematlab.cn/thread-339674-1-1.html 针对这个问题的答案是: 程序中用PSD的用法是较早版本中的函数用法,在现在的新版本中已不这样用了,是结合了spectrum函数一起使用。在较早版本中PSD函数得到的是功率谱,不是功率谱密度,所以与pwelch的结果(计算功率谱密度)会有30db的差别。怎么解决这个问题呢? [Pxx1,f1]=pwelch(y,window,noverlap,Nfft,Fs); %加入下面一段 Pxx1=Pxx1*Fs/2.0 Pxx1(1)=Pxx1(1)*2; Pxx1(length(Pxx1))=Pxx1(length(Pxx1))*2; 结果完全一样 二、功率谱函数psd与pwelch的用法与区别psd与pwelch均为求功率谱的函数,但是psd求得的功率谱不可直接使用还需要进行一定的变换。 现给出二者的等价关系: [px,fx]=psd(x,nfft,fs,Windows,noverlap); px=px/fs*2;%---自谱 px([1,end])=px([1,end])/2; %---直流分量 与之等价的pwelch函数表达为: [px,fx]=pwelch(x,Windows,noverlap,nfft,fs); 其中, x --------- 时程信号; nfft--------傅里叶变换(fft)点数; Windows--窗函数,通常设为hanning(nfft) nooverlap-重叠的点数,通常为nfft/2; px---------求得的信号x的功率谱密度; fx----------对应px的频率序列。 需要说明的是,若中间有个变量不知如何设定(如noverlap),却仍然想设定该变量后面的值, 可采用中括号[]代替,[]则表示该变量并未设定具体值,而是采用函数默认值来取。 下面以一具体算例给大家做演示: clear x=randn(10000,1);%生成随机信号 fs=10; %---------采样频率 nfft=1024;%-------fft点数 %---psd求谱 [px,fx]=psd(x,nfft,fs,hanning(nfft),nfft/2); px=px/fs*2; px([1,end])=px([1,end])/2; %---pwelch求谱 [px2,fx2]=pwelch(x,hanning(nfft),nfft/2,nfft,fs); %---绘图 figure semilogy(fx,px);hold on semilogy(fx2,px2,'r') legend('psd','pwelch') title('psd与pwelch方法求谱结果比较')运行以上程序得到下图,由图可见psd曲线与pwelch曲线完全重合。
摘自:http://blog.sina.com.cn/s/blog_68e67e250102ycou.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |