矩陣分解做FFT

Dear All :

  小弟最近遇到一點小問題, 想請問一下 :

  目前從 WAVE 檔案中讀取到DATA後,

  因為資料量太龐大考慮到及時輸出的問題,

  所以使用了邊讀取邊做處理然後及時輸出的做法,

  每筆的資料流程上是

  Read Data => FFT => 與特效矩陣做 .* => IFFT => Output Data

  發現處理後的資料在播放時會帶有非常輕微的一聲 "啵" 的雜訊

  想請問做FFT之後的資料有需要再濾波之類的處理嗎?

  PS.應該不是特效矩陣的問題,因為使用過matlab做過測試並不會有那個 "啵" 的雜訊

 

PS.附上一個簡單的測試結果,是單純把一個SIN波訊號FFT再IFFT跟把訊號拆成兩部分之後再做FFT跟IFFT

其結果在紅線框起來的地方確實有出現一根雜訊,另外就是兩個部分的振幅也不一樣了,

請問為什麼會產生這種現象??

是因為我在拆解訊號的時候有資訊沒有設定嗎??

FFT Test.vi

 

![](upload://lFMMfp98nRAavl0zxByO1tCputq.jpeg)

<span =“apple-style-span” style="font-size: 16px; line-height: 24px; ">帶有非常輕微的一聲 “啵” 的雜訊


對FFT這種演算法而言, 是預設進入演算法的信號是重複出現的.

如果你取樣的匯入FFT演算法之前的信號不是剛好一個完整週期.

最簡單的判斷就是 起點, 跟結束點 能不能接的起來? 如果不行. 那就是代表不連續. 當然 FFT 的結果會出現高頻成分.

一般就是加上特別的 Window, 來消除這種不連續現象.

當然加上了 Window 會帶來副作用. 

不同的Windows 副作用也不相同. 但是都跟兩件事情有關

振幅誤差, 頻率誤差

我想你遇到的是這種問題.

ps: google "fft windowing"


Dear yytseng:

  經過測試後應該是你所謂的不連續引起的現象

  附上我的程式圖片跟結果

  可以看到拆開分別做FFT後來又組合起來的波形明顯會在組合的地方產生雜訊(還是要稱為不連續訊號??)

  所以.....我會努力try, 不過能不能還是請大大指點一下這方面的資訊, 謝謝

 

 

![](upload://tS7veDi477tYDzZu3QK15JsjVdJ.jpeg)

![](upload://h9vb9jinohwziSirU2GnvXksgAK.jpeg)


解法就是, 

讓進入FFT處理前的時域信號, 頭尾變成連續.

頭尾變成連續.

最簡單的作法就是之前說的…加入Window 做 Convolution

http://zone.ni.com/devzone/cda/tut/p/id/4278

有很詳細的FFT基礎知識.




Dear yytseng :

  小弟剛剛測試過後發現使用windows後確實有好轉,

  但是只要一改變輸出頻率後馬上又惡化了,

  上面那張是500Hz, windows調好後我改成輸出3k Hz

  就爆了...

  我的做法是在FOR迴圈內部的SIN波出來後就加windows然後進FFT

  這種做法有問題嗎?

  PS.小弟的檔案來源是兩個音樂檔, 一個是音樂, 一個是特效

       程式中SIN波的地方之後會改成讀取音樂檔, 所以應該都會是不連續的

       而特效應該就 "相對" 是個連續的了, 所以我只有把windows放到SIN波那邊

       我把音樂跟特效都各自FFT後再乘在一起然後再IFFT為輸出,

       這種做法是不是就一定會遇到不連續訊號的這種問題??

      

 

![](upload://xuY8zeYoeIWaUCAQsyAUuCgKsX9.jpeg)

這裡其實你遇到兩個不同的問題.


數位信號處理的所有理論都必須不能違背…<span =“apple-style-span” style="line-height: 19px; ">Nyquist 及 Shannon定理
<span =“apple-style-span” style="line-height: 19px; ">
<span =“apple-style-span” style=“line-height: 19px;”>違背之後, 就要用這兩定理去推會發生什麼問題.
<span =“apple-style-span” style=“line-height: 19px;”>
<span =“apple-style-span” style=“line-height: 19px;”>至於, 如何做混音
<font =“apple-style-span” size=“4”><span =“apple-style-span” style=“font-size: 16px; line-height: 24px;”><font =“apple-style-span” size=“3”><span =“apple-style-span” style=“font-size: 13px; line-height: 19px;”>
<span =“apple-style-span” style=“line-height: 19px;”>沒做過…不是很確定…

Dear :

    應該是沒有違背...Nyquist 及 Shannon定理

    不過昨晚想了很久,想試試看用overland的做法

    重疊之後把那一段消除這種做法不曉得大大有做過嗎??