shaochongjie 发表于 2009-4-17 23:02

求助关于FFT幅值单位的问题

用Matlab做FFT时,纵坐标总是很大,我很不解,例如一下这个程序:
%对模拟信号求其傅里叶频谱,并画出其时域波形图和傅里叶频谱图
%该模拟信号由已知的两个频率的简谐信号加一定的噪声信号组成
clear;close all;
N=360;fs=60;                     %采样点数、采样频率
f1=10;f2=15;f3=20;                  %正弦信号频率
n=0:N-1;t=n/fs;
x=sin(2*pi*f1*t)+1.5*sin(2*pi*f2*t)+1.8*sin(2*pi*f3*t);
X=abs(fft(x));
subplot(211)
plot(t,x);grid on;ylim([-5,5])
xlabel('t/s');ylabel('x(t)');title('信号x的波形');
subplot(212)
plot((0:length(X)/2-1)*fs/length(X),X(1:length(X)/2));grid on;
xlabel('f/Hz');ylabel('F');title('信号x的傅里叶频谱图');
从图1中能够看出傅里叶幅值为200,300,360,而不是我预料的1,1.5,1.8,这是怎么回事?
还有求周期方波的傅里叶级数,也有类似问题,程序如下:
%求方波函数的傅里叶级数
clc;clear;
f=1;fs=1000;N=4096;n=0:N-1;t=n/fs;
A=2*pi;T=2*pi*f;
x=A*square(T*t);   %构造方波函数,峰值为A,周期为T。
X=abs(fft(x));
subplot(211)
plot(t,x); axis();
subplot(212)
plot((0:length(X)/2-1)*fs/length(X),X(1:length(X)/2));grid on;
xlim();
xlabel('f/Hz');ylabel('F');title('信号x的傅里叶频谱图');
从图2中能够看出方波函数的频率分量,但是幅值差别很大,如何解决这样的问题?急切寻求答案!

hcharlie 发表于 2009-4-18 07:32

回复 楼主 shaochongjie 的帖子

你的问题论坛上多处有过讨论了,是大了N/2倍,例如参见:
http://forum.vibunion.com/forum/thread-79597-1-2.html

[ 本帖最后由 hcharlie 于 2009-4-18 07:46 编辑 ]

news 发表于 2009-4-18 09:31

参考一下:
y=fft(x,N);
mag=abs(y)*2/N;      
f=(0:length(y)-1)'*fs/length(y);
plot(f(1:N/2),mag(1:N/2))

shaochongjie 发表于 2009-4-18 13:13

感谢两位的回答。
页: [1]
查看完整版本: 求助关于FFT幅值单位的问题