杭州锐达数字技术有限公司
查看: 34621|回复: 96

[FFT] 信号经过FFT后,该怎样计算幅值和相位

  [复制链接]
发表于 2007-10-24 20:34 | 显示全部楼层 |阅读模式

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

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

x
我想用整周期截断的DFT来对信号进行处理,求得各谱线对应的幅值和相位,下面的信号经过FFT后,该怎样计算幅值和相位啊?还请各位高手指点啊啊
  1. N=128;
  2. n=0:N-1;
  3. t=n/fs;
  4. f0=10;%设定正弦信号频率
  5. %生成正弦信号
  6. x=sin(2*pi*f0*t);
  7. figure(1);
  8. subplot(231);
  9. plot(t,x);%作正弦信号的时域波形
  10. xlabel('t');
  11. ylabel('y');
  12. title('正弦信号y=2*pi*10t时域波形');
  13. grid;
  14. %进行FFT变换并做频谱图
  15. y=fft(x,N);%进行fft变换
  16. mag=abs(y);%求幅值
  17. f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
  18. figure(1);
  19. subplot(232);
  20. plot(f,mag);%做频谱图
  21. axis([0,100,0,80]);
  22. xlabel('频率(Hz)');
  23. ylabel('幅值');
  24. title('正弦信号y=2*pi*10t幅频谱图N=128');
  25. grid;
复制代码
回复
分享到:

使用道具 举报

发表于 2007-10-24 22:13 | 显示全部楼层

回复 #1 hehairen 的帖子

你的问题建议先搜索本版相关帖子学习一下。
可以“整周期采样”,“FFT幅值”等为关键词进行搜索!
 楼主| 发表于 2007-10-25 09:13 | 显示全部楼层

不好意思

我搜索了相关的帖子,它们都是关于幅值显示的问题,而我想要把整周期采样后的信号,经FFT后,求得其中各阶次频率分量所对应的精确的“幅值”和“相位”,请问该怎样做啊?
谢谢啊
发表于 2007-10-25 09:25 | 显示全部楼层
如果知道信号有几个整周期,要提取特定阶次的话,用DFT来做最简单方便。
 楼主| 发表于 2007-10-25 09:41 | 显示全部楼层

谢谢啊

MATLAB里DFT用的不多啊,还请再给具体指点一下啊。。。。。。
发表于 2007-10-25 10:02 | 显示全部楼层
例如说你采了10个周期的信号,那你要求第n阶的话,只要用DFT 求出第n*10条谱线的值就行了。
 楼主| 发表于 2007-10-25 10:13 | 显示全部楼层

十分感谢您啊

我刚刚查了一下,MATLAB里好象没有相关的DFT命令啊,是否需要自己编程啊,还请提示一下,我向您表示由衷的感谢啊
发表于 2007-10-25 10:45 | 显示全部楼层
xfn=x*exp(-j*2*pi*n'*k/N)/N;

其中N为采样点数;x为信号(N*1的行向量);n=0:N-1;k为要求的谱线号(行向量)

点评

赞成: 3.0
赞成: 3
  发表于 2014-4-1 18:31
发表于 2007-10-25 11:05 | 显示全部楼层
fs=1;
N=100;  %频率分辨率为fs/N=0.01Hz,下面信号的频率0.05是0.01的整数倍,即为整周期采样
n=0:N-1;
t=n/fs;
f0=0.05;%设定余弦信号频率
x=cos(2*pi*f0*t);%生成正弦信号 %FFT是余弦类变换,最后得到的初始相位是余弦信号的初时相位,在这里为0。如果信号
figure(1);                                   %为x=sin(2*pi*f0*t);则初时相位应该是-90度而非0度。
subplot(211);
plot(t,x);%作余弦信号的时域波形
xlabel('t');
ylabel('y');
title('余弦信号 时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y)*2/N;%求幅值 乘上后面的2/N得到正确幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
subplot(212);
plot(f(1:N/2),mag(1:N/2));%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('余弦信号 幅频谱图');
grid;
angle(y(6))*180/pi %求信号初时相位。频率坐标f为[0 0.01 0.02 0.03 0.04 0.05 0.06 ...],所以谱线y中第6根谱线和信号x对应。

1.png
2.png
相位近似为 0

[ 本帖最后由 zhlong 于 2007-10-25 11:15 编辑 ]

点评

赞成: 4.0
赞成: 4
  发表于 2014-4-1 18:31
赞成: 4
真是牛银!  发表于 2013-3-28 20:05

评分

2

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2007-10-25 12:16 | 显示全部楼层

太感谢您了

您的程序清晰明了,可以作为整周期采样FFT后,求幅值和相位的经典例子,谢谢你啊,建议应该作为精华贴,经典啊
发表于 2007-11-20 10:10 | 显示全部楼层

信号整周期采样,经过FFT后,该怎样计算幅值和相位呢

fs=1;
N=100;  %频率分辨率为fs/N=0.01Hz,下面信号的频率0.05是0.01的整数倍,即为整周期采样
n=0:N-1;
t=n/fs;
f0=0.05;%设定余弦信号频率
如果我的输入信号是x=cos(2*pi*f0*t+pi/3),它有一个初始相位,我是不是也可以用上面的方法来求信号的初始相位呢?
发表于 2007-11-20 16:46 | 显示全部楼层

回复 #11 hzh 的帖子

一试便知
发表于 2007-12-23 21:48 | 显示全部楼层
如果,信号频率不是频率分辨率的整数倍,会出现什么情况呢?
发表于 2007-12-23 21:58 | 显示全部楼层
不能直接得到正确的频率和幅值,不过可以通过频谱校正得到比较准确的结果。
发表于 2008-4-2 15:12 | 显示全部楼层
那如果频率分辨率很小的话,是不是就可以不用通过频谱校正了呢?