【问题标题】:Achieving a delay effect by adding arrays c通过添加数组 c 来实现延迟效果
【发布时间】:2013-08-27 13:37:00
【问题描述】:

假设我有 2 个数组,缓冲区 1 和缓冲区 2。这两个数组具有完全相同的数据并且长度相同。我可以像这样将这两个数组的结果相加:

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

假设每个缓冲区都包含构成正弦波的数据点。如果我能够将 1 个数组中的点移动 180 度并再次添加它们,这会导致取消对吗? 而且我认为 90 到 180 度之间的点会导致合成正弦波的幅度变低,直到最终抵消——如果你愿意的话,这是一种过滤效果。

我尝试使用以下代码执行此操作,但问题是当 n 为 51 时,[n + 50] 的值为 101...这是无效的吗?

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

我认为这里需要使用循环缓冲区或类似的东西,但我不确定如何将它集成到上面的代码中,我理解它与 n 越界但不能了解如何实现我想要的;有可能吗?

【问题讨论】:

  • 在您执行n+50 时,模运算会有所帮助吗?

标签: c arrays indexing


【解决方案1】:
int offset = 50;
for (n=0; n<100; n++){                   
        buffer3[n] = (buffer1[n] + buffer2[(n+offset)%100]);

【讨论】:

  • 是的,谢谢!您介意解释一下它为什么起作用吗,我已经看到用于查看数字是奇数还是偶数的模数,但我真的不知道这里发生了什么?谢谢
  • val%100 只会输出 0 到 99 之间的值。它返回 val 除以 100 的余数。因此,如果 val= 105,则余数为 105-100 = 5。如果 val 为 305,那么余数是 305-100-100-100 = 5(再次)。 val = (val/100)*100 + val%100; (除法是整数除法,没有四舍五入)。
  • 曾几何时,将第二个索引 n1 初始化为 50 然后执行 n1++; if (n1 &gt;= 100) n1 = 0; 是合理的,但如今,与简单地执行无条件取模运算,所以写的可能更好。
猜你喜欢
  • 2019-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多