-1

我正在使用NEXSYS A7 Board 制作吉他效果“踏板” 。为此,我购买了I2S2 PMOD并使用 Digilent 提供的示例代码成功启动并运行它。

目前,该设计是“直通”的,这意味着音频进入 FPGA 并立即输出。

我想知道存储数据的正确方法是什么,在这些数据上制作一些 DSP 来创建效果,然后将修改后的数据传输回 I2S2 PMOD。也许没有必要存储数据?也许我可以通过负责应用效果的 RTL 块传递它,然后简单地将修改后的数据传输出去?

4

1 回答 1

0

从评论整理并扩展。

对于现场表演踏板,您不想存储太多数据;通常为 10 毫秒或更短。从简单的事情开始:在一个环中存储 50 或 100 毫秒的数据(读取旧数据,存储新数据,inc 地址模内存大小)。变量 n 的输出 = Newdata = (传入样本 * 0.n + olddata * (1 - 0.n))。非常粗糙的混响或回声。

是的,环 = 环形缓冲区 FIFO。你会看到我的描述是一个非常粗略的环形缓冲区 FIFO 实现。

现在将其扩展为单独的读写指针。现在以不同的、谐波相关的速率读写……你有一个音高变换器。指针交叉时出现故障。

想办法隐藏这些故障,很快你就可以发出 Autotune 从那首血腥的雪儿歌曲开始添加到大多数现代音乐中的蹩脚噪音。(这需要严重的 DSP :称为插值滤波器的东西可能是最简单的方法。暂时忍受故障)

顺便说一句,如果我对失真效果感兴趣,可以通过简单地将输入数据乘以一个常数来完成吗?

  • 乘以一个常数是……增益。

  • 将信号本身相乘就是对其进行平方……也就是二次谐波失真或 2HD(它会在输入中的每个音调的八度音阶上产生分量)。

  • 将信号与 2HD 相乘就是将其立方化……也就是 3HD,产生的分量是八度音阶以上的完美五分之一。

  • 将 2HD 乘以 2HD 是四次方……也就是 4HD,产生高 2 个八度音阶的分量,或者比五度高出一个完美的四度。

  • 将信号乘以 4HD 以产生 5HD ...... 依此类推,可能是第 7 个。另请注意,这些组件的水平会急剧下降;您可能希望增加超过 2HD 的增益,乘以 4(= 左移 2 位)作为起点,然后根据需要增加或减少。

  • 现在将它们中的每一个乘以可变增益并混合它们(混合是简单的加法)以添加尽可能多的失真分量......不要忘记添加原始信号!

还有其他添加失真的方法。尝试简单地将所有高于 0.25 的信号饱和到 0.25,以及所有低于 -0.25 到 -0.25 的信号,也就是削波。听起来很讨厌,但在上面混合了一点,以获得嗡嗡声。

学习如何制作白噪声(伪随机数,通常来自 LFSR)。

将此乘以输入信号,并与上述混合或匹配,以获得一些模糊效果。

学习数字滤波(EQ 的低通、高通、带通),以及如何控制带有噪声或输入信号的滤波器,声音的世界向你敞开。

于 2022-01-31T13:31:14.093 回答