基2FFT算法matlab程序编写,频率抽取(DIF)基2FFT算法的MATLAB实现
頻率抽取(DIF)基2FFT算法和時間抽取(DIT)基2FFT算法是兩種等價的FFT算法,其相同之處:
(1)DIF與DIT兩種算法均為原位運算。
(2)DIF與DIT運算量相同。
不同之處:
(1)DIF的算法結構是將DIT算法結構倒過來。
·?DIF為輸入順序,輸出亂序。運算完畢再運行“二進制倒讀”程序。
·?DIT為輸入亂序,輸出順序。先運行“二進制倒讀”程序,再進行求DFT。
(2)DIF與DIT根本區別:在于蝶形結不同。
·?DIT的復數相乘出現在減法之前。
·?DIF的復數相乘出現在減法之后。
下圖[REF1]是在N=8時,頻率抽取(DIT)基2FFT算法的流圖。
最后給出MATLAB實現的代碼:
function [Xk]=DIF_FFT_2(xn,N);
%蝶形運算開始
M=log2(N);%“級”的數量
for m=0:M-1 %“級”循環開始
Num_of_Group=2^m;%每一級中組的個數
Interval_of_Group=N/2^m;%每一級中組與組之間的間距
Interval_of_Unit=N/2^(m+1);%每一組中相關運算單元之間的間距
Cycle_Count=N/2^(m+1)-1;%每一組內的循環次數
Wn=exp(-j*2*pi/Interval_of_Group);%旋轉因子
for g=1:Num_of_Group %“組”循環開始
Interval_1=(g-1)*Interval_of_Group;%第g組中蝶形運算變量1的偏移量
Interval_2=(g-1)*Interval_of_Group+Interval_of_Unit;%第g組中蝶形運算變量2的偏移量
for r=0:Cycle_Count;%“組內”循環開始
k=r+1;%“組內”序列的下標
xn(k+Interval_1)=xn(k+Interval_1)+xn(k+Interval_2);%第m級,第g組的蝶形運算式1
xn(k+Interval_2)=[xn(k+Interval_1)-xn(k+Interval_2)-xn(k+Interval_2)]*Wn^r;%第m級,第g組的蝶形運算式2,注:1和2為同址運算
end
end
end
%序列排序開始
n1=fliplr(dec2bin([0:N-1]));%碼位倒置步驟1:將碼位轉換為二進制,再進行倒序
n2=[bin2dec(n1)];%碼位倒置步驟2:將碼位轉換為十進制后翻轉
for i=1:N
Xk(i)=xn(n2(i)+1);%根據碼位倒置的結果,將xn重新排序,存入Xk中
end
總結
以上是生活随笔為你收集整理的基2FFT算法matlab程序编写,频率抽取(DIF)基2FFT算法的MATLAB实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一身戾气是什么意思
- 下一篇: sit matlab,LabView S