声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 50870|回复: 83

[FFT] 功率谱密度幅值的具体含义??

  [复制链接]
发表于 2006-6-16 20:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求信号功率谱时候用下面的不同方法,功率谱密度的幅值大小相差很大!
我的问题是,计算具体信号时,到底应该以什么准则决定该选用什么方法啊?
功率谱密度的幅植的具体意义是什么??下面是一些不同方法计算同一信号的matlab 程序!欢迎大家给点建议!
直接法:
直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。

Matlab代码示例:

clear;
Fs=1000; %采样频率
n=0:1/Fs:1;

%产生含有噪声的序列
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

window=boxcar(length(xn)); %矩形窗
nfft=1024;
[Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法
plot(f,10*log10(Pxx));

间接法:
间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。

Matlab代码示例:

clear;
Fs=1000; %采样频率
n=0:1/Fs:1;

%产生含有噪声的序列
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

nfft=1024;
cxn=xcorr(xn,'unbiased'); %计算序列的自相关函数
CXk=fft(cxn,nfft);
Pxx=abs(CXk);
index=0:round(nfft/2-1);
k=index*Fs/nfft;
plot_Pxx=10*log10(Pxx(index+1));
plot(k,plot_Pxx);

改进的直接法:
对于直接法的功率谱估计,当数据长度N太大时,谱曲线起伏加剧,若N太小,谱的分辨率又不好,因此需要改进。

1. Bartlett法

Bartlett平均周期图的方法是将N点的有限长序列x(n)分段求周期图再平均。

Matlab代码示例:

clear;
Fs=1000;
n=0:1/Fs:1;
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
nfft=1024;
window=boxcar(length(n)); %矩形窗
noverlap=0; %数据无重叠
p=0.9; %置信概率

[Pxx,Pxxc]=psd(xn,nfft,Fs,window,noverlap,p);

index=0:round(nfft/2-1);
k=index*Fs/nfft;
plot_Pxx=10*log10(Pxx(index+1));
plot_Pxxc=10*log10(Pxxc(index+1));
figure(1)
plot(k,plot_Pxx);

pause;

figure(2)
plot(k,[plot_Pxx plot_Pxx-plot_Pxxc plot_Pxx+plot_Pxxc]);

2. Welch法

Welch法对Bartlett法进行了两方面的修正,一是选择适当的窗函数w(n),并再周期图计算前直接加进去,加窗的优点是无论什么样的窗函数均可使谱估计非负。二是在分段时,可使各段之间有重叠,这样会使方差减小。

Matlab代码示例:

clear;
Fs=1000;
n=0:1/Fs:1;
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
nfft=1024;
window=boxcar(100); %矩形窗
window1=hamming(100); %海明窗
window2=blackman(100); %blackman窗
noverlap=20; %数据无重叠
range='half'; %频率间隔为[0 Fs/2],只计算一半的频率

[Pxx,f]=pwelch(xn,window,noverlap,nfft,Fs,range);
[Pxx1,f]=pwelch(xn,window1,noverlap,nfft,Fs,range);
[Pxx2,f]=pwelch(xn,window2,noverlap,nfft,Fs,range);

plot_Pxx=10*log10(Pxx);
plot_Pxx1=10*log10(Pxx1);
plot_Pxx2=10*log10(Pxx2);

figure(1)
plot(f,plot_Pxx);

pause;

figure(2)
plot(f,plot_Pxx1);

pause;

figure(3)
plot(f,plot_Pxx2);

[ 本帖最后由 zhlong 于 2007-6-4 17:39 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-6-17 08:56 | 显示全部楼层
我也一直想知道,是不是幅值只有数学上的含义,
还有Yule-Walk法;
发表于 2006-6-17 21:10 | 显示全部楼层
功率谱的数据都是相对值,他无法给出信号的实际绝对幅值,一般只要看峰值之间的比值正确就行了,当然这个问题可以通过做正规化处理解决

评分

1

查看全部评分

 楼主| 发表于 2006-6-17 22:15 | 显示全部楼层
谢谢simon21的回答!不过具体原因,我还是不很明白啊?你能不能从原理上讲讲看啊!而且有时候所求信号的幅值意义是很大的!比如,地震信号的功率谱值,其幅值有一定的范围,而我求出来的值总是和文献的对不上,不知道具体选择求解方法时怎么处理啊??
 楼主| 发表于 2006-6-18 08:22 | 显示全部楼层
欢迎大家继续讨论啊!这个问题困扰我好久了!有没有哪位老师再详细的讲一讲啊
发表于 2006-6-18 13:22 | 显示全部楼层
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)
像这个信号的话,考虑单边谱的话,40Hz的幅值为1,100Hz的幅值为3,对应的功率谱值分别为1和9.
在用FFT做谱估计值时,应把FFT的结果取模后除以FFT的点数再乘以2,得到单边谱幅值,再平方后
就得到单边功率谱值

评分

1

查看全部评分

 楼主| 发表于 2006-6-19 15:22 | 显示全部楼层
大家继续讨论啊!在地震信号处理中,常常统计功率谱幅值的变化规律,按大家的说法,就毫无意义了,因为采用不同方法,幅值差别很大,到底是怎么一回事啊??
发表于 2006-9-21 20:30 | 显示全部楼层
实际上,功率谱也可以求出真实幅值的,只要把求得的结果对
采样频率归一化,即按楼主的方法得到的相对值再乘以采样频率
即为真实结果!

[ 本帖最后由 zhangnan3509 于 2007-7-16 15:34 编辑 ]

评分

1

查看全部评分

发表于 2006-9-23 11:35 | 显示全部楼层
用各种方法得到的功率谱,都是相对值,往往用分贝来表示。则是否能知道它的绝对值,这是可能的,但需要进行校正,要设定0分贝对应的数值。
我们测量的无非是加速度、速度和位移的功率谱,则它们0分贝的参考值分别是:
a0=1um/s^2
v0=1nm/s
d0=1pm
(摘自 马大猷 《声学手册》)。为了能求出绝对的功率谱密度数值,要从测量源头开始便要进行校正,也就是从传感器、放大器、直至进AD变换,每一环节都要校正,这样才能拿到正确的结果。

评分

1

查看全部评分

发表于 2006-9-23 12:08 | 显示全部楼层

!!!不错

如果是动态,怎么编程实现?
发表于 2006-9-23 15:31 | 显示全部楼层
功率谱密度,单位为:unit^2/Hz代表单位频率上信号的能量,所以是密度谱,幅值代表频段内的有效值平方,计算时的步骤为
1 对每一分段数据进行FFT变换,并求的幅值谱
2 对幅值谱进行平方
3 将双边谱转化为单边谱
4除以频率分辨率
举个例子:
幅值为1,频率为16Hz的正弦信号,使用1024Hz采样,2048点进行功率谱密度计算,频率分辨率为1024/2048=0.5Hz,求出的功率谱单边谱在第32根谱线处的值为1,解释为:信号FFT变换后得到的双边谱,幅值分别为0.5,平方后为0.25,转化为单边乘2为0.5,在除以频率分辨率为1。将1乘以0.5,正好为该信号有效值0.707的平方。

评分

1

查看全部评分

发表于 2006-9-23 17:31 | 显示全部楼层

是的

其实就是代表某一频率的能量,有效值平方
发表于 2006-9-27 16:12 | 显示全部楼层
能不能解释一下为什么要转化为单边谱,而且最后除0.5是什么意思?谢谢
发表于 2006-9-29 09:30 | 显示全部楼层
因为实数信号的双边幅值谱都是对称的,因此用单边谱就够了,这时候把负频率成分附加到相应的正频率成分,也就是在双边谱的基础上乘以2.

评分

1

查看全部评分

发表于 2006-9-30 12:59 | 显示全部楼层
原帖由 yangzp 于 2006-9-23 15:31 发表
功率谱密度,单位为:unit^2/Hz代表单位频率上信号的能量,所以是密度谱,幅值代表频段内的有效值平方,计算时的步骤为
1 对每一分段数据进行FFT变换,并求的幅值谱
2 对幅值谱进行平方
3 将双边谱转化为单边谱 ...



我周期图法得到的幅值为1,频率为16Hz的正弦信号的功率谱单边谱在第32根谱线处的值不为1呀?


能不能解释一下,用周期图法得到在某一个频率下的功率谱与信号的幅值有什么关系?谢谢!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-3-28 21:43 , Processed in 0.081944 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表