2013-08-27 42 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