Matlab与傅里叶变换

嗨,大家好。二狗又回来了。

今天,二狗给大家讲一讲Matlab实现傅里叶变换。

大家都知道,信号分为两种,确定信号和不确定信号。在确定信号中,有两个非常重要的类别,时域分析和频域分析。而将两者充分结合的,就是我们今天要讲的傅里叶变换。

绝大多数工科狗在大一或者大二的时候,都或多或少接触过傅里叶变换。二狗也不例外。当初二狗学《复变函数与积分变换》时,差点被搞成死狗,就是因为傅里叶变换。

下面这个三维图就是频域和时域上的周期函数,非常形象的显示了这个道理。

由上可知,在空间中。从频率或者时域的角度都可以描述这个周期函数。

下面,我们先帮助大家简单回忆一下傅里叶变换的基本原理。

周期函数都是时域表达式,既然有周期,当然也就有频率。有些时候,我们需要用到函数的频域表达式。这就需要在频域和时域之间转化。

最简单的就是利用周期函数的三角函数展开式,公式如下

以上是三角展开形式,今天我们不用这个,完全是为了方便大家理解,所以先说了一个简单的(见谅)。

我们今天要用的是复指数形式

当然,两种形式可以相互转换的,只需要利用欧拉公式

下面,我举一个简单的函数作为例子f(t)=sin(t)+2*cos(t)。

我们来对它进行傅里叶变换。根据已有的公式,我们一步步推进,我们先画出这个函数的图像

下面的几步将傅里叶变换的参数全部求解出来,依据的就是复指数形式表达式(看不懂的同学倒回去看一看刚才讲的公式)。

k=-N:N;
W=pi*k/(N*dt);
Fw=dt*ft*exp(-j*t1'*W);

然后,对Fw进行一次绝对值变化。得到最终的结果。

以上就是信号的频域分析。即傅里叶表达式图像

既然有频域函数,那当然就有频谱图。周期函数往往是连续的,但是频率却是离散的。

废话不说了,上代码:

Ts=0.4;  %采样周期,可通过改变采样周期大小观察抽样信号的频谱变化
dt=0.1;
t1=0:dt:10;
ft=sin(t1)+2*cos(t1);
%subplot(1)
plot(t1,ft);%grid
axis('auto');
xlabel('t');ylabel('f(t)');
title('函数图像');
hold on
figure

N=400;
k=-N:N;
W=pi*k/(N*dt);
Fw=dt*ft*exp(-j*t1'*W);
plot(W,abs(Fw));grid;
axis('auto')
xlabel('omega');ylabel('F(w)');
title('信号的频谱');
hold on
figure
%下面代表抽样过程
t2=0:Ts:10;
fst=sin(t2)+2*cos(t2);
plot(t1,ft,'r*');hold on
figure
%stem适合画火柴棍型图
stem(t2,fst);grid
axis('auto')
xlabel('t');ylabel('fs(t)');
title('抽样后的信号');%hold off
Fsw=Ts*fst*exp(-j*t2'*W);
%subplot(224)
plot(W,abs(Fsw));grid
axis('auto')
xlabel('omega');ylabel('Fs(w)');
title('抽样信号的频谱');

原文发布于微信公众号 - matlab爱好者(matlabaihaozhe)

原文发表时间:2019-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券