短時傅里葉變換原理解


  前一段時間項目需要學習了短時傅里葉變換,今天我來總結一下現階段對短時傅里葉變換的理解。

  短時傅里葉變換是最常用的一種時頻分析方法,它通過時間窗內的一段信號來表示某一時刻的信號特征。在短時傅里葉變換過程中,窗的長度決定頻譜圖的時間分辨率和頻率分辨率,窗長越長,截取的信號越長,信號越長,傅里葉變換后頻率分辨率越高,時間分辨率越差;相反,窗長越短,截取的信號就越短,頻率分辨率越差,時間分辨率越好,也就是說短時傅里葉變換中,時間分辨率和頻率分辨率之間不能兼得,應該根據具體需求進行取舍。

  簡單來說,短時傅里葉變換就是先把一個函數和窗函數進行相乘,然后再進行一維的傅里葉變換。並通過窗函數的滑動得到一系列的福利也變化結果,將這些結果排開便得到一個二維的表象。

  短時傅里葉變換的公式為

其中Z(t)為源信號,g(t )為窗函數。

  為方便計算機處理,一般把信號進行離散化處理,具體公式為

  短時傅里葉變換的編程思路如下:

  1.第一步,確定相關參數。主要包括原信號,窗函數,窗長,重疊點數,采樣頻率,傅里葉點數等。

   其中傅里葉點數主要用於在傅里葉變換過程中使用,當信號長度小於傅里葉點數時,系統會自動進行補零,然后再進行快速傅里葉變換。

  2.第二步,計算把源信號和窗函數轉換為列向量。計算信號長度,並根據信號長度nx、窗長WinLen以及重疊點數noverlap計算出窗滑動的次數n,也就是指后面把源信號分成列時信號的列數。

   n=fix((nx-noverlap)/(WinLen-noverlap))

  3.把每次窗函數滑動所選取的信號表示為列,確定每一列的值,得到一個列數為n,行數為WinLen的矩陣Fig。

   colindex = (0:(t-1))*(WinLen-noverlap);
   rowindex = (1:WinLen)';

   xin = zeros(frame_length,t);
   xin(:) = x(rowindex(:,ones(1,t))+colindex(ones(WinLen,1),:));

  4.把轉換為列向量的窗函數擴展為n列的矩陣w,並對矩陣Fig和w進行點乘,並對點乘的結果進行快速傅里葉變換,得到時頻矩陣。

  xin = win(:,ones(1,t)).*xin;

  5.根據時頻矩陣,輸出頻譜圖。

  以上就是我對短時傅里葉變換實現過程的理解,后面如果有新的理解,我會繼續修改進行完善!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM