時頻分析之短時傅里葉變換(STFT)

目錄

一、STFT

1.基本理論

2.spectrogram函數

3.頻率分辨率和時間分辨率

3.1分辨率的影響因素

3.2提高頻率分辨率的方法

二、MATLAB代碼

參考文獻


一、STFT

1.基本理論

傅里葉變換隻反映出信號在頻域的特性,無法在時域內對信號進行分析。爲了將時域和頻域相聯繫,Gabor於1946年提出了短時傅里葉變換(short-time Fourier transform
,STFT),其實質是加窗的傅里葉變換。STFT的過程是:在信號做傅里葉變換之前乘一個時間有限的窗函數 h(t),並假定非平穩信號在分析窗的短時間隔內是平穩的,通過窗函數 h(t)在時間軸上的移動,對信號進行逐段分析得到信號的一組局部“頻譜”。信號x(t)的短時傅里葉變換定義爲:

由上式知,信號x(t)在時間 t 處的短時傅里葉變換就是信號乘上一個以 t 爲中心的“分析窗”h(\tau -t)後所作的傅里葉變換。x(t)乘以分析窗函數h(\tau -t)等價於取出信號在分析時間點 t 附近的一個切片。對於給定時間 t,STFT(t,f)可以看作是該時刻的頻譜。特別是,當窗函數取h(t)\equiv 1時,則短時傅里葉變換就退化爲傳統的傅里葉變換。要得到最優的局部化性能,時頻分析中窗函數的寬度應根據信號特點進行調整,即正弦類信號用大窗寬,脈衝型信號用小窗寬。

短時傅里葉變換的優缺點:優點是其基本算法即是傅里葉變換,易於解釋其物理意義;缺點是STFT 的窗寬是固定的,不能進行自適應調整。

2.spectrogram函數

function varargout = spectrogram(x,varargin):用於短時傅里葉變換(STFT)的頻譜圖。

S = SPECTROGRAM(X),返回由矩陣S中的向量X指定的信號的短時傅立葉變換。默認情況下,X被分成8個有50個重疊的段,每個段用Hamming窗口加窗。用於計算離散傅里葉變換的頻率點的數目等於256或大於段長度的下一次冪的256。如果X不能精確地分成八段,X將被截斷。

S = SPECTROGRAM(X,WINDOW),當WINDOW是一個向量時,將X分成與WINDOW長度相同的段,然後用WINDOW指定的向量對每個段進行加窗。如果WINDOW是一個整數,函數將X分成長度等於該整數值的段,並用Hamming窗口對每個段進行加窗。如果未指定WINDOW,則使用默認值。

S = SPECTROGRAM(X,WINDOW,NOVERLAP),指定相鄰線段之間重疊的NOVERLAP採樣。如果WINDOW是整數,則NOVERLAP必須是小於WINDOW的整數。如果WINDOW是向量,則NOVERLAP必須是小於WINDOW長度的整數。如果未指定NOVERLAP,則使用默認值獲得50個重疊。

S = SPECTROGRAM(X,WINDOW,NOVERLAP,NFFT),指定用於計算離散傅里葉變換的頻率點的數目。如果未指定NFFT,則使用默認NFFT。

S = SPECTROGRAM(X,WINDOW,NOVERLAP,NFFT,Fs),指定採樣率Fs(Hz)。如果Fs指定爲空,則默認爲1Hz。如果未指定,則使用規範化頻率。

S的每一列包含X的短期、時間局部化頻率含量的估計值。S列中的時間從左到右遞增。頻率從0開始沿行遞增。如果X是一個長度爲NX的覆信號,則S是一個具有NFFT行和k=fix((NX-NOVERLAP)/(length(WINDOW)-NOVERLAP))列的復矩陣。對於實X,如果NFFT是偶數,S有(NFFT/2+1)行;如果NFFT是奇數,S有(NFFT+1)/2行。

[S,F,T] = SPECTROGRAM(...),返回頻率向量F和時間向量T,在該向量下計算頻譜圖。F的長度等於S的行數。T的長度爲k(如上定義),其值對應於每個線段的中心。如果沒有提供採樣率,F包含歸一化頻率。

[S,F,T] = SPECTROGRAM(X,WINDOW,NOVERLAP,F),計算矢量F中指定的歸一化頻率下的雙面譜圖。F必須至少有兩個元素。

[S,F,T] = SPECTROGRAM(X,WINDOW,NOVERLAP,F,Fs),計算矢量F中指定頻率下的雙側頻譜圖。F必須以赫茲表示,並且至少有兩個元素。

[S,F,T,P] = SPECTROGRAM(...),P是表示每段功率譜密度(PSD)的矩陣。對於實信號,SPECTROGRAM返回每段PSD的單邊修正週期圖估計值;對於覆信號,如果指定了頻率向量,則返回雙邊PSD。

3.頻率分辨率和時間分辨率

3.1分辨率的影響因素

窗口的長度會影響時間分辨率和頻率分辨率。窗口越長,截取的信號越長,時間分辨率越低,頻率分辨率越高;窗口越短,截取的信號越短,時間分辨率越高,頻率分辨率越低。

從定量的角度來看,STFT的時間分辨率取決於平移步長h,而頻率分辨率則取決於\frac{f_{s}}{h}。顯然,一方的增加必然意味着另一方的減小。這就是所謂的時頻測不準原理,具體關係爲:

                                                                                                 \Delta t\cdot \Delta f\geqslant \frac{1}{4\pi }

3.2提高頻率分辨率的方法

利用spectrogram函數自帶兩種提高頻率分辨率的方法

方法1:將小於某個數值的數歸零,提高頻率分辨率。

調用格式:[S,F,T,P] = SPECTROGRAM(...,'MinThreshold',THRESH);當10*log10(P)的對應元素小於THRESH(以分貝爲單位指定閾值)時,將P的元素設置爲零。

方法2:利用功率譜將能量集中的原理,提高頻率分辨率。

調用格式:[S,F,T,P] = SPECTROGRAM(...,'reassigned');將每個PSD估計值重新設定爲其重心位置。

二、MATLAB代碼

clc;
clear;
close all;
tic;
%% 產生信號
fs = 1000;  % 採樣頻率1KHz
t = 0:1/fs:1-1/fs;
N=size(t,2);
f1=10;
f2=30;
x=3*cos(2*pi*f1*t)+5*sin(2*pi*f2*t);
figure(1);
plot(t,x);

%% 短時傅里葉變換
wlen=500;%設置窗口長度。窗口越長時間分辨率越差,頻率分辨率越好。
hop=1;%每次平移的步長,最小爲1。越小圖像時間精度越好,但計算量大。
x=wkeep1(x,N+1*wlen);%中間截斷
h=hamming(wlen);%設置海明窗的窗長
[B, F, T, P] = spectrogram(x,h,wlen-hop,N,fs);   % B是F行T列的頻率峯值,P是對應的能量譜密度
figure(2);
imagesc(T,F,P);
set(gca,'YDir','normal')
colorbar;
xlabel('時間 t/s');
ylabel('頻率 f/Hz');
title('短時傅里葉時頻圖');
toc;

參考文獻

[1]宮宇新,何滿潮,汪政紅,等.岩石破壞聲發射時頻分析算法與瞬時頻率前兆研究[J].岩石力學與工程學報,2013,32(4):787-799.

[2]時頻分析之STFT:短時傅里葉變換的原理與代碼實現(非調用Matlab API).

[3]matlab時頻分析之短時傅里葉變換 spectrogram.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章