关于FFT变换后纵坐标的含义
这个一直搞不明白,比如对如下信号进行FFT仿真分析:t=0:0.001:1.023;
X=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*200*t);
Y=fft(X,1024);
Pyy=Y.*conj(Y)/1024;
f=1000*(0:511)/1024;
plot(f,Pyy(1:512));
理所当然在50、100和200Hz处出现峰值,但峰值的物理含义是什么呢?比如要分析声信号,似乎应该转换为dB表示,但FFT后的纵坐标显然不是dB,如果再进行对数转换则结果变得乱七八糟。
此外,还有一个疑问:三个正弦波既然振幅都是1,难道FFT后能量峰值不应相同吗?实际上是不同的,而且分别用256、512和1024点分析时各峰的高低顺序还有变化,实在令人不解啊!
请大侠们赐教!!!
[ 本帖最后由 不是很傻 于 2007-1-11 21:30 编辑 ] 信号的能量不仅跟幅值有关,而且与频率也有密切关系。
以你的信号为例,虽然三个成分都是正弦波,并且幅值相同,但是他们的频率不同,因此能量的大小肯定不一样。幅值相同时,频率高的信号能量肯定大! 原帖由 不是很傻 于 2007-1-11 21:29 发表
这个一直搞不明白,比如对如下信号进行FFT仿真分析:
...
理所当然在50、100和200Hz处出现峰值,但峰值的物理含义是什么呢?比如要分析声信号,似乎应该转换为dB表示,但FFT后的纵坐标显然不是dB,如果再进行对数转换则结果变得乱七八糟。
此外,还有一个疑问:三个正弦波既然振幅都是1,难道FFT后能量峰值不应相同吗?实际上是不同的,而且分别用256、512和1024点分析时各峰的高低顺序还有变化,实在令人不解啊!
楼主在做FFT分析时,采样频率是1000,取样点是1024,谱分析后的频率间隔df=1000/1024=0.9766,这样在谱分析后50、100和200Hz都不是df的整数倍,所以必然在谱图中会出现栅栏效应和泄漏现象,所以才有楼主所讲的“三个正弦波既然振幅都是1,难道FFT后能量峰值不应相同”,和“再进行对数转换则结果变得乱七八糟”。
我对程序作了修改,供参考:
N=1000;
t=0:0.001:0.999;
X=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*200*t);
Y=fft(X,N);
P=abs(Y)*2/N;
%Pyy=Y.*conj(Y)/1024;
f=1000*(0:N/2-1)/N;
subplot 211; plot(f,P(1:N/2)); grid;
Pyy=P.*P;
subplot 212; plot(f,Pyy(1:N/2)); grid; 原帖由 shenyongjun 于 2007-1-11 23:34 发表
信号的能量不仅跟幅值有关,而且与频率也有密切关系。
以你的信号为例,虽然三个成分都是正弦波,并且幅值相同,但是他们的频率不同,因此能量的大小肯定不一样。幅值相同时,频率高的信号能量肯定大!
好像不是这样,三个正弦波中间的那个峰值最高 原帖由 songzy41 于 2007-1-12 08:16 发表
楼主在做FFT分析时,采样频率是1000,取样点是1024,谱分析后的频率间隔df=1000/1024=0.9766,这样在谱分析后50、100和200Hz都不是df的整数倍,所以必然在谱图中会出现栅栏效应和泄漏现象,所以才有楼主所讲的 ...
谢谢这位兄弟!按您的程序三个峰值一样高了,而且最高点都保持在1!
不知道这个1是个什么概念?
如何转换为声压级dB呢? 原帖由 不是很傻 于 2007-1-12 15:48 发表
不知道这个1是个什么概念?
如何转换为声压级dB呢?
这1表示原始信号的幅值。
要转换为声压级dB,就不太简单了。上谈到幅值1,如果在f1处信号有任意一个幅值A,按
P=abs(Y)*2/N;(我曾有一个帖子在理论上证明了为什么要乘2/N,如果有兴趣不妨查一下)
去计算,便能求出在f1处幅值为A。数值A是从AD转换过来的,因此便有多少数值对应于多少电压。如果知道传声器的灵敏度,便可知道声压了。如果在测量过程中传声器输出经过放大的话还要扣除。
声压级是20log10(p/p0)
有了声压p,对p0之比就可以求出声压级了。 假设传声器灵敏度为1(实际当然不是),AD得到的振幅也是1,那么以dB为纵坐标的频域声压级曲线就为
subplot 211; plot(f,20*log10(P(1:N/2))/P0); grid;
这样对吗?
本例其实不过是一个自己设计的仿真分析,无所谓灵敏度什么的,是不是随便取个数做底,然后求对数就行了呢?
[ 本帖最后由 不是很傻 于 2007-1-13 08:40 编辑 ] 可以这么认为。 取对数后纵坐标的单位就是dB了;
如果不取对数呢?纵坐标是什么单位?
假定原信号是声压信号,FFT变化后,P=abs(Y)*2/N和Pyy=P.*P的纵坐标应该标注什么单位呢? 原帖由 不是很傻 于 2007-1-13 16:40 发表
取对数后纵坐标的单位就是dB了;
如果不取对数呢?纵坐标是什么单位?
假定原信号是声压信号,FFT变化后,P=abs(Y)*2/N和Pyy=P.*P的纵坐标应该标注什么单位呢?
对,取对数后纵坐标的单位就是dB了。
如果不取对数,但经计算已得到了声压的数值,则单位可以是微巴,或者其它的声压单位。
假定原信号是声压信号,FFT变化后,P=abs(Y)*2/N和Pyy=P.*P的纵坐标应该标注什么单位呢?
原表示式中
X=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*200*t);
X是什么单位,P也将是什么单位,Pyy只是幅值的平方,并不是功率谱。
如果信号是声压信号,又认为放大倍数为1,换能器灵敏度是1,AD变换为1,这样的假设下也可把枞坐标设成声压单位。 再次感谢楼上!太强了!:victory:
终于可以放心地在论文里面写仿真了:lol
我这个完全是仿真数据,不取对数时纵坐标写“线性量级”如何?
写Pa或微巴的话,估计不太明白的人还得问我怎么回事呢:loveliness: 原帖由 songzy41 于 2007-1-12 08:16 发表
楼主在做FFT分析时,采样频率是1000,取样点是1024,谱分析后的频率间隔df=1000/1024=0.9766,这样在谱分析后50、100和200Hz都不是df的整数倍,所以必然在谱图中会出现栅栏效应和泄漏现象, ...
仔细想想我又有疑问了:
1.假如采样频率为10000,则df=10000/1024=9.766,岂不是说不是9.766整数倍的频率都不能准确分析?如此说来采样频率越高反而越不好?
2.即使取采样点为1000,令df=1000/1000=1.0,但像100.5Hz这样的频率依然不能避免栅栏效应和泄漏现象啊,如果要分析一个频率未知的信号,或者频率很分散犹如白噪声一类的东西,具体应该怎么选择采样频率和采样点呢? 本帖最后由 wdhd 于 2016-9-6 13:12 编辑
原帖由 songzy41 于 2007-1-13 20:59 发表
对,取对数后纵坐标的单位就是dB了。
如果不取对数,但经计算已得到了声压的数值,则单位可以是微巴,或者其它的声压单位。
假定原信号是声压信号,FFT变化后,P=abs(Y)*2/N和Pyy=P.*P的纵坐标应该标注什么 ...
是简单的取对数就行了吗?我在一篇文章里看到
spl=20log10(P/Pref)
还有,既然上面所说的语句得出的纵坐标是与原信号一样的单位,那么假如采用b=abs(Y)plot(b)的图的纵坐标又是什么呢? 支持 怎么还没有高手来指点一下啊
页:
[1]
2