色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文快速教會你傅立葉算法

硬件攻城獅 ? 來源:嵌入式客棧 ? 2023-02-08 10:01 ? 次閱讀

[導讀]今天來聊聊如何實現快速傅立葉變換FFT及其應用,希望大家喜歡。直接談FFT,可能沒這方面基礎的同學,不太能明白,先看看它的相近較容易理解的幾個概念吧。

啥是傅立葉級數?

在數學中,傅里葉級數(Fourier series)是把類似波的函數表示成簡單正弦波的方式。更正式地說法是,它能將任何周期性函數或周期信號分解成一個(可能由無窮個元素組成的)簡單振蕩函數的集合,即正弦函數和余弦函數(或者,等價地使用復指數),從數學的定義來看,是這樣地:

設x(t)是一周期信號,其周期為T。若x(t)在一個周期的能量是有限的,有即

則,可以將x(t)展開為傅立葉級數。怎么展開呢?計算如下:

公式中的k表示第k次諧波,這是個什么概念呢?不容易理解,看下對于一個方波的前4次諧波合成動圖就比較好理解了。這里的合成的概念是時域上的疊加的概念,圖片來源wikipedia

c64c59a0-a6f8-11ed-bfe3-dac502259ad0.gif

c67a06ca-a6f8-11ed-bfe3-dac502259ad0.png

啥是傅里葉變換?

在數學中,傅里葉變換(Fourier transform FT)是一種數學變換,它將一個函數(通常是一個時間的函數,或一個信號)分解成它的組成頻率,例如用組成音符的音量和頻率表示一個音樂和弦。傅里葉變換指的是頻域表示和將頻域表示與時間函數相關聯的數學運算。其本質是一種線性積分變換,用于信號在時域(或空域)和頻域之間的變換,在物理學和工程學中有許多應用。因其基本思想首先由法國學者約瑟夫·傅里葉系統地提出,所以以其名字來命名以示紀念。實際上傅里葉變換就像化學分析,確定物質的基本成分;信號來自自然界,也可對其進行分析,確定其基本頻率成分。其數學定義為:

對于連續時間信號x(t),若x(t)在時間維度上可積分,(實際上并不一定是時間t維度,這里可以是任意維度,只需在對應維度空間可積分即可),即:

那么,x(t)的傅立葉變換存在,且其計算式為:

c68d0f72-a6f8-11ed-bfe3-dac502259ad0.png

其反變換為:

c6a32ffa-a6f8-11ed-bfe3-dac502259ad0.png

上面這兩個公式是啥意思呢?在度量空間可積可以理解成其在度量空間能量有限,也即對其自變量積分(相當于求面積)是一個確定值,那么這樣的函數或者信號就可以進行傅立葉變換展開,展開得到的就變成是頻域的函數了,如果對頻率將函數值繪制出曲線就是我們所說的頻譜圖,而其反變換就比較好理解了,如果我們知道一個信號或者函數譜密度函數,就可以對應還原出其時域的函數,也能繪制出時域的波形圖。

c6b0d6f0-a6f8-11ed-bfe3-dac502259ad0.gif

當然,本文限定討論時域信號是因為我們電子系統中的應用最為普遍的就是一個時域信號,當然推而廣之,其他的多維度信號也能利用上面定義進行推廣,同樣在多維空間信號也非常有應用價值,比如2維圖像處理等等。

上面兩個概念是一個東東么?

傅立葉級數對應的是周期信號,而傅立葉變換則對應的是一個時間連續可積信號(不一定是周期信號)

傅立葉級數要求信號在一個周期內能量有限,而后者則要求在整個區間能量有限

傅立葉級數的對應是離散的,而傅立葉變換則對應是連續的。

故而,兩者的物理含義不同,且其量綱也是不同的,代表周期信號的第k次諧波幅度的大小,而則是頻譜密度的概念。所以答案是這兩者從本質上不是一個概念,傅立葉級數是周期信號的另一種時域的表達方式,也就是正交級數,它是不同的頻率的波形的時域疊加。而傅立葉變換則是完全的頻域分析,傅里葉級數適用于對周期性現象做數學上的分析,傅里葉變換可以看作傅里葉級數的極限形式,也可以看作是對周期現象進行數學上的分析,同時也適用于非周期性現象的分析。傅里葉級數適用于對周期性現象做數學上的分析,傅里葉變換可以看作傅里葉級數的極限形式,也可以看作是對周期現象進行數學上的分析,同時也適用于非周期性現象的分析。

啥是離散傅立葉變換?

離散傅里葉變換(Discrete Fourier Transform,縮寫為DFT),是傅里葉變換在時域和頻域上都呈離散的形式,將信號的時域采樣變換為其DTFT的頻域采樣。

在形式上,變換兩端(時域和頻域上)的序列是有限長的,而實際上這兩組序列都應當被認為是離散周期信號的主值序列。即使對有限長的離散信號作DFT,也應當將其看作其周期延拓的變換。在實際應用中通常采用快速傅里葉變換計算DFT。

對于N點序列

c7181d88-a6f8-11ed-bfe3-dac502259ad0.png

它的離散傅立葉變換為(DFT)為:

c72f8522-a6f8-11ed-bfe3-dac502259ad0.png

其中k=0,1,....,N-1,上面的式子展開一下:

c7403016-a6f8-11ed-bfe3-dac502259ad0.png

c752d4fa-a6f8-11ed-bfe3-dac502259ad0.jpg

啥是快速傅立葉變換?

快速傅立葉變換(Fast Fourier Transform:FFT)是一種計算數字信號序列的離散傅立葉變換(Discrete Fourier Transform:DFT)或其逆變換(IDFT)的算法。傅里葉分析將信號從其原始域(通常是時間或空間)轉換為頻域的表示,反之亦然。DFT是通過將一系列值分解成不同頻率的分量來獲得的。這個操作在很多領域中都很有用,但是直接從定義中計算它通常太慢而不實際。FFT通過將DFT矩陣分解成稀疏(大部分為零)因子的乘積來快速計算這種轉換。所以其本質是實現離散傅立葉變換的一種優化算法,將時間復雜度從降低為,其中N為待計算序列的長度。當N非常大時,這種優化在時間維度上提升是非常顯著的。尤其在嵌入式應用領域,由于受限于采用的芯片算力往往不強,所以FFT算法較之于DFT的效果是非常有應用價值的。

1994年,Gilbert Strang將FFT描述為“我們一生中最重要的數值算法”,并被IEEE雜志《計算科學與工程》列入20世紀十大算法之一,它深遠的影響了我們世界與日常生活。說這個算法改變了世界也不為過。在我們日常生活中很多設備里面都有它的影子,比如手機、比如photoshop,比如數字音響等等。

快速傅立葉算法的最核心思想就是計算機科學里面常見的分治思想,即把一個復雜的問題,分解為一個小的類似問題進行求解。

FFT基本上可分為兩類,時間抽取法和頻率抽取法,而一般的時間抽取法和頻率抽取法只能處理長度N=2M的情況,另外還有組合數基四FFT來處理一般長度的FFT。所謂抽取,就是把長序列分為短序列的過程,可在時域也可在頻域進行。最常用的時域抽選方法是按奇偶將長序列不斷地變為短序列,結果使輸入序列為倒序,輸出序列為順序排列,這就是Coolly—Tukey算法。

假定待變換離散時間序列信號長度為,將x(n)按照奇偶分組:

c77d1792-a6f8-11ed-bfe3-dac502259ad0.png

上式可變換為:

c7993df0-a6f8-11ed-bfe3-dac502259ad0.png

c7aafe14-a6f8-11ed-bfe3-dac502259ad0.png

c7bc1ea6-a6f8-11ed-bfe3-dac502259ad0.png

其中,k取0,1,...,N/2-1

從而,

由于A(k),B(k)都是點的DFT,X(k)為N點的DFT。那么這一分治思想還可以進一步做下去,這里就不贅述了。

下圖就是一個時間抽取的基2FFT算法的示意圖:

c7cbe638-a6f8-11ed-bfe3-dac502259ad0.png

對于頻率抽取基2的示意圖其原理類似,這里放個圖:

c7e4cdc4-a6f8-11ed-bfe3-dac502259ad0.png

不同點:

DIT2 FFT是在時域先進行奇歐倒序,頻域輸出為正序

DIF2 FFT其輸入序列在時域是正序,而頻域輸出為奇偶分開的倒序。

代碼實踐

好了,前面碼了這么多字,還是不夠直觀,為了更好說明前面的分治思想,這里放了個遞歸實現代碼測一下看看療效:

#include
#include
#include
#include

#defineq8/*2^q點,256*/
#defineN(1<1){/*N如小于1,直接返回*/
intk,m;complexz,w,*vo,*ve;
ve=tmp;vo=tmp+n/2;
for(k=0;k1){
intk,m;complexz,w,*vo,*ve;
ve=tmp;vo=tmp+n/2;
for(k=0;k

代碼來源:https://www.math.wustl.edu/~victor/mfmm/fourier/fft.c

為華盛頓大學的教學代碼,上面代碼僅測試了正變換,對于逆變換有興趣的可以試試。

c7f95cb2-a6f8-11ed-bfe3-dac502259ad0.png

總結一下

本文目的為了方便理解快速傅立葉的算法思想,如果需要將算法實際應用到單片機或者DSP中,還需要做進一步的優化,實際使用時,一般會將蝶形算子做成一個表,另外也會做定點優化。對于ARM芯片而言,其CMSIS庫有現成的實現例子可以直接使用,對于TI系列DSP而言,也內置了FFT代碼庫,可直接使用。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4628

    瀏覽量

    93186
  • FFT
    FFT
    +關注

    關注

    15

    文章

    437

    瀏覽量

    59483
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62867
  • 傅立葉
    +關注

    關注

    0

    文章

    36

    瀏覽量

    12555
  • 傅立葉變換
    +關注

    關注

    3

    文章

    105

    瀏覽量

    32447

原文標題:快速教會你傅立葉算法

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    快速傅立葉變換(FFT)算法實驗

    本帖最后由 mr.pengyongche 于 2013-4-30 02:23 編輯 快速傅立葉變換(FFT)算法實驗、摘
    發表于 12-21 10:54

    如何實現傅立葉變換算法

    計算量太大,直接用DFT算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(Fast FourierTransformation,簡稱FFT)使DFT運算效率提高1~2個數量級。其原因是當N較大時,對DFT進行了基4和基
    發表于 10-08 09:48

    淺懂示波器FFT快速傅立葉變換功能及運用

    氏變換,是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。這看,頭都大了。今天我們就帶大家簡單的了解下什么是傅里葉變換以及它
    發表于 01-14 17:00

    教你招如何去實現傅立葉變換算法

    教你招如何去實現傅立葉變換算法
    發表于 04-30 06:05

    示波器FFT快速傅立葉變換不會用?看完這篇帖子,我徹底悟了

    的直流成分,直流信號的頻率是0Hz。我們將通道的耦合方式改成交流,濾除直流信號,就會發現第條的直線消失了。FFT快速傅立葉變換的作用:FFT就是分析信號的頻譜,在物理學、電子類學科
    發表于 09-22 13:42

    基于FPGA的快速傅立葉變換

    摘要:在對FFT(快速傅立葉變換)算法進行研究的基礎上,描述了用FPGA實現FFT的方法,并對其中的整體結構、蝶形單元及性能等進行了分析。
    發表于 06-20 14:13 ?1119次閱讀

    1024點FFT快速傅立葉變換

    Xilinx FPGA工程例子源碼:1024點FFT快速傅立葉變換
    發表于 06-07 14:13 ?33次下載

    26步教會入門freemaster (1)

    Freemaster 是freescale 個很不錯的工具,本文章主要是為了讓大家快速掌握Freemaster 的用法,使我們監控變量,調試程序更方便!以下26 步教會使用free
    發表于 06-21 17:56 ?163次下載

    教會解決日常使用中電子地磅的小故障

    教會解決日常使用中電子地磅的小故障
    發表于 02-14 16:46 ?17次下載

    DSP進行浮點快速傅立葉變換剖析

    前言本文目的是演示如何使用STM32F30x 內部的DSP 進行浮點快速傅立葉變換(FFT),為聯系實際應用
    的頭像 發表于 09-18 06:44 ?9554次閱讀

    快速傅立葉變換的基本概念及加窗函數的介紹

    4.2 快速傅立葉變換及加窗函數
    的頭像 發表于 05-07 06:09 ?6554次閱讀
    <b class='flag-5'>快速</b><b class='flag-5'>傅立葉</b>變換的基本概念及加窗函數的介紹

    簡述FPGA的快速傅立葉變換

    摘要:在對FFT(快速傅立葉變換)算法進行研究的基礎上,描述了用FPGA實現FFT的方法,并對其中的整體結構、蝶形單元及性能等進行了分析。 傅立葉變換是數字信號處理中的基本操作,廣泛應
    的頭像 發表于 05-27 11:21 ?2272次閱讀
    簡述FPGA的<b class='flag-5'>快速</b><b class='flag-5'>傅立葉</b>變換

    基于FPGA的快速傅立葉變換算法研究

    傅立葉變換是數字信號處理中的基本操作,廣泛應用于表述及分析離散時域信號領域。但由于其運算量與變換點數N的平方成正比關系,因此,在N較大時,直接應用DFT算法進行譜變換是不切合實際的。
    發表于 02-22 09:38 ?310次閱讀

    讀懂FFT

    快速傅立葉變換(FFT)是離散傅立葉(DFT)的快速算法,它是根據離散傅立葉變換的奇、偶、虛、實等特性,對離散
    的頭像 發表于 05-05 09:51 ?1.3w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂FFT

    淺懂示波器FFT快速傅立葉變換功能及運用

    氏變換,是離散傅氏變換的快速算法,它是根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。這看,頭都大了。今天我們就帶大家簡單的了解下什么是傅里葉變換以及它
    的頭像 發表于 11-08 15:01 ?6961次閱讀
    淺懂示波器FFT<b class='flag-5'>快速</b><b class='flag-5'>傅立葉</b>變換功能及運用
    主站蜘蛛池模板: 久久香蕉国产线看观看首页| 伊人久久一本| 高清无码色大片中文| 舔1V1高H糙汉| 久久精品国产午夜伦班片| 97一期涩涩97片久久久久久久| 青娱乐视觉盛宴国产视频| 国产亚洲AV精品无码麻豆| 在线看免费毛片| 色戒床震视频片段| 久久se视频精品视频在线| 北条麻妃のレズナンパ| 亚洲嫩草影院久久精品| 末班车动漫无删减免费| 国产精品嫩草99AV在线| 24小时日本免费看| 午夜不卡av免费| 蜜柚视频网在线观看免费| 国产成人无码视频一区二区三区 | 另类欧美尿交| 国产成人免费不卡在线观看| 樱花草在线影视WWW日本动漫| 日本老人oldmantv乱| 精品久久免费视频| 丰满的女朋友 在线播放| 曰本真人00XX动太图| 涩里番app黄版网站| 久久综合色超碰人人| 国产精品无码AV天天爽色欲| 97SE亚洲国产综合自在线不卡| 亚洲、国产综合视频| 内射人妻骚骚骚| 精品久久久久中文字幕| 国产成人国产在线观看入口| 99热这里只有 精品| 开心片色99xxxx| 永久免费在线看mv| 久久足恋网| 最近中文字幕免费高清MV视频| 久久精品18| 有码在线播放|