matlab在DSP中的應用(五)---離散傅立葉變換DFT
一、實驗目的
(1)加深對離散傅立葉變換(DFT)基本概念的理解
(2)瞭解有限長序列傅立葉變換(DFT)與離散時間傅立葉變換(DTFT)的聯絡
(3)掌握用MATLAB語言進行離散傅立葉變換和逆變換的方法
二、實驗原理
1.有限長序列的傅立葉變換(DFT)和逆變換(IDFT)
在實際中常常使用有限長序列。如果有限長序列訊號為x(n),則該序列的離散傅立葉變換對可以表示為:
從離散傅立葉變換定義式可以看出,有限長序列在時域上是離散的,在頻域上也是離散的。式中 ,即僅在單位圓上N個等間距的點上取值,這為使用計算機進行處理帶來了方便。
由有限長序列的傅立葉變換和逆變換定義可知,DFT和DFS的公式非常相似,因此在程式編寫上也基本一致。
例1:已知x(n)=[0,1,2,3,4,5,6,7],求x(n)的DFT和IDFT。要求:
(1)畫出序列傅立葉變換對應的|X(k)|和arg[X(k)]圖形。
(2)畫出原訊號與傅立葉逆變換IDFT[X(k)]圖形進行比較。
程式碼:
xn=0:7;%訊號
N=length(xn);
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);%DFT
x=(Xk*exp(1j*2*pi/N).^(n'*k))/N;%IDFT
subplot(4,1,1),stem(n,xn);%顯示原序列
title('x(n)')
subplot(4,1,2),stem(n,abs (x));%顯示逆變換結果
title('IDFT|X(k)|')
subplot(4,1,3),stem(n,abs(Xk));%顯示|X(k)|
title('X(k)')
subplot(4,1,4),stem(k,angle(Xk));%顯示顯示arg|X(k)|
title('arg|X(k)|')
輸出:
2.有限長序列DFT與離散時間傅立葉變換DTFT的聯絡
離散時間傅立葉變換(DTFT)是指訊號在時域上為離散的,而在頻域上則是連續的。
如果離散時間非週期訊號為x(n),則它的離散傅立葉變換對(DTFT)表示為:
與有限長序列相比,X(e^(jw))僅在單位圓上取值,X(k)是在單位圓上N個等間距的點上取值。因此,連續譜X(e^(jw))可以由離散譜X(k)經插值後得到。
例2:求x(n)=[0,1,2,3,4,5,6,7],0≤n≤7的DTFT,將(-2pi,2pi)區間分成500份。
(1)畫出原訊號。
(2)畫出由離散時間傅立葉變換求得的幅度譜X(ejw)和相位譜arg[X(e^(jw))]圖形。
程式碼:
xn=0:7;
n=0:length(xn)-1;
w=linspace(-2*pi,2*pi,500);%將[-2*pi,2*pi]頻率區間分割為500份
X=xn*exp(-1j*n'*w);%離散時間傅立葉變換,這裡的1j也為i或j
subplot(3,1,1),stem(n,xn);%顯示原序列
ylabel('x(n)')
subplot(3,1,2),plot(w,abs(X));%顯示序列幅度譜
axis([-2*pi 2*pi 1.1*min(abs(X)) 1.1*max(abs(X))])
ylabel('幅度譜')
subplot(3,1,3),plot(w,angle(X));%顯示序列相位譜
axis([-2*pi 2*pi 1.1*min(angle(X)) 1.1*max(angle(X))])
ylabel('相位譜')
輸出:
比較例1和例2,兩者影象有一定差別。
主要原因在於,該例進行DTFT時,X(e^(jw))在單位圓上取250個點進行分割;
而進行DFT時,X(k)是在單位圓上N=8的等間距點上取值,X(k)的序列長度與X(ejw)相比不夠長。
那麼仍用x(n)=[0,1,2,3,4,5,6,7],將x(n)的有限長序列後面補足0至N=100,看其DFT:
程式碼:
xn=0:7;%訊號
N=100;
xn=[xn zeros(1,N-8)];
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);%DFT
x=(Xk*exp(1j*2*pi/N).^(n'*k))/N;%IDFT
subplot(4,1,1),stem(n,xn);%顯示原序列
axis([0 7 0 10])
title('x(n)')
subplot(4,1,2),stem(n,abs(x));%顯示逆變換結果
axis([0 7 0 10])
title('IDFT|X(k)|')
subplot(4,1,3),stem(k,abs(Xk));%顯示|X(k)|
axis([0 7 0 40])
title('X(k)')
subplot(4,1,4),stem(k,angle(Xk));%顯示顯示arg|X(k)|
axis([0 10 -5 5])
title('arg|X(k)|')
輸出:
三、實驗任務
1.已知有限長序列x(n)=[7,6,5,4,3,2],求x(n)的DFT和IDFT。要求:
①畫出序列傅立葉變換對應的|X(k)|和arg[X(k)]的圖形。
②畫出原訊號與傅立葉逆變換IDFT[X(k)]的圖形進行比較。
程式碼:
xn=[7 6 5 4 3 2];%訊號
N=length(xn);
n=0:N-1;
k=0:N-1;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);%DFT
x=(Xk*exp(1j*2*pi/N).^(n'*k))/N;%IDFT
subplot(4,1,1),stem(n,xn);%顯示原序列
title('x(n)')
subplot(4,1,2),stem(n,abs(x));%顯示逆變換結果
title('IDFT|X(k)|')
subplot(4,1,3),stem(k,abs(Xk));%顯示|X(k)|
title('|X(k)|')
subplot(4,1,4),stem(k,angle(Xk));%顯示顯示arg|X(k)|
title('arg|X(k)|')
輸出:
2.求x(n)=[7,6,5,4,3,2],0≤n≤5的DTFT,將(-2p,2p)區間分成500份。要求:
①畫出原訊號。
②畫出由離散時間傅立葉變換求得的幅度譜X(ejw)和相位譜arg[X(ejw)]的圖形。
③求有限長序列x(n)=[7,6,5,4,3,2],N=100時的DFT,並與DTFT的結果進行比較。
程式碼:
xn=[7 6 5 4 3 2];
n=0:length(xn)-1;
w=linspace(-2*pi,2*pi,500);%將[-2*pi,2*pi]頻率區間分割為500份
X=xn*exp(-1j*n'*w);%離散時間傅立葉變換,這裡的1j也為i或j
N=100;
xn1=[xn zeros(1,N-length(xn))];
n1=0:N-1;
k=0:N-1;
Xk=xn1*exp(-1j*2*pi/N).^(n1'*k);%DFT
subplot(3,2,[1 2]),stem(n,xn);%顯示原序列
title('x(n)')
subplot(3,2,3),plot(w,abs(X));%顯示序列幅度譜
title('DTFT 幅度譜')
subplot(3,2,4),plot(w,angle(X));%顯示序列相位譜
title('DTFT 相位譜')
subplot(3,2,5),stem(k,abs(Xk));%顯示|X(k)|
title('DFT |X(k)|')
subplot(3,2,6),stem(k,angle(Xk));%顯示顯示arg|X(k)|
title('DFT arg|X(k)|')
輸出:
3.求x(n)=[0,1,2,3,4,5,6,7,8,9],0≤n≤9 的DFT,將(0,2pi)區間分成4份。要求:
①畫出原訊號。
②畫出由DFT求得的幅度譜X[k]和相位譜arg X[k], k=0,1,2,3的圖形。
③對上述X[k]求IDFT,將其結果與原訊號x(n) 進行比較。
程式碼:
xn=0:9;%訊號
N=length(xn);
n=0:N-1;
k=0:4;
Xk=xn*exp(-1j*2*pi/N).^(n'*k);%DFT
x=(Xk*exp(1j*2*pi/N).^(k'*n))/N;%IDFT
subplot(4,1,1),stem(n,xn);%顯示原序列
title('x(n)')
subplot(4,1,2),stem(n,abs(x));%顯示逆變換結果
title('IDFT|X(k)|')
subplot(4,1,3),stem(k,abs(Xk));%顯示|X(k)|
title('X(k)')
subplot(4,1,4),stem(k,angle(Xk));%顯示顯示arg|X(k)|
title('arg|X(k)|')
輸出:
4.思考題:
4.1**有限長序列的離散傅立葉變換(DFT)與週期序列的傅立葉級數(DFS)有何聯絡與區別**?
答:時域週期序列可看作是有限長序列x(n)的週期延拓;同理把頻域週期序列也看作是有限長序列X(k)的週期延拓。這樣我們只要把DFS的定義式兩邊取主值區間,就得到了一個關於有限長序列的時頻域對應的變換對——DFT。
4.2有限長序列的離散傅立葉變換(DFT)有何特點?
答:
(1)適用於有限長序列
(2)遵循迴圈移位定理
(3遵循迴圈卷積定理
(4) 具有對稱性。
3**有限長序列的離散傅立葉變換(DFT)與 離散時間傅立葉變換(DTFT)** 有何 聯絡與區別?
答:X(k)是x(n)的離散時間傅立葉變換X(e^(jw))在區間[0,2π]上的N點等間隔取樣。
DFT的變換區間長度N不同,對X(e^(jw))在[0,2π]區間上的取樣間隔和取樣點數也會不同,從而不同的N對應的DFT的變換結果不同。