声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2444|回复: 3

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

[复制链接]
发表于 2009-4-17 23:02 | 显示全部楼层 |阅读模式

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

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

x
用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[x(t)]');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([0,5,-8,8]);
subplot(212)
plot((0:length(X)/2-1)*fs/length(X),X(1:length(X)/2));grid on;
xlim([0,25]);
xlabel('f/Hz');ylabel('F[x(t)]');title('信号x的傅里叶频谱图');
从图2中能够看出方波函数的频率分量,但是幅值差别很大,如何解决这样的问题?急切寻求答案!

图1

图1

图2

图2
回复
分享到:

使用道具 举报

发表于 2009-4-18 07:32 | 显示全部楼层

回复 楼主 shaochongjie 的帖子

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

[ 本帖最后由 hcharlie 于 2009-4-18 07:46 编辑 ]
发表于 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))
 楼主| 发表于 2009-4-18 13:13 | 显示全部楼层
感谢两位的回答。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-16 23:34 , Processed in 0.067003 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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