幾個例子,輕鬆搞懂傅立葉變換的應用

2021-02-24 單片機與嵌入式

↑ 點擊上方「玩轉單片機」關注我們

下面兩道題關於使用複利葉變換的, 這應該是很常見的嵌入式問題:

A) 系統用 adc (小於 16-bit) 採樣 50Hz 交流電流電壓, 採樣頻率800hz, 試求出電流電壓幅值以及功率和功率因數。

B) 上面的50hz 電壓中, 混入了另一個 55hz 的電壓, 求出這兩個電壓的幅值。

這兩道題使用 16-bit, 32-bit 的整數運算, 不使用浮點運算, 可以在 mcu 上實現。

下面一道題, 因為我聽說宇宙飛船有一個變速不變調的專利(我現在懷疑此傳說的真實性), 所以切磋一下:

C) 完成一個 wav 聲音文件的變速不變調的程序。

複利葉變換在 mcu 上可能不常用, 所以不知道有多少感興趣的同學。

(1) 複數的基礎知識

在講解 fourier transform 前, 大家必須知道一點基本的複數知識。

在複平面上的一個點 P (x, y) 用複數表示為:

P = x + i y

用極坐標表示為:

P = r * e^(i a)

這裡, r = sqrt(x*x + y*) 是點 (x, y) 到原點的距離, a = arctan2(x, y) 是角度, e 是自然常數。這裡引出了一個非常重要的表達式:

e^(i a) = cos(a) + i sin(a)

這個表達式,是利用複數完成角度變換和三角函數變換的利器。例如,把點 P 旋轉 b 角度,那麼新點(x1, y1) 的角度為 a+b, 距離仍為 r.

P1 = x1 + i y1

= r * e^(i (a+b))

= r*e^(i a) * e^(i b)

= (x + i y) * (cos(b) + i sin(b))

= (x * cos(b) - y * sin(b)) + i ( y * cos(b) + x * sin(b))

(2) 傅立葉變換的基礎知識

傅立葉變換是一個積分變換, 公式就不提供了, 有興趣的同學可以直接訪問下面的連接, 以獲得更詳盡的解釋:

http://zh.wikipedia.org/zh-cn/%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2

(3) 離散傅立葉變換(DFT)

http://zh.wikipedia.org/zh-cn/%E7%A6%BB%E6%95%A3%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2

離散傅立葉變換的公式:

X(k) = ∑ x(n) * e^(i -2*PI* n/N * k) / N

這裡 X(k) 是第 k 次諧波的複數;N 為周期採樣點數;x(n)為輸入,n從0 到N-1;

用偽代碼更直觀地說明:

void CalculateHarmonic(Complex* X, int harmonic)

{

for (int i=0; i

X->Real = x(i) * cos( 2*PI* i/N * harmonic) / N;

X->Image = x(i) * sin(-2*PI* i/N * harmonic) / N;

}

}

可以看到,離散傅立葉變換基本運算其實很簡單, 沒有那麼複雜。只要有了 N 個輸入,比如說通過AD 採樣了 N 個數據後,可以輕易的計算出各個諧波,雖然計算量大了些。下面要做的就是減少計算量,這可以用兩種方法, 一種當然就是熟知的 FFT, 還有一種就是遞推。

(3) 遞推離散傅立葉 (Recursive DFT)

傅立葉變換是一個積分變換,積分當然可以使用迭代遞推來減少運算,尤其是周期性的函數。只要把最後一個數據仍出去,保持其他 N-1 個數據不變,加入一個新的數據就可以了。為了理解這一點,先考慮一下移動平均濾波算法:

Y(k-1) = (x(k-1) + x(k-2) + … + x(k-N)) /N

上面的這個公式可以寫成迭代也就是遞推的形式:

Y(k) = Y(k-1) + (x(k) – x(k-N)) /N

同理,由於sin, cosin函數的周期性,dft 可以由多項式乘法和的形式變換成迭代遞推的形式:

Y(k) = Y(k-1) + x(k) * e^(i -2*PI* k /N * harmonic) / N

- x(k - N) * e^(i -2*PI* (k–N) /N * harmonic) / N

= Y(k-1) + (x(k) - x(k- N)) * e^(i -2*PI* k /N * harmonic) / N

C 代碼:

x(i) = GetFromADC();

X->Real += (x(i) – x(i-N)) * cos( 2*PI* i/N * harmonic) /N;

X->Image += (x(i) – x(i-N)) * sin(-2*PI* i/N * harmonic) /N;

由於 cos, sin 是周期函數,所以 cos(2*PI* (i * harmonic) / N) 與cos(2*PI* (i * harmonic % N) / N) 是一樣的,(i * harmonic % N) 的取值範圍:0 to N-1.

總結一下:

傅立葉變換可以很深奧,也可以很淺顯。對於離散的傅立葉變換的公式, 只要認真的看看很容易看明白,更何況還有代碼說明。通過理解 dft 如何計算出某一個諧波,就可以進一步計算出所有諧波,再想像一下, 某一個算法,可以快速的計算出所有的諧波,這樣,就可以很容易的理解 fft.

按以下識別二維碼關注!


電子路上,一起走!

相關焦點

  • 什麼是傅立葉變換?
    傅立葉變換學了有些年頭,可是一直沒有求甚解。如果有人問我,我只能寫出個數學變換的式子,高深莫測一番,生怕追問下去。這樣做,本質上就好像有人問「什麼是光」,答曰「從燈泡裡出來的東西」一樣,看似回答了,卻不得要領。因此,我寫下這篇短文,試圖通過圖像來理解傅立葉變換。首先要問,為什麼需要傅立葉變換?要回答這個問題,我們不妨用時間t 與頻率f 之間的變換做例子。
  • Matlab傅立葉變換、餘弦變換和小波變換
    函數 ifft、ifft2 和 ifftn的調用格式於對應的離散傅立葉變換函數一致。別可以實現一維、二維和 N 維 DFT例子:圖像的二維傅立葉頻譜1.離散傅立葉變換的 Matlab實現% 讀入原始圖像I=imread('lena.bmp');imshow(I)% 求離散傅立葉頻譜J=fftshift(fft2(I));figure;別可以實現一維、二維和 N 維 DFTimshow(log(abs(J)),[8,10])2.
  • 幾行Matlab代碼教你上手傅立葉變換
    f0 = ones(1,n);g0 = fft(f0);figure, stem(f0), title('原函數');figure, stem(abs(g0)), title('傅立葉變換的幅度');% 實驗1close all; clear; n = 64;
  • 傅立葉變換、頻域的簡明理解
    你看得到紅綠色,看不到紅外線,是因為光的振動頻率不同,你能聽見並區分同時幾個人說話的聲音,也是因為聲波的振動頻率不同。而傅立葉變換為我們打開了一扇門,一扇與真理相通的大門,透過傅立葉變換,就能理解這宇宙萬物背後的運行規律。
  • 全球與中國傅立葉變換紅外光譜儀市場調研與發展趨勢預測報告(2020...
    第一章 傅立葉變換紅外光譜儀市場概述  第一節 傅立葉變換紅外光譜儀產品定義及統計範圍  第二節 按照不同產品類型,傅立葉變換紅外光譜儀主要可以分為如下幾個類別    一、不同產品類型傅立葉變換紅外光譜儀增長趨勢2020年VS    二、產品類型(一)    三、產品類型(二)  ……  第三節 從不同應用,傅立葉變換紅外光譜儀主要包括如下幾個方面
  • 看得懂的傅立葉變換
    打開APP 看得懂的傅立葉變換 李倩 發表於 2018-03-12 09:41:20 說起傅立葉變換,大部分科班出身的都上過課,
  • 漫談傅立葉變換——複數到底是個什麼東西?
    兩者的區別:FT[f(t)]=從負無窮到正無窮對[f(t)exp(-jwt)]積分LT[f(t)]=從零到正無窮對[f(t)exp(-st)]積分 (由於實際應用,通常只做單邊Laplace變換,即積分從零開始) 具體地,在Fourier積分變換中,所乘因子為exp(-jwt),此處,-jwt顯然是為一純虛數;而在laplace變換中,所乘因子為exp(-
  • 一種新的推導快速傅立葉變換(FFT)的方法
    一種新的推導快速傅立葉變換(FFT)的方法摘要: 本文提出了一種基於對稱分組思想的快速傅立葉變換的推導方法
  • 傅立葉變換、拉普拉斯變換、Z變換最全攻略
    傅立葉變換、拉普拉斯變換、Z變換的聯繫?他們的本質和區別是什麼?為什麼要進行這些變換。研究的都是什麼?從幾方面討論下。  傅立葉變換,拉普拉斯變換,Z變換的意義  【傅立葉變換】在物理學、數論、組合數學、信號處理、概率論、統計學、密碼學、聲學、光學、海洋學、結構動力學等領域都有著廣泛的應用(例如在信號處理中,傅立葉變換的典型用途是將信號分解成幅值分量和頻率分量)。
  • 國產傅立葉變換近紅外光譜儀如何做大做強
    田燕龍博士:上世紀80年代,傅立葉變換紅外光譜儀的應用在國內剛剛起步,但國內卻沒有相關儀器的製造技術。  隨後北分瑞利公司在持續發展和提升傅立葉變換紅外光譜儀技術的同時,開始拓展紅外光譜儀器的應用範圍,於1995年開始研發國內首臺傅立葉變換近紅外光譜儀——WQF-400N型傅立葉變換近紅外光譜儀(見圖1),並於1999年通過專家鑑定,再次填補國內空白。
  • 傅立葉變換公式的推導
    數學佬曾經在《一臺鋼琴的科普》中描述過傅立葉變換,其本質蠻容易理解,就是將一個周期函數用若干個三角函數來模擬。
  • 傅立葉變換還能畫簡筆畫?谷歌工程師開發的這個試玩網站火了| 附資源
    曉查 發自 凹非寺 量子位 報導 | 公眾號 QbitAI無論是處理聲音和圖像信號,都必須用到傅立葉變換。其實除了這些「正經」用途,它還能做一些有意思的事情。最近,一位名叫Jez Swanson的谷歌工程師自己寫了篇博客,教你用傅立葉變換畫出任何簡筆畫。目前已在Twitter已經收穫了3000+點讚。
  • 「趣味數學」傅立葉變換及其在人工智慧中的應用
    傅立葉變換不僅廣泛應用於信號(無線電、聲學等)處理,而且廣泛應用於圖像分析等領域。邊緣檢測、圖像濾波、圖像重建和圖像壓縮。一個例子:透射電鏡圖像的傅立葉變換有助於檢查樣本的周期性。數據的傅立葉變換可以擴展分析樣本的可訪問信息。
  • 完全搞懂傅立葉變換和小波(5)——傅立葉級數展開之函數項級數的概念
    1.4 傅立葉級數展開本文引用地址:http://www.eepw.com.cn/article/201703/345383.htm  之前我們在介紹泰勒展開式的時候提到過傅立葉級數。
  • Varian 640-IR傅立葉變換紅外光譜儀
    Varian 640-IR是一款基於研究級別平臺開發的高性能光譜儀,在設計的同時同時考慮其使用的簡單性,使該款儀器可以良好地服務於QA/QC應用和識別鑑定分析及教學要求    Varian 640-IR傅立葉變換紅外光譜儀由Resolutions Pro? 軟體控制。無論是技術人員、科學工作者還是光譜專家,瓦裡安的Resolutions Pro軟體都能很好滿足您的使用要求。Varian 640-IR傅立葉變換紅外光譜儀還可以通過配備多樣的附件來擴展分析能力。
  • 傅立葉變換、拉普拉斯變換、Z 變換的聯繫是什麼?為什麼要進行這些變換?
    下面的圖會告訴你答案顯然的,當我們引入動態的概念後,正弦函數隨之而動,從一個定值變成了一個波,在信號處理中,我們稱之為正弦波,高中的課本會告訴你正弦函數的性質和和差化積積化和差之類的公式,而我會告訴你正弦函數和其所對應的正弦波估計是信號處理中最重要最常用沒有之一的重要工具到這裡既然我們說到波了,那麼就不得不提幾個問題和其對應的概念,現在你再看看上圖
  • 舉幾個例子弄清復立葉變換的應用
    傅立葉變換是一個積分變換, 公式就不提供了, 有興趣的同學可以直接訪問下面的連接, 以獲得更詳盡的解釋:http://zh.wikipedia.org/zh-cn/%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2(3) 離散傅立葉變換(DFT)http://zh.wikipedia.org/zh-cn/%E7%A6%BB
  • MATLAB中的二維傅立葉變換
    1.首先,傅立葉變換有什麼用呢?我們用兩個生動的例子闡釋傅立葉變換的作用:【例子一】:現在一家餐廳研究了一個特殊的美食,作為美食家的你,想知道這個菜裡面到底都有什麼配料。2.傅立葉變換的應用傅立葉變換在圖像處理中有非常非常的作用。
  • 如何理解傅立葉級數、傅立葉變換公式?
    > 此前在另外一篇文章嘗試給對傅立葉級數、傅
  • 基於快速傅立葉變換的在線電網諧波分析儀
    0 引言由於大量非線性負載(如開關電源、電弧焊機、電力變頻器等)的應用,導致電網高次諧波含量增加,也就是諧波汙染。如果不對諧波汙染進行嚴格的限制會造成很大的危害。