2013-08-27 24 views
0

假設我有2個數組,buffer1和buffer2。這兩個數組的數據都完全相同,並且長度相同。我可以添加這些2個陣列的結果放在一起,像這樣:通過添加數組來實現延遲效果c

for (n=0; n<100; n++) 
    buffer3[n] = (buffer1[n] + buffer2[n]); 

說這些緩衝區包含的數據點組成的正弦波。如果我能夠將一個陣列中的點移動180度並再次添加它們,這會導致取消對嗎? 我認爲在90到180度之間的點會導致合成正弦波幅度變小,直到最終消除 - 如果您願意,可以使用濾波效果。

我試圖用下面的代碼做到這一點,但問題是當n在51那麼[n + 50]是一個值101 ...這是無效的權利?

for (n=0; n<100; n++) 
    buffer3[n] = (buffer1[n] + buffer2[n+50]); 

我覺得一個循環緩衝器或類似的東西需要在這裏使用的,但林不知道怎麼回事,我的理解它與n會出界做我會把它整合到上面的代碼,但就是我不知道如何達到我想要的;可能嗎?

+0

當您執行'n + 50'時,模運算會有幫助嗎? – patrickvacek

+0

是的,這是可能的! – Jiminion

回答

1
int offset = 50; 
for (n=0; n<100; n++){     
     buffer3[n] = (buffer1[n] + buffer2[(n+offset)%100]); 
+0

是的,它的作品謝謝!你會介意解釋它爲什麼起作用,我已經看到模數用於查看數字是奇數還是偶數,但我真的不知道這裏發生了什麼?謝謝 – user2459764

+0

val%100只會輸出一個從0到99的值。它返回val除以100的餘數。所以如果val = 105那麼餘數是105-100 = 5.如果val是305,則餘數是305- 100-100-100 = 5(再次)。 val =(val/100)* 100 + val%100; (除以整數除以舍入)。 – Jiminion

+0

好吧,我現在得到它,謝謝吉姆! – user2459764