相位调制合成中的裂纹源

时间:2015-08-21 18:45:01

标签: synthesis phase modulation

我试图制作一个基于波表和DDS的简单相位调制合成器。我有一个12位波表,包含4096个正弦波样本,我使用32位相位累加器。

实现我的想法是有效的,但似乎有许多与调制相位调制深度相关的低级别噼啪声。我这样生成我的样本:

Modulator = Modulation*SineWavetable[PhaseAc2>>20];
Sample = SineWavetable[(PhaseAc1 + Modulator)>>20];

我认为可以通过调制"调制"来产生裂纹。参数有点太硬/快但这似乎不是问题的原因。任何人都可以告诉我这种相位调制方法的潜在问题吗?

一如既往,谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,类型转换在这里是一个非常重要的事情!我试图将int32_t(调制器)与uint32_t(PhaseAc1)混合使用,这会导致奇怪的溢出问题,其中相位会暂时出现故障,从而导致听觉问题。相位累加器是在数组索引部分之外计算的,并且在单个变量处移位,如下所示:

Modulator = Modulation*SineWavetable[PhaseAc2>>20];
PhaseAc1 += (int32_t)Modulator;
Sample = SineWavetable[(PhaseAc1 + Modulator)>>20];