2014年9月9日 星期二

[Matlab] Spectrogram長白色痘痘? 教您如何除痘

用Matlab做聲紋時,我們可以畫出還不錯的圖片,但是存檔時,就常常會跑出白色的點。相對的Octave就沒有這樣的問題。對於習慣使用Matlab的使用者而言,這無疑是一個令人頭疼的問題。這邊有一個方法可以幫忙避免白色的遺失資料點。

先比較一下使用後(上)與使用前(下,拿先前的圖借用)的圖片差異吧!可以看到差別非常多呢!!
















































首先,還記得spectrogram程式碼嗎?平時我們繪圖時都直接用spectrogram進行繪製,但其實也可以使用spectrogram產出相對應的數值,使用這些數值再來繪出全新的一張圖,這時在存檔就可以避免出現白色的雜點。

程式碼
[S,F,T]=spectrogram(x,1024,512,[],fs);%讀出聲音訊號轉換後的數值

>> whos
  Name           Size                 Bytes  Class     Attributes

  F          22051x1                 176408  double              
  S          22051x725            255791600  double    complex   
  T              1x725                 5800  double              
  fs             1x1                      8  double              
  x         372733x1                2981864  double              

用whos可以看到S可以對應上F(frequency)以及T(time),所以我們將這些資料取出後再重新繪製就可以得到我們新的圖了。

pcolor(T,F,log(abs(S))) %使用pcolor幫我們重新畫圖,x軸是時間T,y軸是頻率F,但這樣畫出來預設值為呈現黑色,請見下一行。
shading flat; %這樣顏色就漂亮的出來囉,flat與原本的spectrogram設定較為相像,若要改變參數也可再上網查詢。

成果!!










多兩行程式碼就可以漂亮的存出沒有資料遺失的圖囉!!

1 則留言:

  1. 過了一陣子又發現新方法除痘,只要在繪圖前先設定繪圖方式即可,但這會使繪圖時間變較久。如下:
    set(figure(1),'renderer','painters')

    回覆刪除

有任何問題可以詢問,我們會盡量回答