MelFrequencyFilterBank API 及Mel頻率濾波器







  1. <span style=“font-size:24px;”>本類的方法:  
  2. public void newProperties(PropertySheet ps);對屬性進行改變時,調用,對屬性的設置與構造方法的設置一樣。對濾波器個數,最小頻率,最大頻率,logger。進行的設置。  
  3. public void initialize();在此方法中只調用了其父類相同的方法。即對本處理器的前一處理器進行了設置。  
  4. private double linToMelFreq(double inputFreq);把輸入的線性頻率轉換爲Mel域中的頻率即mel頻率。轉換格式爲:  
  5. 2595.0 * (Math.log(1.0 + inputFreq / 700.0) / Math.log(10.0))  
  6. private double melToLinFreq(double inputFreq);把輸入的mel域的頻率即mel頻率轉換爲線性域的頻率即線性頻率。  
  7. private double setToNearestFrequencyBin(double inFreq, double stepFreq);stepFreq爲頻率間隔,在類中爲頻率間隔爲輸入的要進行濾波處理的頻率軸上的頻率間隔。本類的作用是確定infreq頻率在頻率軸上的位置(有多少個頻率間隔如果個數是小數則去除小數取整)上所代表的頻率,即頻率間隔乘以其有多少個頻率間隔。輸出也頻率值。此方法相當與對頻率的量化處理。返回即爲stepFreq * Math.round(inFreq / stepFreq);  
  8. private void buildFilterbank(int numberFftPoints, int numberFilters,double minFreq, double maxFreq);本方法作用爲建立濾波器組。 通過輸入參數:濾波器的個數,FFT的點數,濾波器組的最小頻率和最大頻率來建立濾波器組。在本方法中確定了頻率軸上的頻率間隔。此頻率間隔爲要進行濾波處理的信號頻率軸的頻率間隔爲採樣率除以FFT點數。本方法的實際上是在要進行濾波處理的頻率軸上構建濾波器組,以便進行濾波。本方法構造的濾波器組爲mel濾波器組,在濾波器組中的每個濾波器之間的可通過的mel頻率爲2倍的mel間隔距離。每一個濾波器的中心頻率是其後一個濾波器的左邊緣,是其前一個濾波器的右邊緣。此濾波器組可以看成是一個mel濾波器通過每次移動一mel的間隔距離來實現。Mel間隔距離爲濾波器組中的最大mel頻率減去最小mel頻率之後,再除以濾波器的個數加一後的值,即  deltaFreqMel = (maxFreqMel - minFreqMel) / (numberFilters + 1);其中的最大和最小mel頻率是通過給定濾波器組中的最大和最小頻率通過mel變換得來的。最後通過把mel濾波器中的mel頻率轉換成線性頻率(每個mel濾波器中的中心,右邊緣,左邊緣mel頻率轉換成線性域中的中心,右邊緣,左邊緣頻率)來構造每一個濾波器。通過調用了this.filter[i] = new MelFilter(leftEdge[i], centerFreq[i],rightEdge[i], initialFreqBin, deltaFreq);  
  9. private DoubleData process(DoubleData input);本方法通過輸入的doubledata得到採樣率和FFT的點數,並對輸入的doubledata中的能量譜進行濾波處理,其結果放入一個長度爲濾波器個數的double數組中,並根據此數組構建了一doubledata對象。返回此對象。  
  10. public Data getData();獲得前一處理器的輸出doubledata,並對其進行濾波器處理後,記錄每一doubledata的處理時間,並輸出後的數據。   
  11. </span>  

轉:http://blog.csdn.net/taiyb/article/details/46350649

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章