嗨,大家好。二狗又回来了。
今天,二狗给大家讲一讲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);%gridaxis('auto');xlabel('t');ylabel('f(t)');title('函数图像');hold onfigureN=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 onfigure%下面代表抽样过程t2=0:Ts:10;fst=sin(t2)+2*cos(t2);plot(t1,ft,'r*');hold onfigure%stem适合画火柴棍型图stem(t2,fst);gridaxis('auto')xlabel('t');ylabel('fs(t)');title('抽样后的信号');%hold offFsw=Ts*fst*exp(-j*t2'*W);%subplot(224)plot(W,abs(Fsw));gridaxis('auto')xlabel('omega');ylabel('Fs(w)');title('抽样信号的频谱');