時頻分析之短時傅利葉變換 STFT

2021-10-11 17:28:12 字數 3428 閱讀 7963

目錄

一、stft

1.基本理論

2.spectrogram函式

3.頻率解析度和時間解析度

3.1解析度的影響因素

3.2提高頻率解析度的方法

二、matlab**

參考文獻

傅利葉變換只反映出訊號在頻域的特性,無法在時域內對訊號進行分析。為了將時域和頻域相聯絡,gabor於2023年提出了短時傅利葉變換(short-time fourier transform

,stft),其實質是加窗的傅利葉變換。stft的過程是:在訊號做傅利葉變換之前乘乙個時間有限的窗函式 h(t),並假定非平穩訊號在分析窗的短時間隔內是平穩的,通過窗函式 h(t)在時間軸上的移動,對訊號進行逐段分析得到訊號的一組區域性「頻譜」。訊號

由上式知,訊號

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

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。

視窗的長度會影響時間解析度和頻率解析度。視窗越長,擷取的訊號越長,時間解析度越低,頻率解析度越高;視窗越短,擷取的訊號越短,時間解析度越高,頻率解析度越低。

從定量的角度來看,stft的時間解析度取決於平移步長

利用spectrogram函式自帶兩種提高頻率解析度的方法

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

呼叫格式:[s,f,t,p] = spectrogram(...,'minthreshold',thresh);當10*log10(p)的對應元素小於thresh(以分貝為單位指定閾值)時,將p的元素設定為零。

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

呼叫格式:[s,f,t,p] = spectrogram(...,'reassigned');將每個psd估計值重新設定為其重心位置。

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.

傅利葉分析

傅利葉分析究竟是幹什麼用的?這段相對比較枯燥,已經知道了的同學可以直接跳到下乙個分割線。先說乙個最直接的用途。無論聽廣播還是看電視,我們一定對乙個詞不陌生 頻道。頻道頻道,就是頻率的通道,不同的頻道就是將不同的頻率作為乙個通道來進行資訊傳輸。下面大家嘗試一件事 先在紙上畫乙個sin x 不一定標準,...

傅利葉分析

覺得寫的真的是淺顯易懂,尤其是其圖生動形象,在這裡寫下一些讀完的理解。的部落格都寫的蠻好的 傅利葉分析主要涉及時域和頻域之間的聯絡,任何波形 時域 都能由多個不同振幅 相位的正弦波 頻域 疊加構成。傅利葉分析包括傅利葉級數和傅利葉變換,傅利葉級數的本質是將乙個週期的訊號分解成無限多分開的 離散的 正...

spectrogram函式做短時傅利葉分析

整理自 今天偶人發現原來matlab自帶了短時傅利葉變換的分析函式,老版本的matlab是specgram函式,新的改成了spectrogram函式,雖然一說到時頻分析,都會說到小波分析,小波分析要比短時傅利葉要好云云,但在分析訊號的瞬時頻譜時,短時傅利葉還是有它的用武之地的。前一陣也看了一些有關小...