时频分析:短时傅里叶变换实现(1)
目錄:
- 前言
- 實驗環境
- Matlab spectrogram函數
- 1語法
- 2使用說明
- 3代碼如下:
前言
之前講了時頻分析的原理,現在來講講它在matlab里面的實現。
想要復習原理的同學,可以參照一一下這篇:短時傅里葉分析
本次先講解四個函數,后續的請參見下篇。
實驗環境
本文的所有實驗都是在matlab2016a下通過的。
Matlab spectrogram函數
譜圖函數使用短時傅里葉變換
1語法
>
s = spectrogram(x)s = spectrogram(x,window)s =spectrogram(x,window,noverlap)s =spectrogram(x,window,noverlap,nfft)2使用說明
s = spectrogram(x)
返回輸入信號(x)的短時傅里葉變換,s的每一列包含著信號s短期時間鎖定的頻率成分
詳細說明:
返回輸入信號x的譜圖,結果存儲在矩陣s中。默認設置:X被分割為8段,每段都有50%重疊,每個段落都經過漢寧窗處理。nfft的點數是256或者比每段X最多點數大的2的倍數。如果x不能被分成8段,它會被截斷。
S = spectrogram(X,WINDOW)
詳細說明:當window是一個向量的時候,將x劃分成每段長數和window一樣長的n段,并使用window對每段信號進行處理,如果window是一個整數,則將x分成這么多段,并使用漢寧窗進行處理。
S = spectrogram(X,WINDOW,NOVERLAP) .
noverlp 重疊部分是x中重疊的點數,當window是整數的時候,它必須是個小于window的整數,當window是向量的時候它必須小于window的長度,默認值是50%重疊。
S = spectrogram(X,WINDOW,NOVERLAP,NFFT)
額外設置NFFT的點數。
3代碼如下:
產生一個1024點的采樣信號,信號源是兩個正弦波的疊加,歸一化頻率分別是0.4pi,和0.8pi,高頻信號的能量是低頻的10倍。 N = 1024; n = 0:N-1; w0 = 2*pi/5; 計算短時傅里葉變換,并使用默認參數畫出譜圖。 x = sin(w0*n)+10*sin(2*w0*n); s = spectrogram(x); spectrogram(x,'yaxis')
重復驗證計算:
- 將源信號分割成幾個段的信號 nsc=?Nx/4.5?nsc=?Nx/4.5?.
- 使用漢寧窗進行加窗運算
- 確定使用50%的重疊部分
-對傅里葉計算的點做選擇,點數由max(256,2^p),其中p等于 p=?log2Nx?p=?log2?Nx?.
驗證這倆個途徑的計算結果是否相同:
Nx = length(x); nsc = floor(Nx/4.5); nov = floor(nsc/2); nff = max(256,2^nextpow2(nsc)); t = spectrogram(x,hamming(nsc),nov,nff); maxerr = max(abs(abs(t(:))-abs(s(:)))) maxerr =0誤差為0,因此,這種方法是可以使用的。
將信號分割成8個等長的部分,每個區段由50%的部分重疊。將FFT的長度確定為和之前的步驟一樣長。計算短時傅里葉變換并確認它的結果和之前的兩個步驟得出的結果一樣。
誤差為0,因此,這種方法是可以使用的。
總結
以上是生活随笔為你收集整理的时频分析:短时傅里叶变换实现(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arm linux挂载ubi,挂载ubi
- 下一篇: java程序设计简单程序分类_3 Jav