Matlab STFT詳解

一、什麼是STFT

短時傅里葉變換(Short-Time Fourier Transform,STFT)是一種在頻譜分析中常用的算法,它的基本思想是將長時序信號通過窗函數分成多個較短的時間段,對每個時間段內的信號進行傅里葉變換得到頻譜圖,可以觀察信號在不同時間段內頻率成分的變化。STFT最早在語音信號的處理中被廣泛使用,現在已經在音樂信號分析、圖像處理、語音識別等多個領域得到了應用。

二、Matlab STFT函數

Matlab中提供了多個STFT相關函數,如stft、spectrogram等,其中stft是最基本的函數,可以對信號進行STFT分析並繪製譜圖。以下代碼是一個基本的stft調用示例。

fs=1000;
t=0:1/fs:5;
x=cos(2*pi*100*t)+0.5*cos(2*pi*200*t)+0.2*cos(2*pi*300*t);
w=hamming(128);
noverlap=numel(w)-1;
nfft=256;
[S,F,T]=stft(x,fs,'Window',w,'OverlapLength',noverlap,'FFTLength',nfft);
surf(T,F,abs(S))

其中,fs為採樣頻率,t為時域數組,x為信號數組,w為窗函數,noverlap為重疊長度,nfft為傅里葉變換長度,S、F、T是分別代表STFT譜、頻率、時間的輸出。

三、stft函數的參數

stft函數已經被廣泛使用,它提供了大量的參數供用戶選擇和設置,這些參數將直接影響到函數的執行效果和分析結果。以下列舉了一部分stft函數的常用參數。

1、窗函數

窗函數(Window)是一個用於把原始信號分割成多個片段的函數,窗函數之間的選擇能夠影響到整個STFT分析的結果和性能。在Matlab中,STFT函數提供了多種窗函數可供選擇,如矩形窗(rectwin)、漢明窗(hamming)、黑曼窗(blackman)等。

% 使用矩形窗
w=rectwin(128);

% 使用漢明窗
w=hamming(128);

% 使用黑曼窗
w=blackman(128);

2、重疊長度

重疊長度(OverlapLength)是指相鄰兩個窗函數之間交疊的長度,相當於窗函數的移動距離。在實際應用中,通常採取50%的重疊長度,能夠較好地平滑分段信號,在Matlab中可以這樣設置。

w=hamming(128);
noverlap=numel(w)/2;

3、FFT長度

FFT長度(FFTLength)是指FFT計算中所採用的數據點數目,也稱為零填充長度,零填充是為了避免頻譜圖中出現泄漏(leakage)現象。一般情況下,FFT長度應該盡量選取小的值以節省計算時間,但是有時候由於分析需求,需要選取較大的值對於細節進行分析。

四、STFT譜圖分析

STFT譜圖是一種可以顯示信號隨時間變化的頻譜圖,直觀地表現信號在不同時間段內的頻率成分。在Matlab中,可以使用surf函數將STFT譜圖繪製成三維圖形,同時也可以使用imagesc、pcolor等函數繪製二維圖形。

下面的代碼展示了繪製譜圖的基本方法,其中S、F、T是分別代表STFT譜、頻率、時間的輸出,surf函數將譜圖繪製成3D形式展示。

fs=1000;
t=0:1/fs:5;
x=cos(2*pi*100*t)+0.5*cos(2*pi*200*t)+0.2*cos(2*pi*300*t);
w=hamming(128);
noverlap=numel(w)-1;
nfft=256;
[S,F,T]=stft(x,fs,'Window',w,'OverlapLength',noverlap,'FFTLength',nfft);
surf(T,F,abs(S))

繪製出來的STFT譜圖如下圖所示。

STFT譜圖示例

五、STFT譜圖應用

由於STFT譜圖可以反映信號在不同時刻的頻域信息,因此在多個領域得到了廣泛的應用。

1、音頻信號處理

在音頻信號處理領域,STFT譜圖被廣泛應用於音樂分析、語音識別、聲音合成等方面。例如,通過對音樂信號進行STFT分析,可以提取出某個時間段內的主旋律、和聲、節奏等音樂元素,可以做到自動和弦識別、樂器分類、音符對齊等。

2、圖像處理

在圖像處理領域,STFT譜圖被廣泛應用於紋理分析、邊緣檢測、特徵提取等方面。由於圖像在空間和頻率兩個維度上具有不同的特性,因此採用STFT譜圖可以通過頻域信息反映出圖像的紋理、條紋等信息。

3、語音識別

在語音識別領域,STFT譜圖可以用於提取音頻信號的特徵,進而用於語音識別。例如,通過對語音STFT分析,可以提取出某個時間段內的共振峰、形狀等信息,進而提取出語音信號的語音特徵。

六、總結

本文對STFT的概念、Matlab的STFT函數以及譜圖繪製和應用進行了較為詳細的闡述,希望可以對讀者有所啟示。在實際應用中,需要根據問題的需求採用合適的參數和窗函數,根據STFT譜圖的特點進行分析和處理。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/284938.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:42
下一篇 2024-12-22 15:42

相關推薦

  • 用Matlab繪製正多邊形

    在這篇文章中,我們將探討如何使用Matlab繪製正多邊形。我們將從以下幾個方面進行闡述: 一、繪製正三角形 正三角形是最簡單的正多邊形之一。要繪製一個正三角形,我們可以使用Matl…

    編程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函數是Matlab中的一個非常常用的函數,它可以在Matlab環境中增加一個或者多個文件夾的路徑,使得Matlab可以在需要時自動搜索到這些文件夾中的函數。因此,學會…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • Matlab quit函數

    Matlab是數學軟件領域比較流行的軟件之一,quit函數是Matlab中一個十分重要的函數,可以在Matlab中用來退出當前的進程或者整個Matlab的進程。下面我們將從多個方面…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25

發表回復

登錄後才能評論