2017-01-23 89 views
0

我想用C來實現這個維基百科的文章中看到的第一個自相關公式蠻力自相關方法 - https://en.wikipedia.org/wiki/Autocorrelation#Properties實現用C

我確切地知道我需要在數學方面的事,但試圖實現這作爲一個迭代過程證明是相當棘手的。

最後我要使用從CSV文件導入到一個數組,以確定一個音符的音高振幅值,但現在我使用的是測試數組:

int sig[] = { 0, 2, 6, 14, 25, 13, 11, 10, 5, 1 }; 
int N = sizeof(sig)/sizeof(sig[0]); 

我現在需要計算輸出數組,像這樣:

(sig[0] * sig[N-1]) 
(sig[0] * sig[N-2]) + (sig[1] * sig[N-1]) 
(sig[0] * sig[N-3]) + (sig[1] * sig[N-2]) + (sig[2] * sig[N-1]) 

等等...

我曾嘗試使用循環實現這一點,但我不知道如何保持增加一個新值e非常時間。 sig [0]總是要乘以sig [Nx],每次添加一個新的迭代時增加1,然後這個新的迭代將保留,並且乘以的sig [Nx]也將開始減少1。

我知道的東西,如

int n=0; 
int m=0; 
int a[N]; 

for(m = 0; m = N-1; m++) 
    for(n = N-m; n = 0; n--) 
     a[N] = a[N-1] + sig[m] * sig[n-1]; 

不會因爲這方面的工作將只是前面的計算添加到新的一個,當實際發生的事情是相乘的兩個值不斷變化每次都有

有沒有人有任何建議?我的主要問題是它不是一個「迭代」,因爲每次迭代之間沒有類似的值。

+2

顯示你失敗的嘗試,那麼也許我們可以告訴你什麼是錯的。在提問時,你應該展示你的代碼而不是描述它。 –

+0

我嘗試了幾次嘗試,並且知道爲什麼我的代碼是錯誤的,我只是不知道如何實現我想要在C中執行的操作。儘管我已向OP –

+0

中添加了一個糟糕的示例除了先前的評論:'int N = sizeof(sig); ' - >'int N = sizeof(sig)/ sizeof(sig [0]);'。 –

回答

0

也許是這樣的:

int i, j 
int a[N]; 

for (i = 0; i <= N-1; i++) { 
    a[i] = 0; 
    for (j = 0; j <= i; j++) { 
     a[i] = a[i] + sig[j] * sig[N-i+j-1]; 
    } 
} 

相比的問題,我有:

  • 改變循環條件從作業條件和固定的開始/結束值
  • 加入動初始化的輸出數組爲0
  • 修復了輸出數組賦值以匹配示例公式
+0

非常感謝!這是完美的,代碼與我之前嘗試的代碼並不太遠 –