求助关于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中能够看出方波函数的频率分量,但是幅值差别很大,如何解决这样的问题?急切寻求答案!
回复 楼主 shaochongjie 的帖子
你的问题论坛上多处有过讨论了,是大了N/2倍,例如参见:http://forum.vibunion.com/forum/thread-79597-1-2.html
[ 本帖最后由 hcharlie 于 2009-4-18 07:46 编辑 ] 参考一下:
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)) 感谢两位的回答。
页:
[1]