加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab中fft的正确简单理解

(2016-12-03 02:39:49)
标签:

fft

matlab

数字信号处理

分类: 学习记录
我们在用matlab进行频谱分析时,fft是最常用的函数。但是fft函数设计到复杂的数学知识,要真正搞懂并非易事。作者也花了很多时间在网上找各种分析说明,今天终于搞懂自己需要用到的部分,在这里也和小伙伴们分享一下!

一:Matlab对fft的官方解释:
    fft(X) is the discrete Fourier transform (DFT) of vector X.  For
    matrices, the fft operation is applied to each column. For N-D
    arrays, the fft operation operates on the first non-singleton
    dimension.
 
    fft(X,N) is the N-point fft, padded with zeros if X has less
    than N points and truncated if it has more.
    通过matlab的help文件可知,fft的输入为信号X和采样点数N。

二:对于N值的确定
    N决定了频率采样的点数(注意不是时域的)。因为时域的采样频率决定了频域的最大值(fmax=fs),所以在
    已知道信号的时域采样率后我们就可是确认频率域的分辨率fs,即ff=fs/N. 所以N可以根据分辨率的需要来自
    行设定,在没有输入N的情况下系统默认为信号时域的采样点数!但是注意设定的N值要产生的最小分辨率要
    小于被分析信号频率间的最小差值,要不然会失真!后面的例子有详细的说明!

三:频率轴的真确处理
     由傅里叶变化                    
                                N
             X(k) =       sum  x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1< = k <= N.
                               n=1
可知,采样得到的频率被分成了N份,范围是[0,fs],也就是[0,N]。所以fft得到的频域不是真实的频域,二是基
于采样点数得到的,那么采样点的不同取值会不会影响到频谱图呢?除了频率轴的取值有变化外,傅里叶变换
的形状完全没有变化,当然是在N的取值不会使得频谱失真的情况下的!所以在满足不失真的情况下,不管N
为多少,我们都可以得到真确的傅里叶变换图形,只是分辨率不同罢了!但是要获得真正的频率轴,需要对频
率周进行归一化处理。我们知道在满足采样定律的情况下傅里叶变换得到的谱的最大频率为fs/2,所以fft得到的
图是关于fs/2对称的,只需要对频率轴做一个简单的变化即可,即频率周除以N值,然后截取前一半即可!

四:详细matlab程序说明
首先创建一个采样率为fs=100Hz,长度为K=1000,时长t=fs*K,所以时间轴n为n=linspace(dt,t,K);
%% 定义信号的时间轴和采样频率
dt=0.01;
fs=1/dt; 
K=1000;
t=dt*K;
n=linspace(dt,t,K);%% 组合信号
x1=5*sin(2*pi*5*n);
x2=10*sin(2*pi*10*n);
x3=5*sin(2*pi*15*n);
x=x1+x2+x3;
plot(x);
xlabel('时间轴');
ylabel('y轴');
legend('时域信号')
                                                           得到的原始信号图http://s1/mw690/006zl53Zzy76SY5D7qMb0&690
对原图进行fft变化,不输入N的值(此时默认为N=K=1000)
%% fft变换
N=K;
a=fft(x,N);
a=abs(a);
figure,
plot(a);
legend('fft变换后的原始频谱');
http://s9/mw690/006zl53Zzy76SYp3A1248&690
%% 对fft变换的频率轴做归一化处理
f=(1:N/2)*fs/N; 
figure,plot(f,a(1:N/2));
xlabel('f/Hz');
ylabel('功率P');
legend('fft变换后对频率进行正确化后的频谱图');
http://s16/mw690/006zl53Zzy76SYu5gQf9f&690

        上面是整个小实验的原始程序和相关的plot图


五、在修改一下N的值我们来看看频谱图会发生什么变化!原始信号的频率点为5Hz,10Hz,15Hz。

                                              K=5000http://s7/mw690/006zl53Zzy76SZd2avI76&690
                                                     K=500
http://s16/mw690/006zl53Zzy76SZgYAdVef&690
                                                         K=200
http://s14/mw690/006zl53Zzy76SZiqbg13d&690
                                                       K=100
http://s8/mw690/006zl53Zzy76SZiCPmT27&690
                                                    K=50
http://s13/mw690/006zl53Zzy76SZi9TJi8c&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有