menmen 发表于 2012-10-22 21:43

matlab中pwelch函数的功率谱结果还需要修正吗?

       最近用pwelch函数做信号功率谱,发现窗长的改变影响pwelch函数结果中的线谱幅度,例如:生成一个正弦信号,用pwelch函数求出正弦信号的功率谱,当改变fft长度(即窗长)时,正弦的线谱幅度也会随之改变。这使我对pwelch函数的准确性产生质疑。
       个人理解,功率谱已经与时间长度无关了,功率是单位时间的能量嘛。
      因此想在这里提出以下问题:
      1)pwelch函数得到的功率谱结果是否还需要进一步修正?
      2)如果不再需要修正,那pwelch函数得到的功率谱幅值随fft窗长的改变而改变是正确的吗?其中的原因是什么?

zengwj0423 发表于 2012-10-25 22:45

我也关注这个问题,但也一直未得到解决,pwelch计算功率谱比较复杂,利用调用许多子函数而来的,而以前的psd函数计算功率谱则比较简单,只是fft后的幅值平方,再根据窗函数的功率系数修正幅值后得到的。
不过许多情况下关心的是功率谱的相对幅值,绝对幅值不是很有意义

狗肉 发表于 2012-11-12 14:54

学习下····

huoran11 发表于 2012-11-12 23:28

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);

% =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));

=periodogram(x);

Pxx2=10*log10(Pxx2);

plot(f2/pi*fs/2,Pxx2,'g');



figure

error=Pxx1(1:nfft1).'-Pxx2;

plot(error);

清晨露珠 发表于 2013-1-24 16:20

zengwj0423 发表于 2012-10-25 22:45 static/image/common/back.gif
我也关注这个问题,但也一直未得到解决,pwelch计算功率谱比较复杂,利用调用许多子函数而来的,而以前的ps ...

您好!请问如何用matlab画功率谱图,地震动函数模型图,结构的抗震方面的,谢谢您啊!或者可以推荐下有关的书籍!祝您天天好心情!

zengwj0423 发表于 2013-1-25 10:57

清晨露珠 发表于 2013-1-24 16:20 static/image/common/back.gif
您好!请问如何用matlab画功率谱图,地震动函数模型图,结构的抗震方面的,谢谢您啊!或者可以推荐下有关 ...

一般情况下直接用matlab自带的pwelch函数,也可以自己编程计算,功率谱其实就是幅值谱的平方,不过要注意一下多次平均,也没注意过地震方面相关书籍,不是这一行的

menmen 发表于 2013-1-29 20:47

谢谢楼上各位的关注!期待有行家解答。

清晨露珠 发表于 2013-1-30 08:58

zengwj0423 发表于 2013-1-25 10:57 static/image/common/back.gif
一般情况下直接用matlab自带的pwelch函数,也可以自己编程计算,功率谱其实就是幅值谱的平方,不过要注意 ...

恩,好的,很高兴能够收到您的答复!对我很有帮助!谢谢!祝你一生好运相伴~!

Alexander817 发表于 2016-8-8 23:41

huoran11 发表于 2012-11-12 23:28
pwelch的计算过程应该说还是比较简单的,和信号处理树上的推导一致,可以用fft实现一下,就是能量在频率范 ...

大神,请问你们求完功率谱密度都不检验么?尤其是自功率谱是由自相关函数得到,所以红噪音检验需要吧?可是这个pwelch里并不涉及检验的输入和输出参数啊。

Pparis 发表于 2016-8-9 08:15

清晨露珠 发表于 2013-1-24 16:20
您好!请问如何用matlab画功率谱图,地震动函数模型图,结构的抗震方面的,谢谢您啊!或者可以推荐下有关 ...

参考这个
http://forum.vibunion.com/forum.php?mod=viewthread&tid=139066&highlight=%B9%A6%C2%CA%C6%D7

hcharlie 发表于 2016-8-9 09:39

本帖最后由 hcharlie 于 2016-8-9 09:55 编辑

menmen 发表于 2013-1-29 20:47
谢谢楼上各位的关注!期待有行家解答。

问题提了几年了,没有见到正确的回答!
问题错在什么地方呢?就错在用正弦函数去验证PSD。
PSD只是定义在稳态随机信号(白噪声)中;
正弦信号,周期信号没有PSD的定义,正弦信号的功率谱密度PSD在其频率上是无穷大,其它频率处是零,所以一做就错!
页: [1]
查看完整版本: matlab中pwelch函数的功率谱结果还需要修正吗?