全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1701 0
2014-06-24
       傅立叶变换的内容我也是刚学,如果有不到之处,请大家批评指正。上次书中关于傅立叶变换的内容还剩一点,现在补充完毕。
       傅立叶变换之后的数据都是一个个的复数,复数有长度和相位的信息。matlab中的abs和angle这两个方程可以计算复数的长度和相位。
       例子:
       >>t=0:1/100:10-1/100;                             %创建一个时间的向量
       >>x=sin(2*pi*15*t)+sin(2*pi*40*t);         %跟随时间变化的一个序列
       >>y=fft(x);                                                 %傅立叶变换
       >>m=abs(y);                                              %变换之后数据中的每个复数的长度
       >>p=unwrap(angle(y));                              %先用angle方程获得每个复数的相位信息,然后unwrap这个方程来平滑相邻的两                                                                           %相位之间,matlab对于相邻的两个相位之间的跳跃有个上届,pi,也就是相邻的
                                                                          %两个相位之间的差值不能超过pi,这也很好理解,相邻的两个复数之间的夹角总
                                                                          %有一个小于pi。通过加或减2pi的倍数,总能找到这个小于pi的夹角。unwrap就是
                                                                          %这样一个过程。
       >>f=(0:length(y)-1)'*100/length(y);           %频率向量
       >>subplot(2,1,1), plot(f,m),                        %将傅立叶变换后的数据的长度和相位对频率画图。
       >>ylabel('Abs. Magnitude'), grid on
       >>subplot(2,1,2), plot(f,p*180/pi)
       >>ylabel('Phase [Degrees]'), grid on
       >>xlabel('Frequency [Hertz]')
       50Hz是Nyquist频数。可以发现复数长度对频率的画图在50Hz处是完全对称的,也就是说信号中有用的信息包含在0-50Hz之间。
       方程fft的运算速度取决于傅立叶变换的长度,也就是有多少数据点要用来进行傅立叶变换。这一点在下面的命令中更加的清楚:
       y=fft(x,n)                                                   %这个方程之前介绍过了。
       当n等于2的m次幂时,fft的运行速度最快。其中m为正整数。所以在有的傅立叶变换中,通常把要变换的数据的长度变为2的m次幂。这需要用到下面这个命令:nextpow2(L)
       假设L是原始数据的长度,nextpow2(L)给出的是在所有大于等于L的2的m次幂中,最小的那个m。得出这个数之后,再将数据的长度定义为:
       >>NFFT=2^nextpow2(L);


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群