声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: hehairen

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

  [复制链接]
发表于 2008-4-14 12:44 | 显示全部楼层

subplot(231);

subplot(231);什么意思啊?帮忙:handshake
回复 支持 反对
分享到:

使用道具 举报

发表于 2008-4-14 13:52 | 显示全部楼层
help subplot
就是用来画子图的
这是最基本的绘图指令,你该找本MATLAB的书来看看吧
发表于 2008-4-15 11:26 | 显示全部楼层

有个问题,请教!

当FFT加窗时计算幅值时,所乘的恢复系数怎么来的?
发表于 2008-4-24 09:53 | 显示全部楼层
如果我输入信号是cos(4*pi*f0*t+pi/3)+cos(2*pi*f0*t+pi/6)为什么用上面程序得出来的初始相位还是60°?
另外“angle(y(6))*180/pi %求信号初时相位。频率坐标f为[0 0.01 0.02 0.03 0.04 0.05 0.06 ...],所以谱线y中第6根谱线和信号x对应。”怎么解释?程序运行后的幅频谱图中根本看不到0.06HZ的频谱!
发表于 2008-5-7 08:41 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 10:14 编辑
原帖由 eguang8116 于 2008-4-2 15:12 发表
那如果频率分辨率很小的话,是不是就可以不用通过频谱校正了呢?

只要信号频率是频率分辨率的整数倍,就能直接从谱图上得到幅值和初始相角。频率分辨率的大小是相对的,信号频率不是频率分辨率的整数倍时,为了得到信号的幅值和初始相角,就得用频谱校正法。
发表于 2008-5-7 08:44 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 10:14 编辑
原帖由 rocky_ding 于 2008-4-24 09:53 发表
如果我输入信号是cos(4*pi*f0*t+pi/3)+cos(2*pi*f0*t+pi/6)为什么用上面程序得出来的初始相位还是60°?
另外“angle(y(6))*180/pi %求信号初时相位。频率坐标f为[0 0.01 0.02 0.03 0.04 0.05 0.06 ...],所以谱线y ...

在楼主的信号中是两个频率,而zhlong的程序只对一个频率计算出初始相角。只要稍修改一下,增加
angle(y(11))*180/pi
就能得到0.02时的初始相角:
ans =
   30.0000

ans =
   60.0000
发表于 2008-5-7 09:08 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 10:14 编辑
原帖由 完治 于 2008-4-15 11:26 发表
当FFT加窗时计算幅值时,所乘的恢复系数怎么来的?

请参看“加窗频谱分析的恢复系数及其求法” 汕头大学学报 2003 18(3)
发表于 2008-5-7 16:24 | 显示全部楼层
相位的计算对故障诊断和模态参数识别,都有很大的用处啊!
发表于 2008-5-7 16:43 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 10:14 编辑
原帖由 songzy41 于 2008-5-7 09:08 发表

请参看“加窗频谱分析的恢复系数及其求法” 汕头大学学报 2003 18(3)

加窗频谱分析的恢复系数及其求法<---这份文档不知哪位可以提供啊,网上有的都不能下载阿
发表于 2008-5-7 16:57 | 显示全部楼层
告诉我email地址,我可发送给你。
发表于 2008-5-7 17:10 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 10:15 编辑
原帖由 songzy41 于 2008-5-7 16:57 发表
告诉我email地址,我可发送给你。

jnny_cn@live.com

非常感谢您的帮助,这几天真是从您这里学了很多
发表于 2008-5-7 23:13 | 显示全部楼层

我在做频谱校正时加hanning窗时程序出错,恳请高人指点一下

先谢过了!
  t=0:0.00001:0.02;
    leng=length(t);
    for m=1:leng
       if t(m)<0.00167
        v(m)=0;
       elseif ((t(m)>=0.00167)&(t(m)<0.01))
        v(m)=sin(2*pi*50*t(m));
       elseif ((t(m)>=0.01)&(t(m)<0.01167))
            v(m)=0;
       elseif t(m)>=0.01167
            v(m)=sin(2*pi*50*t(m));
       end
    end
plot(t,v);grid;
N=2000;
w=hanning(2000);v=v.*w';
y=fft(v,N);
mag=abs(y)*2/N;
f=(0:length(y)-1)'*100000/length(y);
figure;
plot(f(1:N/2),mag(1:N/2));
axis([0,1000,0,1]);
xlabel('频率(Hz)');ylabel('幅值');
grid;

出错信息为:??? Error using ==> times
Matrix dimensions must agree.

Error in ==> hanshu at 16
w=hanning(2000);v=v.*w';
发表于 2008-5-8 08:22 | 显示全部楼层
把语句
w=hanning(2000);v=v.*w';
应改为
w=hanning(2001);v=v.*w';
发表于 2008-5-8 21:48 | 显示全部楼层

回复 28楼 的帖子

谢谢您的指点,但为什么是2001呢,之前不是设的2000吗
发表于 2008-5-8 22:04 | 显示全部楼层
还有一点想请教:如果采用整周期采样,我程序里的N是不是就应该设成2000?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-26 21:44 , Processed in 0.097597 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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