那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基2FFT的算法推導(dǎo)及python仿真

CHANBAEK ? 來源:FPGA自學(xué)筆記分享 ? 作者:FPGA自學(xué)筆記分享 ? 2023-06-02 12:38 ? 次閱讀

FFT的算法推導(dǎo)主要用到旋轉(zhuǎn)因子的周期性、對(duì)稱性和可約性:

圖片

基2FFT的頻域抽取法,將x(n)按照n的自然順序劃分為前后兩個(gè)部分:

圖片

所以當(dāng)K為偶數(shù)時(shí),前后兩部分相加。當(dāng)k為奇數(shù)時(shí)相減。將頻域X(K)劃分為奇偶兩個(gè)序列,N點(diǎn)DFT就被分解為兩個(gè)N/2點(diǎn)的DFT:

圖片

圖片

可以得到蝶形圖如下:

圖片

進(jìn)而可以得到基2FFT頻域抽取代碼的實(shí)現(xiàn)方法:

圖片

隨后是數(shù)據(jù)倒換,如下圖:

圖片

可以看到基2FFT頻域抽取后的輸出位置排序就是自然數(shù)二進(jìn)制碼按位倒讀的值。

根據(jù)推導(dǎo)結(jié)果我們編寫python實(shí)現(xiàn)代碼:

首先根據(jù)FFT的點(diǎn)數(shù)計(jì)算需要迭代的次數(shù),根據(jù)迭代次數(shù)例化一個(gè)loop_num+1*N的數(shù)組一共來存儲(chǔ)輸入及中間迭代的結(jié)果,同時(shí)將輸入X送入第一行作為輸入:

import numpy as np
import matplotlib.pyplot as plt


#頻域抽取的基2FFT
loop_num= int(np.log2(N))
data=np.zeros((loop_num+1,N),dtype=np.complex)
data[0]=x

隨后開始FFT的迭代,循環(huán)變量i一共來表征迭代的次數(shù);循環(huán)變量p用來表征每次循環(huán)將將數(shù)據(jù)換分為幾塊;循環(huán)變量j用來進(jìn)行蝶形運(yùn)算。通過循環(huán)完成FFT的迭代及運(yùn)算,代碼如下:

for i in range(loop_num):
    k=i+1
    for p in range(2**i):
        for j in range(N//(2**k)):
            data[i+1][j           +p*(N//(2**i))] =  data[i,j+p*(N//(2**i))] + data[i,j+N//(2**k) +p*(N//(2**i))]
            data[i+1][j+N//(2**k) +p*(N//(2**i))] = (data[i,j+p*(N//(2**i))] - data[i,j+N//(2**k) +p*(N//(2**i))])*np.e**(-1j*2*j*np.pi*(2**i)/N)

最終將FFT蝶形運(yùn)算的結(jié)果進(jìn)行輸出倒序,定義rev2(k,N)遞歸函數(shù)達(dá)到按bit翻轉(zhuǎn)的目的,最終輸出FFT結(jié)果為fft_out:

def rev2(k,N):
    if (k==0):
        return (0)
    else:
        return(((rev2(k//2,N)//2)+(k%2)*(N//2)))


#輸出倒序
fft_out = np.ones_like(data[0,:])
for k  in range (N):
    fft_out[rev2(k,N)] = data[loop_num,k]

最后為了驗(yàn)證代碼正確性,直接調(diào)用python的FFT庫函數(shù)得到xf為庫函數(shù)的結(jié)果,與fft_out相減并畫圖,觀察誤差。

xf = np.fft.fft(x)
plt.plot(abs(xf))
plt.plot(abs(fft_out-xf))

輸入1024點(diǎn)的任意復(fù)數(shù):

x = [int(np.round(np.sin(i)*1024))+int(np.round(np.cos(i)*1024))*1j for i in n]

波形如下:

圖片

運(yùn)行python算法得到結(jié)果如下,圖中藍(lán)線是FFT計(jì)算的結(jié)果,橙線是FFT庫函數(shù)計(jì)算結(jié)果與fft_out相減的差,差值為0,認(rèn)為我們的迭代算法正確。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4630

    瀏覽量

    93348
  • FFT
    FFT
    +關(guān)注

    關(guān)注

    15

    文章

    437

    瀏覽量

    59559
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4124

    瀏覽量

    133983
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4825

    瀏覽量

    69039
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    85037
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 5.4.1 頻域抽取2FFT算法——教學(xué)視頻

    算法FFT快速傅里葉變換
    Mr_haohao
    發(fā)布于 :2022年09月02日 10:17:12

    FFT的基本原理及算法結(jié)構(gòu)

    FFT的基本原理及算法結(jié)構(gòu)FFT是利用了旋轉(zhuǎn)因子的周期性和對(duì)稱性,對(duì)DFT進(jìn)行簡(jiǎn)化的運(yùn)算。各種FFT算法可分兩大類:一類是針對(duì)N等于
    發(fā)表于 06-14 00:20

    【NUCLEO-F412ZG試用體驗(yàn)】ARM的FFT使用及誤差分析

    的數(shù)字信號(hào),就可以做FFT變換了。N個(gè)采樣點(diǎn)數(shù)據(jù),在經(jīng)過FFT之后,就可以得到N個(gè)點(diǎn)的FFT結(jié)果。對(duì)于快速FFT算法,有
    發(fā)表于 12-16 20:31

    FFT變換

      4.1 引言   4.2 2FFT算法   4.3 進(jìn)一步減少運(yùn)算量的措施   4.4 分裂FFT
    發(fā)表于 08-11 16:50 ?0次下載

    N為合數(shù)的FFT算法

    N為合數(shù)的FFT算法上面討論的以2(即N=2M)的時(shí)間抽選和頻率抽選FFT
    發(fā)表于 10-30 13:16 ?1615次閱讀
    N為合數(shù)的<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>

    FFT算法的應(yīng)用

    FFT算法的應(yīng)用 一. 數(shù)字濾波器設(shè)計(jì):(一)2按時(shí)間抽取FFT算法對(duì)于有限長(zhǎng)離
    發(fā)表于 10-30 13:20 ?1w次閱讀
    <b class='flag-5'>FFT</b><b class='flag-5'>算法</b>的應(yīng)用

    固定幾何結(jié)構(gòu)的FFT算法及其FPGA實(shí)現(xiàn)

    .引言DFT及其快速算法FFT是信號(hào)處理領(lǐng)域的核心組成部分。FFT算法多種多樣,按數(shù)據(jù)組合方式不同一般分時(shí)域和頻域,按數(shù)據(jù)抽取方式的不同又可分為
    發(fā)表于 06-20 14:18 ?1180次閱讀
    固定幾何結(jié)構(gòu)的<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>及其FPGA實(shí)現(xiàn)

    基于改進(jìn)FFT算法的OFDM調(diào)制解調(diào)模塊設(shè)計(jì)

    文章對(duì)傳統(tǒng)FFT算法進(jìn)行了改進(jìn),改進(jìn)后的算法將N點(diǎn)DFT分解成二維V萬點(diǎn)DFT的組合,在結(jié)構(gòu)上更適合于用流水線方式實(shí)現(xiàn)FFT。文章首先對(duì)算法
    發(fā)表于 09-26 15:38 ?40次下載
    基于改進(jìn)<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>的OFDM調(diào)制解調(diào)模塊設(shè)計(jì)

    基于FPGA高精度浮點(diǎn)運(yùn)算器的FFT設(shè)計(jì)與仿真

    提出一種2FFT的FPGA方法,完成了基于FPGA高精度浮點(diǎn)運(yùn)算器的FFT的設(shè)計(jì)。利用VHDL語言描述了蝶形運(yùn)算過程及地址產(chǎn)生單元,其仿真波形基本能正確的表示輸出結(jié)果。
    發(fā)表于 12-23 14:24 ?46次下載
    基于FPGA高精度浮點(diǎn)運(yùn)算器的<b class='flag-5'>FFT</b>設(shè)計(jì)與<b class='flag-5'>仿真</b>

    實(shí)數(shù)FFT算法的設(shè)計(jì)及其C語言實(shí)現(xiàn)

    首先分析實(shí)數(shù)FFT算法推導(dǎo)過程,然后給出一種具體實(shí)現(xiàn)FFT算法的C語言程序,可以直接應(yīng)用于需要FFT
    發(fā)表于 01-13 11:32 ?1.1w次閱讀
    實(shí)數(shù)<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>的設(shè)計(jì)及其C語言實(shí)現(xiàn)

    fft算法是什么_如何提高fft算法分辨率

    利和T.W.圖提出的。采用這種算法能使計(jì)算機(jī)計(jì)算離散傅里葉變換所需要的乘法次數(shù)大為減少,特別是被變換的抽樣點(diǎn)數(shù)N越多,FFT算法計(jì)算量的節(jié)省就越顯著。
    發(fā)表于 11-09 09:28 ?8613次閱讀
    <b class='flag-5'>fft</b><b class='flag-5'>算法</b>是什么_如何提高<b class='flag-5'>fft</b><b class='flag-5'>算法</b>分辨率

    24時(shí)分FFT算法淺析及其比較

    FFT 算法的實(shí)質(zhì)是把一長(zhǎng)序列的 DFT 計(jì)算分割為較短序列的 DFT 計(jì)算,對(duì)于2算法而言,是把序列每次一分為二,最后分割成兩點(diǎn) DFT
    發(fā)表于 11-23 10:58 ?3w次閱讀
    <b class='flag-5'>基</b><b class='flag-5'>2</b>與<b class='flag-5'>基</b>4時(shí)分<b class='flag-5'>FFT</b><b class='flag-5'>算法</b>淺析及其比較

    4fft蝶形圖運(yùn)算單元解析

    蝶形運(yùn)算,2點(diǎn)DFT運(yùn)算稱為蝶形運(yùn)算,而整個(gè)FFT就是由若干級(jí)迭代的蝶形運(yùn)算組成,而且這種算法采用塬位運(yùn)算,故只需N個(gè)存儲(chǔ)單元2. ∑∑(2
    發(fā)表于 11-23 11:48 ?6w次閱讀
    <b class='flag-5'>基</b>4<b class='flag-5'>fft</b>蝶形圖運(yùn)算單元解析

    python推導(dǎo)式是什么

    python推導(dǎo)推導(dǎo)式(英文名:comprehensions),也叫解析式,是Python的一種獨(dú)有特性。 推導(dǎo)式是可以從一個(gè)數(shù)據(jù)序列構(gòu)
    的頭像 發(fā)表于 02-28 17:13 ?2827次閱讀

    2FFT的verilog代碼實(shí)現(xiàn)及仿真

    上文2FFT算法推導(dǎo)python仿真推導(dǎo)
    的頭像 發(fā)表于 06-02 12:38 ?1834次閱讀
    <b class='flag-5'>基</b><b class='flag-5'>2FFT</b>的verilog代碼實(shí)現(xiàn)及<b class='flag-5'>仿真</b>
    大发8888娱乐城| 百家乐庄闲符号记| 百家乐官网网址多少| 水果机游戏机遥控器| 百家乐官网规则以及玩法| 宝都棋牌游戏| 申博百家乐下载| 沙龙百家乐官网娱乐| 网上百家乐官网心得| 大发888娱乐老虎机| 澳门百家乐大小| 百家乐官网怎么才能包赢| 金牌娱乐城官网| 大发888娱乐场 注册| 广州百家乐娱乐场| 成人百家乐官网的玩法技巧和规则 | 威尼斯人娱乐棋牌平台| 娱乐城百家乐打不开| 百家乐官网赌术大揭秘| 百家乐贴士介绍| 网上赌百家乐可信吗| 百家乐官网只打闲打法| 湄潭县| 顶级赌场是骗人的吗| 百家乐讲坛汉献| 百家乐现场网络| 网上百家乐官网大赢家| 南康市| bet365娱乐在线| 广发百家乐的玩法技巧和规则| 百家乐真人荷官| 蓝盾百家乐官网娱乐场开户注册| 百家乐官网游戏如何玩| 拉斯维加斯娱乐| 大发888线上| 永利博百家乐的玩法技巧和规则 | 真钱百家乐官网开户试玩 | 百家乐博娱乐网提款速度快不| 百家乐模拟分析程序| 百家乐官网桌子租| 百家乐官网庄闲和的倍数|