用matlab腳本語言寫M文件函數時用三種方法簡單實現實現DFT(離散傅里葉變換)


%用二重循環實現DFT:
function xk=dt_0(xn);     %define a function
N=length(xn);           %caculate the length of the variable
WN=exp(-j.*2.*pi./N);    
xk=zeros(1,N);          %define a non-zero 一維矩陣 
sum=zeros(1,N);          %define a non-zero 一維矩陣 
for k=1:N            %二重循環實現離散傅里葉變換DFT
    
    for n=1:N
        
       sum(n)=xn(n).*WN.^(k.*n);
       xk(k)=xk(k)+sum(n);
       
 
    end         
    
    
    
end
end



%用一重循環和內積實現DFT:
function xk=dt_1(xn);

 N=length(xn);
 WN=exp(-j.*2.*pi./N);    
 xk=zeros(1,N);      
  n=[0:N-1];
 for k=0:1:N-1;
   xk(k+1)=xn*WN.^(k.*n');  %此處下標一定得從1開始,因為matlab的下標是從1開始的

 end    
    
end



%不用循環,僅有內積相乘實現DFT:
function xk=dt_2(xn);
N=length(xn);

WN=exp(-j*2*pi/N);   
n=0:1:N-1;     %定義一個一維矩陣,即行向量,從0到N-1
k=0:1:N-1;
nk=k'*n;      %行向量k變換為列向量 乘上 行向量n ,得到一個N x N的矩陣
WNnk=WN.^(nk);      %做冪運算后的參數仍為一個 N x N的系數矩陣
xk=xn*WNnk;       %行向量 乘以  N x N的系數矩陣 即為DFT變換后的矩陣



end

以下是輸入一個行向量xn=[1,2,3,4],MATLAB中用以上三種方法進行DFT的結果如下圖所示:



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM