sy0116 发表于 2014-2-22 21:43

自功率谱密度估计:分析同一信号时所取的时间长度不同结果也不同

最近在学习随机振动的自功率谱计算方法,在用matlab分析时遇到一个问题:同一个信号,分析时取的时间长度不一样,得到的功率谱密度数值相差很大,与所取时间长度之比成正比。为了简化说明这个问题,我下面贴了一个程序,分析一个频率16Hz的正弦信号。

程序中先生成16个周期的信号:x(采样点数128个),如下图蓝色曲线所示,然后取出其中前2个周期,令其为x1,如红色曲线所示

然后,利用matlab自带的periodogram函数分析这两个信号的自功率谱密度,由于这两个信号本质上是同一个信号,因此它们的自功率谱密度应该是相等的才对。可是,分析的结果却让我糊涂了,显然,两个信号的自功率谱密度相差很大(频率都是正确的)。请问为什么同一个信号的自功率谱密度会与分析时所选取的时间长度有关呢?

附程序:
clc;clear;close all

f = 16;                                                                  %信号周期(Hz)
A = 1;                                                                     %信号幅值
C = 16;                                                                  %周期数
T = C / f;                                                               %时间长度
N = 128;                                                                   %信号点数
t = linspace(0,T,N + 1); t(end) = [];                                    %生成时间序列
fs = 1 / t(2);                                                             %采样频率
x = A * sin(2 * pi * f * t);                                             %生成信号
plot(t,x,'.-')
t1 = t(1:2 * N / C);                                                       %从前面生成的信号中取出前2个周期
x1 = x(1:2 * N / C);                                                       %从前面生成的信号中取出前2个周期
hold on
plot(t1,x1,'r.-');
legend('16个周期的信号','2个周期的信号')

= periodogram(x,rectwin(N),N,fs);                                  %对16个周期的信号进行自谱密度分析
figure
subplot(2,1,1);
stem(f,Pxx); title('16个周期的信号的自谱密度')
= periodogram(x1,rectwin(length(t1)),length(t1),fs);             %对2个周期的信号进行自谱密度分析
subplot(2,1,2);
stem(f1,Pxx1); title('2个周期的信号的自谱密度')

hcharlie 发表于 2014-2-22 22:51

本帖最后由 hcharlie 于 2014-2-22 22:57 编辑

我认为你的基本概念有问题。
你计算功率谱密度函数,却不清楚它的定义是什么。功率谱密度是定义在随机信号里的。
你也说是在学习随机振动的自功率谱密度计算方法,但你的算例却并不是随机信号,而是周期信号。
周期信号适用于用频谱分析,不管取几个整波形,其频谱的峰值是一样的。
没有人说过周期函数也有功率谱密度的定义,所以求出来峰值一样不一样,说明不了任何问题。
理论上周期函数整周期的功率谱密度是线谱,其峰值无穷大,频宽是另。
结论,对周期函数不宜求功率谱密度。
好好学学基本振动理论,只会用Matlab是不够的。
就事论事,你计算的结果,两个峰值正好差8倍,频率分辨率也是8倍,你认为是偶然的吗?

sy0116 发表于 2014-2-23 08:42

hcharlie 发表于 2014-2-22 22:51
我认为你的基本概念有问题。
你计算功率谱密度函数,却不清楚它的定义是什么。功率谱密度是定义在随机信号 ...

谢谢回复,确实是基本概念没有弄清楚,随机信号的自功率谱密度函数是用其自相关函数的Fourier变换定义的,而这一定义默认了该自相关函数一定是存在Fourier变换的。周期信号的自相关仍然为周期信号,除非引入冲击函数,否则不存在Fourier变换,因此计算周期信号的功率谱密度没有意义。

这又引出另一个问题,当使用三角级数法模拟随机振动信号时,如果三角级数序列中的各个频率点恰好与自功率谱密度分析时FFT的频率分辨率成整数倍,即满足整周期采样时,则此时所模拟的随机振动序列就变成了周期的序列,此时若分析其自功率谱则不能得到正确的结果。如果这样,我想这也回答了我前面提出的一个关于三角级数法公式的问题(http://forum.vibunion.com/forum.php?mod=viewthread&tid=130369&page=1#pid748681)。在星谷胜的《随机振动分析》中给出的各谐波项频率为wk = wl + (k - 1/2)Det_w,这里之所以用k-1/2,就是为了使信号不满足整周期采样,分析时不致于成为周期信号而使结果错误而作的一种处理。不知我这种理解是否正确,还望指教。

hcharlie 发表于 2014-2-23 09:46

本帖最后由 hcharlie 于 2014-2-23 16:39 编辑

理论随机信号是无穷大域的,而工程是有限域的,工程上的各种计算叫做《估计》。你引用的三角级数法的文章中也有下面这句话:
<在N充分大时逼近给定的的自功率谱密度函数>
什么叫N充分大,没有说。N不够大时,就不是精确等于。也就是N不够大时总有误差。
所以它这个三角级数法也只有在无穷域才是准确的,正确的,否则都是近似的。当N不是无窮大時,这种方法总脱不了周期函数之干系,我们称之为伪随机。
为什么取1/2?大概是为了避免多取1条谱线,比如100到200Hz,分㵷率为1,取了1/2,100.5到199.5,正好100谱线,否则要多1条谱线,能量算多了。

mayaview 发表于 2014-2-25 23:22

hcharlie 发表于 2014-2-22 22:51
我认为你的基本概念有问题。
你计算功率谱密度函数,却不清楚它的定义是什么。功率谱密度是定义在随机信号 ...

这个不大明白啊,为什么说周期函数没有功率谱密度?没有看到定义里限制了信号的类型啊?

mayaview 发表于 2014-2-26 09:35

本帖最后由 mayaview 于 2014-2-26 09:54 编辑

hcharlie 发表于 2014-2-23 09:46
理论随机信号是无穷大域的,而工程是有限域的,工程上的各种计算叫做《估计》。你引用的三角级数法的文章中 ...
四五门课都讲过,每个都不大一样,不过都没有看到功率谱密度只有随机信号有,难道是随机振动里面的特殊定义?找本信号方面的书上的定义吧,哪里能看到只有随机信号有功率谱密度啊?


如果认为周期信号一定不是随机过程的话,那么非全零的周期信号一定都是能量无限信号,它自然不存在能量谱啦,那么它的单个周期内的自协方差的傅里叶级数应该叫什么名字呢?周期功率谱密度,谱密度,功率谱,单位周期能量谱?

这样搭车问问题是不是不好啊,不然我重开一帖?不过估计其他人都是高手不屑于那么低级的问题,呃,各种基本概念不清晰啊!

hcharlie 发表于 2014-2-27 08:37

本帖最后由 hcharlie 于 2014-3-1 14:41 编辑

mayaview 发表于 2014-2-26 09:35
四五门课都讲过,每个都不大一样,不过都没有看到功率谱密度只有随机信号有,难道是随机振动里面的特殊定 ...
你引用的文章内也是说了一个随机过程x(t),且t是在无穷域,才出来功率谱密度的定义。半句也没提到周期函数?
如果你一定要对一个周期过程做功率谱密度,只能得到LZ的结论:《分析同一信号时所取的时间长度不同结果也不同》!实际上他是取了不同的频率分辨率。我们也注意到,LZ的两个自谱密度图上,其峰值点的值乘以频率分辨率,两个图的面积结果却一样,都等于0.5,这是什么值?是周期过程的均方值!
所以一定要这么做结果叫什么名字不知道,却一定得不到一个确定值,而改用频谱法,却能得到确定的峰值。

mayaview 发表于 2014-2-27 09:27

hcharlie 发表于 2014-2-27 08:37
你引用的文章内也说明了x(t)是一个随机过程。
如果你一定要对一个周期过程做功率谱密度,只能得到LZ的结 ...

不会啊,定义里面是单位时间的能量(注意期望中分母上的2T),所以周期信号的功率谱应该是固定的,不管多少周期都是同一个值。LZ那个明显没有除以时间长度,你已经指出过了,所以就没有再提。

qhai_yun 发表于 2014-2-28 17:48

本帖最后由 qhai_yun 于 2014-2-28 19:35 编辑

信号分析技术是从简到复杂演变的。
最初是正弦信号,有频率,振幅,相位就足够表述了;
其次是周期信号,简单的是由少数几个频率成分之和组成,分析一个或多个整数周期就可以了,用有限长的数据表示了无限循环的信号,分析方法用频谱法,用离散傅立叶变换,DFT或FFT就足够了。
再复杂的就是稳态随机信号,其特点是时域是无限长的,无周期性的,永不重复的,没办法,研究出功率谱密度函数的概念,而无限域的傅立叶变换又不存在,不得已走相关函数的傅立叶变换的路。
现实中的稳态随机信号取无穷域不可能,所以采用有限长的谱密度估计的方法,一段有限长随机数据的DFT或FFT是存在的,所以多用FFT法而不用自相关法。为了得到一定的估计精度,需要做足够多的谱平均,通常需要50~100幀的谱平均,才能得到1dB左右的精度。(确切的术语是误差+/-1dB之内的置信度90%云云)。只取一幀随机信号代到Matlab中算一个PSD函数就能得到稳态随机的谱密度估计?!波形一定是杂乱的,不可信的。
再复杂的就是非稳态的随机振动信号了。
用什么方法分析你的信号,由信号的性质决定,能简则简,不要什么信号都去用PSD,以为是万能的,错!
同样学习各种算法时,FFT可以用于周期信号,做PSD最好也要用稳态的随机信号,才能领悟其真谛。

liujunhit 发表于 2014-4-15 17:10

刚接触随机振动,学习了
页: [1]
查看完整版本: 自功率谱密度估计:分析同一信号时所取的时间长度不同结果也不同