signalAnalyzer系列之persistence spectrum
讀者的背景要求: 理解短時傅里葉變換。
否則可能看不懂本文。
signalAnalyzer是MATLAB的自帶App,用來用戶互動式分析信號。為了避免「一頓操作猛如虎,一看結果二百五」,在正式編程之前,最好使用App初步分析一下,避免浪費時間的編程。
這個App中有一個功能引起了我的注意,persistence spectrum只存在於signalAnalyzer或等價函數pspectrum中. 不禁引發了我的好奇, 經過一段時間的研究後, 有了以下的心得(說的不對的地方歡迎留言指正, 也可以補充一些知識)
一句話概括: persistence spectrum本質上是STFT(短時傅里葉變換), 本質與spectrogram一樣.
persistence spectrum與spectrogram都是STFT的圖像顯示, 只是圖像顯示方式不同.
STFT對每一幀的時間序列進行fft.
spectrogram用熱力圖來表達, 橫坐標表示該幀對應的時間, 縱坐標表示頻率, 顏色表示該幀,該頻率下的power(dB).
優點: 直觀反映出了頻率隨著時間的推移進行怎麼樣的變化.
缺點: 1 時間解析度, 頻率解析度受"測不準定理"的限制. 2 很多人對相近顏色的區別不是太敏感.
persistence spectrum可以理解為對每一幀的頻譜線進行了重疊, 即很多個頻譜畫在了一張圖上, 然後對圖形進行離散化, 從而可以看出哪些部位重疊度比較高. 最後也是熱力圖.
橫坐標表示頻率, 縱坐標表示power (dB), 顏色表示重疊的比例(0-100%). 雖然是熱力圖, 但是可以清晰的看到一條一條"頻譜線", 特別是當幀的數量不是很多時.
優點: 可以看到頻譜線, 比靠顏色來分辨power(dB)直觀的多(因為大部分人對高低的敏感度要比顏色的敏感度要高)
缺點: 無法得知這些"頻譜線"的先後順序.
上圖中persistence spectrum與spectrogram使用了相同的參數.
最上面的圖是信號的時域表示。40毫秒之前為純雜訊,之後是帶有雜訊的低頻信號。這明顯不是平穩信號。應該使用STFT或者是連續小波變換。當前版本下,這個App還無法使用連續小波變換,預計r2018a會添加這個功能。
中間的那個圖是persistence spectrum, 可以看出有一些"線"幾乎是水平的, 這是典型的白雜訊的頻譜.其他線是低頻信號的頻譜.
我們可以清晰看到由哪些局部信號構成, 但是無法得知它們的先後順序.
下面的圖是頻譜圖(spectrogram), 可以看出先後順序, 但是解析度不如persistence spectrum.
各自的優缺點一目了然, 兩者可以互補.
題外話:
上文中提到了signalAnalyzer或等價函數pspectrum, 我寫了詳細的使用手冊(自己做的筆記, 將分批寫文章對外分享), 因為我發現signalAnalyzer這個MATLAB自帶的信號分析APP太好用了! 推薦大家學習使用.
R2018a這個版本又對這個App補充了新的功能。
? Signal Analyzer App: Preprocess signals by smoothing and filtering
? Signal Analyzer App: Detect transients and perform time-frequency analysis using scalogram view
推薦閱讀:
※一個優秀的編程人員,一定要熟練掌握Matlab方面的東西嗎?
※MATLAB的簡單使用
※求推薦matlab編程比較好的書籍?
※大表姐說:得旌旗者得天下(matlab畫圖機制)