sssssxxxxx921 发表于 2007-9-18 09:13

看看这两个功率谱的区别

下面是我做的两个功率谱,第一个是按MATLAB帮助上做的,第二个是对上面的谱做了对数处理
所得到的两个图很明显不同,不知道为什么   解释一下

弯弓射大雕 发表于 2007-9-18 11:16

用啥方法做的,详细点

sssssxxxxx921 发表于 2007-9-18 16:30

据我自己查阅的程序,功率谱纵坐标的参数值有使用fft后绝对值的平方的(matlab中查FFT程序),
有的使用fft结果平方后除以采样点数的(MATLAB中查sunspot的fft后的平均周期程序中),
还有一些人是将第二种结果再求一次对数作为纵坐标的值,……如此种种;
得出来的结果也是不太一样,究竟哪一种是正确的呢?这样计算之后,
纵轴对应的数值都是什么单位呢?

sssssxxxxx921 发表于 2007-9-18 16:33

上边第一个图就是我按最后一种画出来的,
第二个图是我按第二种画出来的
我觉得都没有错,可结果却很明显的不同(当然在最高尖峰处是相同的),
究竟哪一个是正确的呢

hahaer 发表于 2007-9-18 21:05

一个是幅值平方
一个是dB
两种结果都是正确的
只是图形显示的形式不同

sssssxxxxx921 发表于 2007-9-18 21:40

那第二个图为什么会有那么多峰值,而第一个却没有,这怎么解释
另外,在绘制功率谱时,是否应该在FFT平方后除以 采样点数
X1 = fft(xc, 2048);                                 (1)
X2 = fft(xcc,2048);                                 (2)
Pxx = X1.* conj(X1) / 2048;                     (3)
就像上面 3 式一样,除以2048还是直接Pxx = X1.* conj(X1)      (4)
这有什么区别

第三, 确定一下分贝(dB) 就是 plot(f(1:1024),log(Pxx(1:1024)))      (5)
即对(3)求对数吗?   
即对

hahaer 发表于 2007-9-18 21:46

把你的数据和程序发上来看下

sssssxxxxx921 发表于 2007-9-18 21:57

我的程序在这个地方谢谢
http://forum.vibunion.com/forum/thread-51871-3-1.html

hahaer 发表于 2007-9-18 21:57

Fs = 1000;
t = 0:1/Fs:.3;
x=cos(2*pi*t*200)+randn(size(t));
Hs=spectrum.periodogram;
psd(Hs,x,'Fs',Fs)

matlab帮助实例你可以看一下
一般取dB都是10*log(),有的用20*log()
你把你的第一图放大后会发现还有很多小的峰值吧?
转换到对数坐标下体现就明显了而已
因为对数坐标差x实际上是差10^x
所以峰值会在第二幅图上体现出来

你求取功率谱可以直接用matlab函数
没必要自己编写程序

sssssxxxxx921 发表于 2007-9-18 22:02

matlab有会功率谱的函数 ?我不知道呵呵
就是psd吗?

sssssxxxxx921 发表于 2007-9-18 22:09

我在绘制频谱图时每隔四个点取样一次    这样的原因我知道一点,但是说不清,
你能用简单易懂的语句说一下吗,   怕有人问自己回答不上来呵呵
另外,我的QQ76740434,能不能在QQ上问你一下啊,这样太慢了 :handshake

octopussheng 发表于 2007-9-19 15:41

matlab里面有个太阳黑子的例子,就在fft的帮助里面,建议你看一下!

花如月 发表于 2007-9-19 16:16

我也觉得没有本质区别,只是显示的问题。对数可以缩小数据的范围,因此可以看到变化的情形。如果改变第一幅图的纵坐标范围,应该可以看到相同的变化趋势
页: [1]
查看完整版本: 看看这两个功率谱的区别