回覆列表
-
1 # 王者的衣服
-
2 # 王小佳的慧慧
這個不好用Matlab程式設計吧,Matlab只能做個驗證,而且還必須輸入一定的序列。對於未知的N以及未知的x[n]不好辦的。先上理論推導:(1)Y1[k]=對n個求和(y1[n]exp(-j(2pi/2N)kn)) n=0,1,…,2N-1,k=0,1,…,2N-1將y1[n]=x[n/2]代入上面的等式中,注意這時候求和的時候n要為偶數。使用m=n/2替換掉上面的n,最終我可以得到這樣的式子:Y1[k]=求m求和(x[m]exp(-j(2pi/N)km)),m=0,1,…,N-1,k=0,1,…,2N-1這樣我們就獲得了Y1[k]的表示式:Y1[k]=X[k] 0=<k<=N-1,Y1[k] = X[k-N] N=<k<=2N-1說白了y1[n]是x[n]的增取樣,或者叫內插0(2)同理,Y3[k]=exp(j(2pi/N)k)X[-k](-1)^n=exp(j pi n)於是乎,Y2[k]=X[k+N/2] 0=<k<=N/2-1,Y2[k]=X[k-N/2], N/2=<k<=N-1Matlab程式碼寫起來很容易的:下面是一個例子:>> x=[1,-1,1,-1];>> xfft = fft(x,4);>> y1=[1,0,-1,0,1,0,-1,0];>> y1fft=fft(y1,8);>> y2=x.*x;>> y2fft=fft(y2,4);>> y3 = [-1,1,-1,1];>> y3fft=fft(y3,4);自己在WorkSpace裡面核對下理論推導和模擬的關係就很清楚了這個DFT的關係,只要記住迴圈對稱性,以及只取一個週期,其它認為是0就很容易了理論推導的時候需要注意每個變數的範圍就OK了:)
N=8;a=1/2;RBase=(0:N-1);CBase=(0:N-1)";W=exp(-j*2*pi/N*repmat(RBase,N,1).*repmat(CBase,1,N))x=a.^(0:N-1)";X=W*x