學習理論什么用?

      網友投稿 769 2022-05-30

      簡 介:

      現在很多功能強大的軟件使得我們分析數據的效率大大提高。雖然我們依靠軟件來處理數據,但對計算結果的應用卻不能完全依賴軟件,還需要對其背后的原理有著清晰的理解,這樣才能夠正確揭示出數據背后的物理原理。本文對于FFT分析諧波信號頻譜所出現的“柵欄現象”的背后的原理進行的分析。

      關鍵詞:

      FFT,柵欄現象,頻率泄露

      問題提出

      目 錄

      Contents

      FFT變換結果

      問題分析

      都是截斷惹的禍

      如何改善計算結果?

      總 結

      問題提出

      目 錄

      Contents

      FFT變換結果

      問題分析

      都是截斷惹的禍

      如何改善計算結果?

      總 結

      老師,請教個問題,我定義了幾個幅值都是1的不同頻率的復指數信號的和的函數y,可為啥y的fft的結果,它們的幅值不一樣呢?卓大大,拜請解答下,不勝感激。

      上面的MATLAB中的定義的信號如下:

      y ( t ) = e j 2 π 5 t + e j 2 π 10 t + e j 2 π 30 t + e j 2 π 40 t , ?? t = n ? T s y\left( t \right) = e^{j2\pi 5t} + e^{j2\pi 10t} + e^{j2\pi 30t} + e^{j2\pi 40t} ,\,\,t = n \cdot T_s y(t)=ej2π5t+ej2π10t+ej2π30t+ej2π40t,t=n?Ts

      利用FFT計算出頻譜數值,取結果的模塊繪制如下:

      定義了幾個幅值都是1的不同頻率的復指數信號的和的函數y,可為啥y的fft的結果,它們的幅值不一樣呢?

      目前猜測可能有兩個原因:

      1. 柵欄效應;

      2. 因為N取得點數不是周期的整數倍,所以導致周期延拓后其實就不是一個標準正弦信號。

      先,你利用FFT求取的信號是復震蕩信號,所以求出的FFT(信號的離散頻譜)結果中對應每個頻率出現是一個頻率尖峰。整體上你所得到的結果反映了信號中頻率分布的情況。

      2.1 問題分析

      你的疑問反映了FFT的結果與信號實際頻譜之間存在著某些差異。為了突出你的問題,可以看到如下所顯示的5Hz與10Hz兩個信號的變化。這是在原有信號頻率(5Hz,10Hz)的基礎上,增加了一個微小的頻率變化:

      f 5 = 5 + Δ f , ???? f 20 = 20 + Δ f f_5 = 5 + \Delta f,\,\,\,\,f_{20} = 20 + \Delta f f5 =5+Δf,f20 =20+Δf

      其中: Δ f ∈ ( 0 , 0.05 ) \Delta f \in \left( {0,0.05} \right) Δf∈(0,0.05)。

      從圖中可以看到頻譜出現了兩種變化:

      FFT計算結果中的頻譜的幅度在上下變化;

      在單個頻譜譜線周圍還有一些小的頻譜的分布,而且隨著頻譜幅值變化,這些小頻譜的大小也發生變化。

      由于在上述繪制FFT結果是,使用的連線繪制方式。如果使用離散數據線(火柴桿)繪制離散頻譜,就可以清楚知道結果數值的變化情況。

      下面是顯示的在20Hz周圍FFT結果幅值的變化。可以看到FFT結果中,在20Hz周圍實際上包含著大大小小多個頻譜,隨著信號中頻譜的微小增加,頻譜譜線出現高低變化。特別是在特殊的頻譜時計算結果中就只剩下一個頻譜,此時它的幅值最高,20Hz周期其他離散頻譜都消失了。

      在最終解釋之前,看一下下面的動圖,你會發現FFT計算出的數值實際上是在一個連續的sinc信號(sinc信號的絕對值)上進行采樣。隨著sinc信號的中心點逐步增加,對應的FFT采樣的離散頻譜的幅度就會發生比較大的變化。

      如果理解了FFT結果的這種特性,也就不難理解,為什么對于相同的幅值,但不同的頻率為什么FFT計算出頻譜峰值高度不同了。那就是因為FFT對應的離散頻譜點正好處在sinc函數的不同位置,造成采樣結果與sinc函數的峰值之間出現偏差。

      只有當sinc函數的中心位置恰好與FFT離散頻譜對齊是,此時對應FFT結果峰值最高,且周圍也沒有其他小的頻譜分布了。

      2.2 都是截斷惹的禍

      使用FFT來分析信號的頻譜實際上經過了以下四個步驟:

      將原來的信號進行截斷,形成離散時間信號;

      將截斷的信號進行采樣,形成有限長離散時間信號;

      將有限長離散信號進行周期延拓,形成周期離散序列。這一步驟是隱含在FFT的公示來源中,并不需要實際進行周期延拓;

      將離散序列的時間間隔 T s T_s Ts 等效成1,相當于將原來的信號進行尺度變化。

      對信號進行截斷,相當于將原來的信號與一個有限長的矩形時間窗口相乘。所以截斷后的信號頻譜就等于原來信號頻譜與矩形信號頻譜的卷積結果。

      因此上對應正弦震蕩信號原本是沖激頻譜信號,由于需要卷積舉行時間窗口的頻譜,所以對應的頻譜就是一個sinc頻譜了。在前面FFT采樣中的sinc函數實際上就是對應信號截斷時間窗口的傅里葉變換結果。

      對信號進行采樣,得到離散序列信號的頻譜時原來信號頻譜的周期延拓,此時會產生頻譜混疊現象。

      FFT的結果是對原始信號連續頻譜的采樣,也就是只能反映原來連續頻譜在離散頻率點初的取值,這種現象被稱為“柵欄現象”。如果對應的信號頻譜變換很大,柵欄現象就會造成頻譜采樣峰值變化很大。因此前面分析的現象可以看成柵欄現象的影響。

      對于FFT計算結果的幅值,需要考慮到 T s T_s Ts 的影響,需要最終乘以 T s T_s Ts 才能夠真正反映出信號中頻譜的幅值。

      2.3 如何改善計算結果?

      通過上面分析,可以知道利用FFT來分析一些純周期信號頻譜的時候會出現較大的差異,如何避免上述截斷、柵欄現象對于結果的影響呢?

      2.3.1 信號能量

      如果僅僅通過信號的峰值來判斷正弦信號頻譜可能會出現較大的偏差,所以可以采用將峰值附近的頻譜的能量累加起來,然后再計算機信號的峰值,這樣可以避免因為柵欄現象所產生的峰值偏差;

      下圖就是計算了20Hz附近20條頻譜的能量對應的幅值隨著頻譜變化情況,可以看到對應的幅值變化不到1%。

      2.3.2 信號補零

      提高FFT結果頻譜密度可以減少柵欄現象帶來的偏差。在計算能力足夠的情況下,通過增加截取信號的數據長度可以增加FFT結果頻譜密度,即使簡單在 原來采集數據的基礎上,通過補零,來增加FFT計算數據的長度也可以有效增加FFT結果的頻譜密度。

      2.3.3 諧波估計

      如果已知信號中存在著少量不同頻率的正弦信號,可以使用諧波估計處理方法,替代FFT,增強對正弦波幅度、頻率、相位的估計精度。具體的算法參見現代信號處理相關的文檔。

      在很多功能強大的軟件使得我們分析數據的效率大大提高。雖然我們依靠軟件來處理數據,但對計算結果的應用卻不能完全依賴軟件,還需要對其背后的原理有著清晰的理解,這樣才能夠正確揭示出數據背后的物理原理。本文對于FFT分析諧波信號頻譜所出現的“柵欄現象”的背后的原理進行的分析。

      留言:我今天好像看到您了

      ● 相關圖表鏈接:

      圖1.1 求信號FFT的MATLAB程序

      圖1.2 數據FFT的幅度譜

      圖 不同的頻率偏移下譜線高度變化

      在20Hz 附近的譜線變化情況

      圖 增加了連續頻譜后的圖像

      圖 對比15Hz,20Hz兩個頻譜附近的變化

      圖2.2.1 信號由于被截斷,它的頻譜相當于被窗口信號頻譜卷積

      圖2.3.1 20Hz附近頻譜能量對應的幅值隨著頻譜變化情況

      #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # TEST1.PY -- by Dr. ZhuoQing 2022-01-03 # # Note: #============================================================ from headm import * # = fs = 100 # Sample frequency N = 2048 # Data number n = range(0,N) # t = array(n)/fs pltgif = PlotGIF() deltafdim = [] energedim = [] for i in range(fs): deltaF = i/N y = exp(2*pi*(5+deltaF)*t*1.0j) + exp(1.0j*2*pi*t*(20+deltaF)) x = fft.fft(y) m = abs(x) fdim = array(n)/(N/fs) startid = 390 endid = 420 ffdim = linspace(startid*fs/N, endid*fs/N, 5000) sincdim = abs(sinc((ffdim-(20+deltaF))*N/fs)*N) sincdim1 = abs(sinc((ffdim-(15+deltaF))*N/fs)*N) allenerge = sqrt(sum([s*s for s in m[startid:endid]])) energedim.append(allenerge) deltafdim.append(20+deltaF) #-------------------------------------------------------- plt.clf() plt.figure(figsize=(8,5)) # plt.plot(fdim, m) plt.plot(ffdim, sincdim, 'r') plt.plot(ffdim, sincdim1, 'r') plt.stem(fdim[startid:endid], m[startid:endid]) plt.axis([startid*fs/N, endid*fs/N, 0, 2200]) plt.title('Delta Frequency = %fHz'%deltaF) plt.xlabel("Sample") plt.ylabel("Amplitude") plt.grid(True) plt.tight_layout() plt.savefig(r"d:\temp\figure1.jpg") pltgif.append(plt) plt.close() tspshowimage(image=r"d:\temp\figure1.jpg") #-------------------------------------------------------- break #pltgif.save() #------------------------------------------------------------ ''' plt.clf() plt.figure(figsize=(8,5)) plt.plot(deltafdim, energedim) plt.xlabel("Frequency") plt.ylabel("Amplitude") plt.grid(True) plt.tight_layout() plt.savefig(r"d:\temp\figure1.jpg") plt.close() tspshowimage(image=r"d:\temp\figure1.jpg") print((max(energedim) - min(energedim)) / mean(energedim) * 100) ''' #------------------------------------------------------------ # END OF FILE : TEST1.PY #============================================================

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      學習理論有什么用?

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      神經網絡

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【圖像分類】一文徹底搞明白GoogLeNet
      下一篇:AI+無線通信總結——初賽賽題
      相關文章
      四虎亚洲精品高清在线观看| 亚洲精品乱码久久久久久下载| 亚洲av乱码一区二区三区香蕉| 亚洲中文字幕无码不卡电影| 噜噜综合亚洲AV中文无码| 亚洲18在线天美| 亚洲jjzzjjzz在线播放| 亚洲人成在久久综合网站| 亚洲免费观看网站| 亚洲中字慕日产2020| 亚洲噜噜噜噜噜影院在线播放| 亚洲成年人电影网站| 亚洲国产精品久久久久| 亚洲AV永久无码精品水牛影视| 亚洲国产另类久久久精品黑人| 亚洲不卡中文字幕无码| 久久精品国产亚洲综合色| 亚洲av午夜福利精品一区 | 亚洲日韩精品无码专区加勒比| 亚洲日本久久久午夜精品| 亚洲综合校园春色| 在线综合亚洲欧洲综合网站| 亚洲AV无码男人的天堂| 亚洲第一se情网站| 国产一区二区三区亚洲综合| 亚洲人成网站观看在线播放| 中文字幕亚洲图片| 久久精品国产亚洲AV麻豆~| 亚洲午夜视频在线观看| 亚洲日本在线播放| 中文日韩亚洲欧美制服| 蜜臀亚洲AV无码精品国产午夜.| 亚洲Av无码乱码在线znlu| 中文字幕亚洲专区| 亚洲国产精品特色大片观看完整版| 亚洲av色福利天堂| 亚洲午夜电影在线观看高清| 亚洲一区AV无码少妇电影| 春暖花开亚洲性无区一区二区 | 91精品国产亚洲爽啪在线观看| 亚洲欧洲日本精品|