国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《FPGA數(shù)字信號處理》基于FPGA的32點并行FFT/IFFT設(shè)計

這篇具有很好參考價值的文章主要介紹了《FPGA數(shù)字信號處理》基于FPGA的32點并行FFT/IFFT設(shè)計。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本人FPGA小白,只關(guān)注FPGA具體功能實現(xiàn)。如以下描述有誤,望評論區(qū)指正!以下內(nèi)容,純手打,嚴禁未經(jīng)過同意擅自轉(zhuǎn)載,謝謝!

1、基2按時間抽取的FFT流程

相比于基2算法,基4算法對本設(shè)計(32點FFT)運算的復雜度并沒有顯著的降低。
基2按時間抽取的FFT蝶形運算如下圖所示:

并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理
可以發(fā)現(xiàn)輸入端與輸出端的序列順序是不一樣的,若想得到輸出端為自然順序(0-31)的序列,則需要將輸入端的序列按一定的規(guī)則重新排列。
復雜的公式推導這里就不列了,需要的可以隨便在一本數(shù)字信號處理的書中找到,這里只說明怎么重新排列輸入端的序列順序。
這里的關(guān)鍵字是“基2”和“按時間抽取”。
并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理
按時間抽取的大流程是:將序列按時間順序抽取成奇偶項,并對得到的序列繼續(xù)抽取,直到抽取后得到的序列長度為2(基2)。此時重新排列即為FFT蝶形運算的輸入端序列順序。

2、matlab FFT算法實現(xiàn)

算法比較簡單,只有一個核心運算:蝶形運算。
并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理
如上圖所示:C = A + B * Wn D = A - B * Wn,其中Wn為蝶形因子

matlab 蝶形運算

function [outputArg0,outputArg1] = butterfly(arg0,arg1,butterfly_factor)
%BUTTERFLY 蝶形運算
%   此處顯示詳細說明
    outputArg0 = arg0 + arg1 * butterfly_factor;
    outputArg1 = arg0 - arg1 * butterfly_factor;

end

matlab 蝶形因子計算

N = 32;

BF_factor_L0 = linspace(0,N/32-1,N/32);
BF_factor_L0 = exp(-1j*2*pi/2.*BF_factor_L0) ; % 蝶形因子 * 32767 

BF_factor_L1 = linspace(0,N/16-1,N/16);
BF_factor_L1 = exp(-1j*2*pi/4.*BF_factor_L1); % 蝶形因子 * 32767

BF_factor_L2 = linspace(0,N/8-1,N/8);
BF_factor_L2 = exp(-1j*2*pi/8.*BF_factor_L2); % 蝶形因子 * 32767

BF_factor_L3 = linspace(0,N/4-1,N/4);
BF_factor_L3 = exp(-1j*2*pi/16.*BF_factor_L3); % 蝶形因子 * 32767

BF_factor_L4 = linspace(0,N/2-1,N/2);
BF_factor_L4 = exp(-1j*2*pi/32.*BF_factor_L4); % 蝶形因子 * 32767

end

matlab 第0級蝶形運算

% Level_0
[result_L0(1) ,result_L0(2)] = butterfly(data(1) ,data(17),BF_factor_L0(1));
[result_L0(3) ,result_L0(4)] = butterfly(data(9) ,data(25),BF_factor_L0(1));
[result_L0(5) ,result_L0(6)] = butterfly(data(5) ,data(21),BF_factor_L0(1));
[result_L0(7) ,result_L0(8)] = butterfly(data(13),data(29),BF_factor_L0(1));
[result_L0(9) ,result_L0(10)]= butterfly(data(3) ,data(19),BF_factor_L0(1));
[result_L0(11),result_L0(12)]= butterfly(data(11),data(27),BF_factor_L0(1));
[result_L0(13),result_L0(14)]= butterfly(data(7) ,data(23),BF_factor_L0(1));
[result_L0(15),result_L0(16)]= butterfly(data(15),data(31),BF_factor_L0(1));
[result_L0(17),result_L0(18)]= butterfly(data(2) ,data(18),BF_factor_L0(1));
[result_L0(19),result_L0(20)]= butterfly(data(10),data(26),BF_factor_L0(1));
[result_L0(21),result_L0(22)]= butterfly(data(6) ,data(22),BF_factor_L0(1));
[result_L0(23),result_L0(24)]= butterfly(data(14),data(30),BF_factor_L0(1));
[result_L0(25),result_L0(26)]= butterfly(data(4) ,data(20),BF_factor_L0(1));
[result_L0(27),result_L0(28)]= butterfly(data(12),data(28),BF_factor_L0(1));
[result_L0(29),result_L0(30)]= butterfly(data(8) ,data(24),BF_factor_L0(1));
[result_L0(31),result_L0(32)]= butterfly(data(16),data(32),BF_factor_L0(1));

matlab 第1級蝶形運算

% Level_1
[result_L1(1) ,result_L1(3)] = butterfly(result_L0(1) ,result_L0(3) ,BF_factor_L1(1));
[result_L1(2) ,result_L1(4)] = butterfly(result_L0(2) ,result_L0(4) ,BF_factor_L1(2));
[result_L1(5) ,result_L1(7)] = butterfly(result_L0(5) ,result_L0(7) ,BF_factor_L1(1));
[result_L1(6) ,result_L1(8)] = butterfly(result_L0(6) ,result_L0(8) ,BF_factor_L1(2));
[result_L1(9) ,result_L1(11)]= butterfly(result_L0(9) ,result_L0(11),BF_factor_L1(1));
[result_L1(10),result_L1(12)]= butterfly(result_L0(10),result_L0(12),BF_factor_L1(2));
[result_L1(13),result_L1(15)]= butterfly(result_L0(13),result_L0(15),BF_factor_L1(1));
[result_L1(14),result_L1(16)]= butterfly(result_L0(14),result_L0(16),BF_factor_L1(2));
[result_L1(17),result_L1(19)]= butterfly(result_L0(17),result_L0(19),BF_factor_L1(1));
[result_L1(18),result_L1(20)]= butterfly(result_L0(18),result_L0(20),BF_factor_L1(2));
[result_L1(21),result_L1(23)]= butterfly(result_L0(21),result_L0(23),BF_factor_L1(1));
[result_L1(22),result_L1(24)]= butterfly(result_L0(22),result_L0(24),BF_factor_L1(2));
[result_L1(25),result_L1(27)]= butterfly(result_L0(25),result_L0(27),BF_factor_L1(1));
[result_L1(26),result_L1(28)]= butterfly(result_L0(26),result_L0(28),BF_factor_L1(2));
[result_L1(29),result_L1(31)]= butterfly(result_L0(29),result_L0(31),BF_factor_L1(1));
[result_L1(30),result_L1(32)]= butterfly(result_L0(30),result_L0(32),BF_factor_L1(2));

matlab 第2級蝶形運算

% Level_2
[result_L2(1) ,result_L2(5)] = butterfly(result_L1(1) ,result_L1(5) ,BF_factor_L2(1));
[result_L2(2) ,result_L2(6)] = butterfly(result_L1(2) ,result_L1(6) ,BF_factor_L2(2));
[result_L2(3) ,result_L2(7)] = butterfly(result_L1(3) ,result_L1(7) ,BF_factor_L2(3));
[result_L2(4) ,result_L2(8)] = butterfly(result_L1(4) ,result_L1(8) ,BF_factor_L2(4));
[result_L2(9) ,result_L2(13)]= butterfly(result_L1(9) ,result_L1(13),BF_factor_L2(1));
[result_L2(10),result_L2(14)]= butterfly(result_L1(10),result_L1(14),BF_factor_L2(2));
[result_L2(11),result_L2(15)]= butterfly(result_L1(11),result_L1(15),BF_factor_L2(3));
[result_L2(12),result_L2(16)]= butterfly(result_L1(12),result_L1(16),BF_factor_L2(4));
[result_L2(17),result_L2(21)]= butterfly(result_L1(17),result_L1(21),BF_factor_L2(1));
[result_L2(18),result_L2(22)]= butterfly(result_L1(18),result_L1(22),BF_factor_L2(2));
[result_L2(19),result_L2(23)]= butterfly(result_L1(19),result_L1(23),BF_factor_L2(3));
[result_L2(20),result_L2(24)]= butterfly(result_L1(20),result_L1(24),BF_factor_L2(4));
[result_L2(25),result_L2(29)]= butterfly(result_L1(25),result_L1(29),BF_factor_L2(1));
[result_L2(26),result_L2(30)]= butterfly(result_L1(26),result_L1(30),BF_factor_L2(2));
[result_L2(27),result_L2(31)]= butterfly(result_L1(27),result_L1(31),BF_factor_L2(3));
[result_L2(28),result_L2(32)]= butterfly(result_L1(28),result_L1(32),BF_factor_L2(4));

matlab 第3級蝶形運算

% Level_3
[result_L3(1) ,result_L3(9)] = butterfly(result_L2(1) ,result_L2(9) ,BF_factor_L3(1));
[result_L3(2) ,result_L3(10)]= butterfly(result_L2(2) ,result_L2(10),BF_factor_L3(2));
[result_L3(3) ,result_L3(11)]= butterfly(result_L2(3) ,result_L2(11),BF_factor_L3(3));
[result_L3(4) ,result_L3(12)]= butterfly(result_L2(4) ,result_L2(12),BF_factor_L3(4));
[result_L3(5) ,result_L3(13)]= butterfly(result_L2(5) ,result_L2(13),BF_factor_L3(5));
[result_L3(6) ,result_L3(14)]= butterfly(result_L2(6) ,result_L2(14),BF_factor_L3(6));
[result_L3(7) ,result_L3(15)]= butterfly(result_L2(7) ,result_L2(15),BF_factor_L3(7));
[result_L3(8) ,result_L3(16)]= butterfly(result_L2(8) ,result_L2(16),BF_factor_L3(8));
[result_L3(17),result_L3(25)]= butterfly(result_L2(17),result_L2(25),BF_factor_L3(1));
[result_L3(18),result_L3(26)]= butterfly(result_L2(18),result_L2(26),BF_factor_L3(2));
[result_L3(19),result_L3(27)]= butterfly(result_L2(19),result_L2(27),BF_factor_L3(3));
[result_L3(20),result_L3(28)]= butterfly(result_L2(20),result_L2(28),BF_factor_L3(4));
[result_L3(21),result_L3(29)]= butterfly(result_L2(21),result_L2(29),BF_factor_L3(5));
[result_L3(22),result_L3(30)]= butterfly(result_L2(22),result_L2(30),BF_factor_L3(6));
[result_L3(23),result_L3(31)]= butterfly(result_L2(23),result_L2(31),BF_factor_L3(7));
[result_L3(24),result_L3(32)]= butterfly(result_L2(24),result_L2(32),BF_factor_L3(8));

matlab 第4級蝶形運算

% Level_4

[result_L4(1) ,result_L4(17)]= butterfly(result_L3(1) ,result_L3(17),BF_factor_L4(1));
[result_L4(2) ,result_L4(18)]= butterfly(result_L3(2) ,result_L3(18),BF_factor_L4(2));
[result_L4(3) ,result_L4(19)]= butterfly(result_L3(3) ,result_L3(19),BF_factor_L4(3));
[result_L4(4) ,result_L4(20)]= butterfly(result_L3(4) ,result_L3(20),BF_factor_L4(4));
[result_L4(5) ,result_L4(21)]= butterfly(result_L3(5) ,result_L3(21),BF_factor_L4(5));
[result_L4(6) ,result_L4(22)]= butterfly(result_L3(6) ,result_L3(22),BF_factor_L4(6));
[result_L4(7) ,result_L4(23)]= butterfly(result_L3(7) ,result_L3(23),BF_factor_L4(7));
[result_L4(8) ,result_L4(24)]= butterfly(result_L3(8) ,result_L3(24),BF_factor_L4(8));
[result_L4(9) ,result_L4(25)]= butterfly(result_L3(9) ,result_L3(25),BF_factor_L4(9));
[result_L4(10),result_L4(26)]= butterfly(result_L3(10),result_L3(26),BF_factor_L4(10));
[result_L4(11),result_L4(27)]= butterfly(result_L3(11),result_L3(27),BF_factor_L4(11));
[result_L4(12),result_L4(28)]= butterfly(result_L3(12),result_L3(28),BF_factor_L4(12));
[result_L4(13),result_L4(29)]= butterfly(result_L3(13),result_L3(29),BF_factor_L4(13));
[result_L4(14),result_L4(30)]= butterfly(result_L3(14),result_L3(30),BF_factor_L4(14));
[result_L4(15),result_L4(31)]= butterfly(result_L3(15),result_L3(31),BF_factor_L4(15));
[result_L4(16),result_L4(32)]= butterfly(result_L3(16),result_L3(32),BF_factor_L4(16));

與matlab 庫函數(shù)FFT運算比較

并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理
通過對比可知,編寫的FFT輸出結(jié)果與調(diào)用庫函數(shù)FFT結(jié)果基本一致。

FPGA FFT算法實現(xiàn)

FPGA中32點并行FFT算法的實現(xiàn)流程與matlab中是完全一致的。工程結(jié)構(gòu)如下:
并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理

3、matlab與FPGA實現(xiàn)的結(jié)果對比

matlab輸出結(jié)果

并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理

FPGA輸出結(jié)果

FPGA輸出結(jié)果實部

并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理

FPGA輸出結(jié)果虛部

并行fft設(shè)計,FPGA數(shù)字信號處理,fpga開發(fā),信號處理

4、IFFT實現(xiàn)

IFFT實現(xiàn)與FFT實現(xiàn)基本一致,可以通過FFT算法得到IFFT的結(jié)果。
1、將IFFT的輸入序列取共軛;
2、進行FFT運算;
3、將FFT運算結(jié)果取共軛,得到的結(jié)果就是原序列IFFT的結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-856462.html

到了這里,關(guān)于《FPGA數(shù)字信號處理》基于FPGA的32點并行FFT/IFFT設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包