基于MATLAB在傅里叶变换中的应用
摘要:MATLAB自推出以来就受到广泛的关注,其强大的扩转功能为各个领域的应用提供了有力的工具。信号处理箱就是其中之一。在信号处理工具箱中,MATLAB 提供了滤波器分析、滤波器实现、模拟滤波器设计、模拟滤波器变换、滤波器离散化、线性系统变换等方面的函数命令。应用MATLAB作数值计算,针对当自变量的信号“时间”或“频率”取连续值或离散值时形成的五种情况作出相应的计算及频谱曲线。
关键词:傅里叶变换;周期;频率;MATLAB。
1.引言
MATLAB 是国际上公认的优秀、可靠的科学计算和仿真的标准软件。它在许多科学领域中成为计算机辅助设计和分析、算法研究的基本工具。在傅里叶变换中,应用MATLAB作数值计算,可以很容易的作出相对应的计算及频谱曲线,大大提高了计算效率。
2.傅里叶变换
傅里叶变换就是建立以时间为自变量的“信号”与以频率为自变量之间的某种变化关系。所以,当自变量“时间”或“频率”取连续值或离散值时,就形成了几种不同形式的傅里叶变换,如表1傅里叶变换形式所示。
3.连续时间、连续频率------福利叶变换
这就是连续时间非周期信号x(t)福利叶变换关系,所得到的是连续的非周期的频率密集度函数()
X jΩ.其变换对为:
正变换:
()()j t
X j x t e dt
-Ω
∞
Ω=
-∞
?(1)
逆变换:1()()2j t
X t x j e d π-Ω∞=ΩΩ-∞
? (2) 例 1 分析如图 1时域信号及其频谱图 所示的矩形脉冲信号()f t (非周期信
号)在Ω=-40~40rad/s 区间的频谱。
(a )采样密 (b )采样稀,有频率泄漏
图 1时域信号及其频谱图
根据离散时间信号[]x n 的Z 变换定义: ()[]n x z x n z +∞--∞
=∑,矩形脉冲信号的
频谱为:
F(j )=()j t f t e dt -Ω∞Ω-∞
?
按MATLAB 作数值计算的要求,它不能计算无限区间,根据信号波形的情
况,将积分上下限定为0~10s ,并将t 分成N 等份,用求和代替积分。这样,
10111()()()1M
M N
N b b z n b z Y z H z X z a z n a z ----+++==+++ (3)
可写为
12121
F(j )=()[(),(),,()][,,,]n N
j t j t j t j t i n i f t e t f t f t f t e e e t -Ω-Ω-Ω-Ω=Ω?=???????∑ (4)
这说明求和的问题可以用()f t 行向量乘以n j t e -Ω列向量来实现,式中t ?是t 的增量,在程序中用dt 表示。由于求一系列不同Ω(程序中用Ω用W 表示)处的F 值,都用同一公式,这就可以利用matlab
中的元素群运算能力。类似
地也可以得到傅里叶逆变换的数值计算式。 MATLAB 源程序如下: clear,tf=10; N=input;
dt=10/N;t=[1:N]*dt; f=[ones(1,N/2),zeros(1,N/2)]; wf=input; Nf=input;
w1=linspace(0,wf,Nf) ;dw=wf/(Nf-1); F1=f*exp(-j*t'*w1)*dt; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; subplot(1,2,1), plot(t,f,'linewidth',1.5), grid on
set(gcf,'color','w') axis([0,10,0,1.1]) subplot(1,2,2),
plot(w,abs(F),'linewidth',1.5) grid on
程序运行结果:若时间分隔的点数N=256,需求得频率宽度wf=40,需求的频率点数Nf=64,所得结果所示。若取时间分隔的点数N=64,频数宽度=40,频谱点数Nf=256,则得结果所示。此时采取采样周期为dt=10/64s ,对应的采样频率fs=1/dt=6.4Hz 或s Ω=40.2124rad/s 。从图中可以看出高频频谱以s Ω/2处为基准线的转迭,出现频率泄露。
4. 连续时间、离散频率----傅里叶级数
设()x t 代表一个周期为0T 的周期性连续时间函数,()x t 课展开成傅里叶级数,其傅里叶级数的系数为0()X jk Ω,0()X jk Ω是离散频率的非周期函数,()
x t
和0()X jk Ω组成的变换对为:
正变换:
000/2
0/2
1
()()T jk t T X jk x t e dt T -Ω-Ω=
?
(5)
逆变换:
0()()j k t
X t x j k e
∞
Ω-∞
=Ω∑ (6)
式中,002/T πΩ=为离散频率相邻两谱线之间的频率间隔,k 为谐波序号。
5. 离散时间、连续频率----序列傅里叶变换
如果信号()x n 是非周期且绝对可和,则它的离散时间傅里叶变换对数为:
正变换: ()()j j n
X e x n e ω
ω∞
-∞=∑ (7)
逆变换: 1
()()2j j n x n X e
e d π
ω
ωπωπ
-
=
? (8)
在时域上市离散序列,而在频域上是连续函数,即具有连续的频谱。这里的
ω为数字频域,它与模拟角频率Ω的关系为:T ω=Ω,其中T 为模拟信号
()()x n x nT =的抽样时间间隔。
值得注意的是,对于序列傅里叶变换,如果()x n 为无限长,那么就不能用MATLAB 直接利用式12111
12()111N N r r r H z p z p z p z
---=
++???+---来计算()j X e ω
,只可以用它对表达式()j X e ω在[0,]π频率点上求值,在画出它的幅度和相位(或者实部和虚部)。
如果()x n 为有限长,那么就可直接用MATLAB ,根据式
12
111
12()111N N r r r H z p z p z p z
---=
++???+---,在任意频率对()j X e ω进行数值计算。 例2求/3()(0.9)j n x n e π=,010n ≤≤的离散时间傅里叶变换。 MATLAB 源程序如下: n=0:10;x=(0.9*exp(j*pi/3)).^n; k=-200:200;w=(pi/100)*k;
X=x*(exp(-j*pi/100)).^(n'*k); magX=abs(X);angX=angle(X); subplot(2,1,1);plot(w/pi,magX);grid axis([-2,2,0,8])
xlabel('frequency in pi units');ylabel('|X|'); title('Magnitude Part')
subplot(2,1,2);plot(w/pi,angX/pi);grid axis([-2,2,-1,1])
xlabel('frequency in pi units');ylabel('Radians/pi'); title('Angle part')
程序运行结果如图2所示。
6. 离散时间、离散频率----离散傅里叶级数
设()x n 是周期为N 的周期序列,则()x n 的离散傅里叶级数只有N 个独立的谐波成分,数字基数为02/N ωπ=谐波成分为2/,1,2,,1k N k N π=-。k 次谐波
的系数大小为()X k 。()x n 与()X k 的变换对数为:
图 2副频和相频特性曲线
正变换: 1
()[()]()N nk
N n X K DFS X n x n W -===∑ 0,1,2,,k N =- (9)
逆变换: 10
1()[()]()N nk
N k X n IDFS X k x k W N --===∑ 0,1,2,,n N =- (10)
式中,2j
nk N
N
W π-。可以看出谐波系数()X k 也是一个以N 为周期的周期序列。
7. 离散时间、离散频率----离散傅里叶变换
如果时域序列()x n 是有限长的,长度为N ,它的频谱可以通过离散傅里叶变换(DFT )来获得,其变换对为:
正变换: 1
0()[()]()N nk
N n X k DFT x n x n W -===∑ 0,1,2,,k N =- (11)
逆变换:10
1()[()]()N nk
N k x n IDFS X k K k W N --===∑ 0,1,2,,n N =- (12)
由DFT 变换对可以看出,DFT 是对有限长序列频谱的离散化,通过DFT 是对域有限长度系列与频域有限长度相对应,从而可再频域用计算机进行信号处理。更重要的是DFT 有多个快速算法(FFT ),可使信号处理速度提高好几倍,是数字信号的实时处理得以实现。
例3用FFT 计算先练两个序列的卷积。
()sin(0.4)()N x n n R n =,()0.9()n M h n R M =
并测试直接卷积和快速卷积的时间。用圆周卷积(FFT )替代线性卷积的计算方框图如图3所示。
图 3快速卷积方框图
按照该方框图很容易编写出如下MATLAB 程序: xn=sin(0.4*[1:15]); hn=0.9.^(1:20); tic,
yn=conv(xn,hn); toc,
M=length(xn); N=length(hn); nx=1:M;nh=1:N;
L=pow2(nextpow2(M+N-1)); tic,
Xk=fft(xn,L); Hk=fft(hn,L); Yk=Xk.*Hk; yn=ifft(Yk,L) toc,
subplot(2,2,1),stem(nx,xn,'.'),ylabel('x(n)'); subplot(2,2,2),stem(nh,hn,'.');
subplot(2,1,2),ny=1:L;stem(ny,real(yn),'.'),ylabel('y(n)'
图 4 ()x n ,()h n 及其线性卷积波形
8.结语
通过本次设计,学习和掌握了MATLAB软件在傅里叶变换中的应用,分析了连续时间、连续频率傅里叶变换,连续时间、离散频率序列傅里叶变换,离散时间、离散频率离散傅里叶级数。从中学到了MATLAB软件对傅里叶变换的可视化编写程序,及其各种MATLAB表达式的表示,及相关函数的了解。
参考文献:
[1] 刘勍,温志贤.MATLAB基础及应用[M].南京:东南大学出版社:江建中,2011.
[2] 唐向红,岳恒立,郑雪峰.MATLAB及在电子信息类课程中的应用(第2版)[M].北京:电子工业出版社:韩同平,2010.