0

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

实现我的想法是可行的,但它似乎有很多与调制相位调制深度相关的低级裂纹。我正在像这样生成我的样本:

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

我认为可以通过将“调制”参数调制得太硬/太快来产生噼啪声,但这似乎不是问题的原因。有人能告诉我这种相位调制方法的潜在问题吗?

一如既往,谢谢!

4

1 回答 1

0

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

Modulator = Modulation*SineWavetable[PhaseAc2>>20];
PhaseAc1 += (int32_t)Modulator;
Sample = SineWavetable[(PhaseAc1 + Modulator)>>20];
于 2015-08-21T20:31:54.710 回答