新四季網

傅立葉變換最通俗的理解秒懂(有人能講明白傅立葉變換了)

2023-09-18 00:50:33 5

一、傅立葉變換:著名學科勸退師

傅立葉變換,一度被推上了玄學的位置。

這位說,了解了它,能改變你,認識世界的方式。那個說,我喜歡信號系統,但是看了2周的傅立葉變換,放棄了。

也有很多人,寫了科普教程,有零基礎教程、保證看懂教程、掐死教程。但是,當他們亮出數學公式的那一刻,很多人陷入沉思:我……是從哪裡開始,就已經看不懂了……

這些現象,激發了我強烈的表演欲望,我要登上舞臺,為大家表演。我的表演,如果你看不懂,請掐死我。

二、寫博客:傅立葉變換進行時

我正寫博客,此時正是深夜,我屋內的電腦,發出「嗡嗡」的散熱聲。同時,窗外的馬路,飛馳而過一輛渣土車,發出「嘀~」一聲刺耳的鳴笛。

我,是如何,聽到,聲音的。

物體振動發出的聲音,在空氣中傳播,進入我的耳朵,推動我的耳膜,聲音大就推得強,聲音小就推的弱,經過一系列處理,我就聽到了電腦和汽車。

仔細想一下,有點奇怪,我居然根據耳膜被推動的情況,分析出了聲音裡,包含電腦散熱風扇和汽車喇叭兩種物體。其實除此之外,我還聽到了樓上放電視、窗外的蟲子叫、電動車報警器響了……

這個聲音發出和接收的場景,就如同你用手指在桌子上有規律、有輕重地敲擊。我相信,你能聽出這番敲擊是打快板,那番敲擊是非洲鼓。但是,你很難通過敲桌子的節奏,聽出來:你的同事在敲鍵盤,同時路上響起了救護車的聲音。

先給你3分鐘的時間思考一下,我去上個廁所先。

人類幾萬年的歷史,不知道是否有人想過這個問題,拿根棍子捅你的耳膜,你就能分辨出十幾樣不同的發聲物體,這到底該怎麼來解釋呢?

其實,這——就是傅立葉變換(我能讓你猜著,這突然地轉場?)。

如下圖所示:推動你耳膜的力度就是左側的波形,你的大腦經過傅立葉變換,分析出了十幾種不同的發聲物體。

好了,現在拿出傅立葉變換的定義:

傅立葉變換,表示能將滿足一定條件的某個函數表示成三角函數(正弦和/或餘弦函數)或者它們的積分的線性組合。

定義看不懂沒關係,只要能看懂前面說的,分辨聲音的那個例就行。

關於什麼是傅立葉,此處打個標記叫[A]。如果你看不懂,就說從[A]開始就糊塗了,來掐我時,好讓我死得明白。

但是,有一點談資我們要知道,這個理論是法國人傅立葉在1807年提出來的。那時,嘉慶皇帝剛抄了和珅的家沒過幾年。

三、描述一個波:都有獨特的氣質

你糊弄我?你拿人這種有靈性的生物,來舉數學的例子,數學公式能解決道德問題嗎?

再說,聲音混在一起,就如同染料混在一個缸裡,你還能分出來?我就不信了!

我感覺有人跟我對話,充滿了質疑和不屑。

那好,我換一個例子,收音機大家都知道吧。

全國幾百家廣播臺,各家都往外發送無線電波。

我們並非生活在多個平行宇宙。因此,這些電波沒有VIP通道,肯定都是混在一起在空中傳播的。就像下面這樣:

那……收音機,可以收聽指定電臺的節目。

這個是機器,它的收音設備,沒有你的耳朵那麼複雜,也沒有神經元,這一點兒靈性也沒有,但它是可以分解指定波段的。

好了,繼續看我表演,說一下聲音的兩個屬性:頻率、振幅。

3.1 聲音的頻率

聲音是由振動產生的,振動一般都是……就……就像這樣:

一個點圍繞著某個相對固定的中心,周期性地移動。

比如,一個彈簧吊著一個小球,上下振動。

如果,一邊記錄時間,一邊記錄位置,其實它的形狀就是弦曲線(我保證這個詞,已是本文最專業的術語),也可以叫波。

有些物體振動得快,1秒鐘反覆來回1000次。有些物體振動的慢,1秒鐘才往返1個周期。

這個單位時間內振動一個周期的次數,我們就叫頻率

因為材質不同,不同的物體振動的頻率是不一樣,波形也不一樣。

下面是物理課上,敲擊音叉振動的聲波。

下面是用嘴吹試管的聲波。

只要我們聽到的聲音不一樣,基本上它們聲波的頻率也是不一樣的。

就算都是口琴,低音區是這樣的:

高音區是這樣的:

我們發現,高音區比較密集,相同單位內振動的次數更多,也就是頻率大。反之,低音區頻率小,比較稀疏。

你聽到的每種不同類型聲音,都有自己固定的頻率,就像每個地方菜的口味一樣,是有差別的。此處打個標記叫[B],如果你看不懂,就說從[B]開始,就亂了,來告訴我。

3.2 聲音的振幅

聲音的振幅就是聲音的大小。大小和頻率沒有任何關係。

頻率是某個時間內,推了耳膜多少次。振幅是這次推動,花了多少力氣。

還是拿音叉舉例子,聲音的振幅只影響音量,波形、頻率都不變。你敲出原子彈爆炸的音量,它也是那個形狀。

聲音大時,音叉的波形:

聲音小時,音叉的波形:

這很好理解,不管我小聲說話,還是大聲說話,你都能聽出是我。但是,我大聲說話,你會震得耳朵疼(耳膜遭受一記重拳)。

再來點兒談資吧。我們人類能聽到的頻率範圍是20Hz(1秒鐘振動20個周期)到20000Hz。超過20000Hz為超聲波,低於20Hz為次聲波。我們常說,蝙蝠發出的超聲波,不是因為它聲音太小或太大,導致我們聽不見。其實是因為它振動得太快,蝙蝠已經說了5000字了,但是我們只收到一個「的」。這是沒有意義的。同樣,我們人類能發出的聲音頻率也是有範圍的,範圍在250Hz-4000Hz之間,這是由我們人類聲帶的肉質(額……不知道為啥突然出來這個詞)決定的。

振幅和頻率的區別,此處打個標記叫[C]。

如果你了解了,頻率和振幅這兩個波的屬性,後面就好說了。

四、說傅立葉變換吧:我不抗拒了!

傅立葉發現,這個世界上的人,對事物的理解不透徹,描述的也不科學。

世人都以時間為軸線,來描述事物。比如,描述一段1分鐘的錄音:第1秒說了什麼,第2秒說了什麼……。

世人搖搖頭,嘆了口氣:傅立葉,你想咋著?

4.1 時域

傅立葉說,以時間作為參考的描述,叫時域分析。

比如下面這圖,這是個時域圖。我們看到這1秒內,它很忙,來來回回,從0到1秒跑著,從-1跑到1,反覆了5次。所以,這段波的頻率是5,最大振幅是1。整圖描述的是,每一個時刻的信號值:

如果這段波,不是1秒,而是1個小時,那麼它就是3600個這樣的圖拼在一起。

時域的概念,打個標記叫[D]。不懂的話,就看看表,再看看路上的汽車,剛才在你左邊,1分鐘後到了你的右邊。2分鐘後,它還在原地等紅綠燈,每個時間都有對應的位置。這也是我們普通人認識世界的方式。

4.2 頻域

還是那段波,而如果用頻域來描述,那就是這樣的:

橫坐標表示頻率,縱坐標表示振幅。上面這個圖表示:這裡面有一段波,頻率為5,振幅為1。

傅立葉告訴世人,我這個頻域,可以抵得過時域的千年萬年。兩者說的是同一件事,只是分析的角度和描述手段不一樣。

呵呵哈……哈呵呵,傅立葉冷笑著離開了,他連笑,都帶著波形。

頻域,打個標記叫[E]。

4.3 波的合成和分解

世界上的波,不會是上面說的那麼單純,實際上是很複雜的。

波,根據固定的頻率振動,原本很單純。只是,大家都在同一個空間內振動,相互之間發生了抵消和促進,相互融合,進行疊加,導致它很複雜。

波的疊加,打個標記叫[F]。不明白的話,趕緊評論區輸入[F],讓我知道,我會加強細節描述。

既然能疊加,那麼能拆解嗎?

其實,是可以的。不只是聽覺,人類的味覺也做到了,你吃一口菜,可以嘗出來裡面有糖,有醋,有辣椒。它的理論基礎就是,味覺具有一定的標準,辣就是辣,混到哪裡都是辣。

波也一樣,大家都是振動,震動就是弦曲線,只是頻率不一樣。

我們可以通過轉啊轉,各種組合,你護攏我,我護攏你,總能拼起來。

規律的波,並非一定得是「U」形,下面這幾種情況,也都是規律的波形。

甚至,下面這個形狀,也是規律的波形。可以拆解為若干組波的疊加。

二維空間裡沒有規律,就去從三維空間裡面找。即便實在無法分解,我們也可以認為它的周期無限長,我有規律,只是本次循環還沒到頭呢?著啥急!

波的分解,不用明白具體是怎麼分的。知道能分就行,打個標記叫[G]。

4.4 時域拆解頻域

一段複雜的波,可以分解成,多段,規律的單純波的集合。

然後,對這些規律的波從頻域進行描述,就有了整段波的譜線圖。

下圖是一個綜述。f指的是頻率維度。這張圖,很清晰地說明了波形、時域和頻域的關係。很多教程,開局就拿出這張圖,可解萬難。但是,我說了這麼久,才敢亮出來。

此圖打個標記叫[H],還不明白來掐我。

4.5 頻域復原時域

根據頻域,也能復原成時域(此處用理想波,便於理解概念,還有相位等問題,不敢具體展開了)。

上面圖裡綠色的頻率和振幅,可以描述一個波。如果把譜線上描述的波,依次畫出來,然後做疊加。這樣就復原了時域的波形。這個過程就像是泡發木耳。

波的復原,打個標記叫[I],有疑問請評論(別的平臺複製本文可能不回復,但是掘金TF男孩一定給你回復,且回復的比你問的還要多)。

五、傅立葉變換有什麼用?

傅立葉變換,在生物領域,你已經享受到它的益處了,你能分辨出一段聲音裡不同的聲源,一口食物裡不同的味道。

除此之外,我們可以拿時域轉頻域,對頻域的特徵進行二次加工,然後再恢復成時域,以此來做文章。

比如那些演唱會上調節音效卡的人,如果你高音不足,可以給你升上去,低音太高,可以給你降下來。

舉個例子,比如變聲軟體。把一段音頻,分離出男聲和女聲,將男聲改為女聲的頻率,然後還原回去,實現男聲變女聲。

再比如,聲音壓縮。將一些低頻波形,合成一條。如下圖藍色線條,可以替代其下方的其他多條波形,而又不會影響人們的聽覺判斷,以此實現了數據的壓縮。

除了在音頻和信號的應用之外,在視覺上也有廣泛應用,比如輪廓提取、美顏磨皮等等。

甚至,我還有一個想法,研發一款不會顛簸的汽車:

應用部分,如需討論,打個標記叫[J]。

六、代碼實踐

如果,你已掌握了上面說的傅立葉變換。那麼,下面,我們就要實踐一下了。

實踐的目的在於應用,表示我們已經可以利用代碼,進行傅立葉變換了。這可以加深理解,並儲備知識。

以下代碼,採用python語言演示。

6.1 生成波形

傅立葉變換,是對波形做變換。因此,要變換我們首先得有一段波形。比如這一段音頻,這是單詞「stop」的聲音波形(3個小高峰,s-tɒ-p):

信息的讀取和繪製都很簡單:

from scipy.io import wavfileimport matplotlib.pyplot as plt# 讀取音頻數據Fs, audio_wave = wavfile.read("stop.wav") # 採樣率 fs, 音頻數據 audio_waveplt.plot(audio_wave) # 繪製音頻數據plt.show

這樣看的不直觀,我們選取開頭的160個點,plt.plot(audio_wave[0:160])來繪製這一小段,這樣看就是線條的波形了:

從總圖看,開頭那部分是一馬平川。但是,當我們放大這部分細節時,我們看到的卻是滿眼的崎嶇和坎坷。

我們看到上面的wavfile.read函數返回兩個值,一個叫採樣率,一個叫音頻數據。

聲音的讀取和波形繪製,此處打個標記叫[K]。

6.1.1 採樣率

採樣率就是採樣的頻率,描述多長時間記錄一次數據。

還記得打點計時器嗎?

那個在紙上打點的頻率,就叫採樣率

比如,1秒鐘打60個點,採樣率就是60。

60的採樣率,能記錄上信息嗎?

這得看對方信號有多快。

如果對方太慢,會導致一個地方頻繁打點,其實打一個點和打100個點沒有區別,這很浪費。

如果對方太快,可能會記錄不全,甚至它跑了好多周期了,我們一個點都採不上。蝙蝠的超聲波就是頻率太快了,我們的耳膜採樣不上。

下圖是採樣率為1000和100時,記錄的圖:

可見,信號不複雜時,採樣率高和超高,沒有什麼變化,都能記錄全了。區別只是,用1萬個點來描述,還是用100個點來描述。

下圖是採樣率為20時,繪製的同一段信號的圖:

採樣率一旦比信號低(小於信號最高頻的2倍)了,有些信息的細節就記錄不上了。

對於錄音機,我們說,它是否能把聲音的細節記錄上,主要看它的採樣率高不高。

關於採樣率,此處打個標記叫[L],你是否get全了呢?

為什麼要了解這些概念?因為我們要製造聲波數據,需要先了解它。

為什麼要造數據(這自問自答,我也是不要臉了)?因為我們造的數據,是我們已知的參數,便於我們和求出的結果做對照。

要造數據,還需要了解弦函數sin(θ)

就是橫軸上一個點,對應縱軸上一個值,把它們畫出來,就是一個波:

6.1.2 繪製波形

現在,我們來搞一系列的橫縱坐標點。

import numpy as np#採樣率,單位時間內採集多少次樣本(1秒內記錄1000次,採樣率1kHz)Fs = 1000 #採樣周期,頻率的倒數,相鄰兩點的時間間隔,1秒打10個點,採樣周期就是0.1秒T = 1/Fs #信號長度,信號有多少個點L = 1200 # 時間軸X軸的集合,這批信號每次採集的時間點t = np.arange(L)*T # 幅度值Y軸的集合,1200個點對應的Y軸的值S = np.sin(2*np.pi*t)

上面代碼,t是橫軸坐標,S是縱軸坐標。我們先來看1秒內發生的故事,因為我們設置的是1秒一個周期,其他時間段都是循環的。

我們的採樣率是1000,也就是1秒記錄1000個點。

1秒內,t的值是[0.000,0.001,0.001,……,1.0],把一個(完整周期)分成了1000份。對這1000個點求函數的值,也就是S = [0,…0.5,…1,…0,…-0.5,…-1,…,0]

如果用代碼畫出來的話。

import matplotlib.pyplot as pltplt.plot(t[:1000], S[:1000])plt.show

數據就是下圖所示:

上面的例子中,1秒進行了一個周期,頻率是1。

如果,我們要一個頻率為5的波形,那又該怎麼整呢?

很簡單,讓S = np.sin(2*np.pi*t*5),裡面乘以5,再畫出來,就是下圖這樣:

如果想要一個頻率為8的波形呢?乘以8就可以了!

關于波形數據的生成和繪製,此處打個標記叫[M]。如果大腦過載的話,要及時上報啊。

下面,我們準備了一組複合波數據,作為測試樣本。

這批樣本,其實就是一段頻率為5的波,疊加一段頻率為20的波。

其中有點插曲(故意設計的),這個頻率為20的波,他的振幅為0.5(頻率5的振幅是1),波形是這樣的。

兩段波相加,混合起來是這樣的:

S_5 = np.sin(2*np.pi*5*t)S_20 = 0.5*np.sin(2*np.pi*20*t)S_25 = S_5 S_20

好了,這個就是我們自己造的測試數據。

下面,我們來做傅立葉變換,看看能不能分析出來它的組成。

關于波的疊加,此處打個標記叫[N]。

6.2 傅立葉變換 FFT

今天,我們是用傅立葉變換,不是寫傅立葉變換。所以過程會很簡單,簡單到就3個字母fft

python庫scipy.fftpack中有fft,它就是專門處理傅立葉變換的。

from scipy.fftpack import fft# 完成傅立葉變換Y = fft(S_25)# 把結果畫出來p2 = np.abs(Y)p1 = np.abs(Y)[:int(L/2)]# Fs、L是之前生成波形時的採樣率和信號長度f = np.arange(int(L/2))*Fs/L plt.plot(f,2*p1/L) plt.show

採用傅立葉變換,對測試波形進行分析,得出了這個譜線。

從圖上我們看出,整段波裡,存在2個頻率的波形,一個頻率為5,振幅為1;另一個頻率為20,振幅是0.5(剛才就是按照這個規則造的假數據)。

這說明,分析的很對。

此時,我們可以玩耍的就多了。比如增大高頻的頻率,或者把低頻的刪除,然後再還原為波形,就做到了對聲音的增強、提取和調整。

關於譜線,能看懂就行,此處打個標記叫[O],看不懂來掐我。

等會……這裡面存在一個問題,那就是:這個分析結果,把時間維度給忽略了。

然而,時間是一個很重要的參考。

上面演示的是S20S5疊加的情況。如果要是S20追加S5呢?意思就是有先後順序,就像這樣:

S_20_5 = np.append(S_20, S_5)

這段波形,先是一段小聲(振幅小)的高頻(頻率大),然後是一段大聲(振幅大)的低頻(頻率小)。

我分析啊,應該先是女生小聲嘀咕,然後男生大聲呵斥。這個時間順序裡面,是包含著故事的。

波形分析裡沒有時間維度,就相當於食品說明裡,只有組成成分,沒有含量佔比。這,沒法判斷它的口味和營養。

於是,短時傅立葉變換就出現了。

6.3 短時傅立葉變換 STFT

本文的畢業考核,就是最終能看懂下面這張圖。

不著急,我慢慢說。

為了加上時間(序列)維度,才有了短時傅立葉。

其實,它的本質還是傅立葉,只是它從時域信號中,依次選取一段樣本,進行傅立葉分析。分析完了,再合併起來,這樣就有了時間維度了。

短時傅立葉變換的調用依然很簡單,比傅立葉變換多一個字母,它是stft。傳入的參數是要分析的波形數據,以及採樣頻率,返回值是:時間t、頻率f、振幅Z。

from scipy.signal import stft# 短時傅立葉變換f, t, Z = stft(S_20_5, fs=1000)# 把結果畫出來z = np.abs(Z)plt.figure(figsize=(10,10))plt.xlabel("author:[email protected] Time(s)")plt.ylabel("frequency")plt.ylim(ymin=0, ymax= 30)plt.title("from https://juejin.cn/user/615370768790158")c = plt.pcolormesh(t, f, z, cmap ='Greens', vmin = 0, vmax = 1)plt.colorbar(c)

由短時傅立葉變換得出數據生成的這個圖,叫三維頻譜圖。

相比於譜線圖,它加入了時間維度。

其中,橫坐標是時間維度,這個時間可以不和波形圖的時間對應。它和上面的fs採樣點參數有關。縱坐標,則表示波形的頻率。它雖然是一幅2維圖,但可以表示3維的數據。

他的第三維度就是色塊的色值,表示振幅。色值越亮,振幅越大

如何來分析這個圖:

從縱坐標入手:這段信號,包含2段頻率,一段頻率是20,另一段頻率是5。其中20頻率段振幅較小,5頻率段的振幅較大。從橫坐標入手:1.2s之前,只有高頻信號;1.2s之後,高頻消失,出現了低頻信號,低頻音量較大。從振幅入手:聲音較大(色值較重)的主要出現在後半段,且是低頻信號發出,推測是男生發火了。

關於三維頻譜圖的解讀,此處打個標記叫[P],看不懂就告訴我。

好了,試試畢業考試吧,看下面這幅頻譜圖。這是一段音樂,上面兩個波形是左右聲道,下面火紅的顏色是頻譜,右側坐標是音調(頻率),比如C調,G5調等。

這段音樂,哪段音域最活躍呢?這個歌手是女高音,還是男低音?

七、保命條款

朋友們,我講的很初級,真的,一點都不謙虛。沒講相位,沒講函數的每一個參數,能省就省。這只是為了科普,讓大家知道有這麼一個東西,不但要知道,最好能吸收進去一些知識。學到的知識才是自己的。

本文的目標讀者,就是那些連sincos都還給初中數學老師的朋友們。他們真的找不到通俗的資料去學習,但是他們又有強烈的求知慾,儘管很多醫生……不是,很多研究生,大呼他們已經盡力了。

我不會再往深裡講了,因為本身我也不太懂。但是,我相信本文也是能幫到一些人的,尤其本文上傳了將近50張圖,很多動態圖。

如果有錯誤,歡迎大家指正,我會做修改,同時這也是我學習的機會。

如果大家想和我交流,歡迎大家留言,我是掘金社區TF男孩,一位編程表演藝術家,為人民表演編程。如果大家在別的站點看到本文,那可能是轉載,請去掘金找我聊。如有轉載的朋友,請註明出處,讓讀者可以找到作者,請成全兩者。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了