我正在使用NEXSYS A7 Board 制作吉他效果“踏板” 。为此,我购买了I2S2 PMOD并使用 Digilent 提供的示例代码成功启动并运行它。
目前,该设计是“直通”的,这意味着音频进入 FPGA 并立即输出。
我想知道存储数据的正确方法是什么,在这些数据上制作一些 DSP 来创建效果,然后将修改后的数据传输回 I2S2 PMOD。也许没有必要存储数据?也许我可以通过负责应用效果的 RTL 块传递它,然后简单地将修改后的数据传输出去?
我正在使用NEXSYS A7 Board 制作吉他效果“踏板” 。为此,我购买了I2S2 PMOD并使用 Digilent 提供的示例代码成功启动并运行它。
目前,该设计是“直通”的,这意味着音频进入 FPGA 并立即输出。
我想知道存储数据的正确方法是什么,在这些数据上制作一些 DSP 来创建效果,然后将修改后的数据传输回 I2S2 PMOD。也许没有必要存储数据?也许我可以通过负责应用效果的 RTL 块传递它,然后简单地将修改后的数据传输出去?
从评论整理并扩展。
对于现场表演踏板,您不想存储太多数据;通常为 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 的低通、高通、带通),以及如何控制带有噪声或输入信号的滤波器,声音的世界向你敞开。