楼主: shucai2003
18487 4

[程序分享] matlab或R里FFT函数实现快速傅里叶变换 [分享]

  • 0关注
  • 0粉丝

本科生

0%

还不是VIP/贵宾

-

威望
0
论坛币
181 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3693 点
帖子
70
精华
0
在线时间
46 小时
注册时间
2013-1-23
最后登录
2015-12-8

楼主
shucai2003 发表于 2013-1-26 11:42:22 |只看作者 |倒序

在matlab或R里我们可以直接调用FFT函数实现快速傅里叶变换,然而FFT的输出到底是什么含义,经常让初学者们一头雾水。实际上,它不过是每个采样点(共N个)对应的振幅(可能叫振幅不是很贴切,准确地讲它们的绝对值才是振幅)或者能量值(该值的绝对值越大,说明该点对应的周期越明显)。

注意:在这些输出值中,第一个值是对应的直流分量的振幅(其实就是周期为无穷的可能性),那么第2个值对应第1个采样点,第3个对应第2个。。第n个对应第n-1个采样点。而且这个输出是对称的,也就是大家直接关注前N/2个才样点就可以了。那么第n个点的频率是多少呢,它的计算公式是Fn=(n-1)*Fs/N,其中Fs是采样频率。由此就可以计算出n点对应的周期了,它是频率的倒数,即Tn=N/((n-1)*Fs)。下面给出两个例子:

例一:>>A=[1,2,1,2,1,2];

          >>fft(A)

           ans= 9 0 0 -3 0 0

         这里输出的意思是,序列A有很大的可能没有周期(第一个点的频率为0,它对应的数字是9),还有一个可能的周期是-3对应的周期,这个周期的计算方法是:-3对应于n=4,默认Fs=1,这里T=6/(3*1)=2,即周期为2。看明白了吗?

       例二: Fn=5; %频率

N=300; %caiyang dian

Fs=40; %cai yang pinlv

t=[0:1/Fs:N/Fs];

S=cos(2*pi*Fn*t);

abs(fft(S));

plot(abs(fft((S))));

如果按照以上的公式计算一下,就会得到该函数的对应频率Fn=5.

    总而言之一句话,这些输出的绝对值就是序列对应的二维频域图上的点,它的横坐标是采样点,纵坐标是振幅,由它我们可以计算序列可能的频率或周期等值。


关键词:MATLAB 傅里叶变换 matla atlab Mat 快速 matlab

stata SPSS
沙发
syler 发表于 2013-1-28 19:44:58 |只看作者
顶啊,楼主,傅立叶变换里面带宽限制是什么意思啊
回复

使用道具 举报

藤椅
shucai2003 发表于 2013-1-29 16:05:26 |只看作者
syler 发表于 2013-1-28 19:44
顶啊,楼主,傅立叶变换里面带宽限制是什么意思啊
sorry,,我也不知道,我也刚学fft,这是我从别处转过来的
回复

使用道具 举报

板凳
flymaple 发表于 2015-7-9 01:14:29 |只看作者
感觉楼上说的有问题

傅立叶变换,是从低频到高频的叠加,第一个是直流分量没有问题,第二个值应该是采样点能够代表的最低频率函数的振幅,一直到最高频率(最高频率等于相邻两个采样点的代表一个波峰/谷)的叠加
回复

使用道具 举报

报纸
flymaple 发表于 2015-7-9 01:26:57 |只看作者
另外,一个6个点的fft,结果会是6个值,但是只有前四个值有意义。按照cos2nf(备注:n代表派)的含义,f越大,角速度越快,频率也就越大,在第四个值就达到的最大速度。后边两个值,在转换为(-派,0)的这个范围内是,会恰好发现属于对阵频率。所以在频域角度,可以不关注。(但是数值肯定是有用的,在反fft时需要参与计算)

个人小白理解,请大家指正。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2020-9-29 09:45