2014-09-12 129 views
0

我正在使用fftw庫對從視頻錄製中收到的音頻信號執行DFT。離散傅里葉變換C++ - 下一步做什麼?

這是我第一次使用這種數學和分析信號,但我相信我已經從計算後的數據中得到了正確的值。

但是,現在我不確定如何處理複數數組以及如何將它繪製到圖中。

請會有人建議對下一步該怎麼做,這裏是之前的一個例子/數據後...

(in, out(real;im)) 
(-12190,   (real:-3103; im:0)) 
(-16316,   (real:-3108.465666587691;  im:49.512823501357843)) 
(-10005,   (real:-3096.7767811251124; im:99.645004992013128)) 
(first 3 from a sample of 512) 

而且,這裏是我使用來獲得這些結果的代碼...

int n = 512; 

    double in[512]; 
    fftw_complex out[512]; 
    fftw_plan p; 

    ifstream rFile ("audioswap.csv"); 
    string line; 

    if (rFile.is_open()) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      if (getline (rFile, line)) 
      { 
       in[i] = ::atof(line.c_str()); 
      } 
      else 
      { 
       break; 
      } 
     } 
    } 

    p = fftw_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE); 

    fftw_execute(p); 

    fftw_destroy_plan(p); 

如果我在獲取結果時做了任何錯誤,請有人能夠提供建議。

在此先感謝任何幫助! :)

+1

如果你解釋了這個目的,這將有所幫助,即你想達到什麼目的? – 2014-09-12 12:43:40

+0

對不起,遲到了,已經出國工作了。我將其用作分析軟件的一部分,以確定加密/壓縮和恢復過程後視頻失真的程度。將使用FFT繪製音頻分析圖 – bd99 2014-09-23 12:26:35

回答

1

幾乎所有的目的,你要做的下一件事是取每個複雜值的大小。傅立葉域中的相位信息是時域中(小)時移的結果,通常這並不重要。如果您更改相位信息並將其轉換回時域,它仍然聽起來相同。

幅度可以直接繪製出來,這是有意義的。