我正在尝试在复古计算机上播放样本。硬件非常有限,所以我不得不使用软件 PWM 作为我的主要播放方法。平台的限制意味着我不能使用特别高的 PWM 频率,因此产生的样本分辨率不太可能超过 5 或 6 位。为了明确起见,让我们说我的 PWM 频率约为 20 kHz。
现在,我的硬件在内存方面也非常有限。以 20 kHz 录制的样本并不实用。作为一种妥协方式,我尝试使用以 5 或 10 kHz 记录的样本,即在比我的 PWM 频率低 2 或 4 倍的频率上。我需要插值,但复杂的处理基本上是不可能的。我尝试了简单的“上采样”(即在现有样本之间插入零),它产生了很多振铃伪影。我还尝试了“零阶保持”和“一阶保持”,如各种上采样方案的相对优点是什么?坦率地说,我不能轻易地在后两者之间做出选择。两种方式都比简单地插入零要好,但是两种情况下的振铃仍然很大。
显然,需要更复杂的过滤。我的问题是软件 PWM 很贵而且我的电脑很弱。所有计算都必须在 8 位寄存器中进行。没有硬件乘法/除法(通过移位完成的乘法/除法除外)。FIR 滤波器可能可以通过使用查找表来实现,但我认为 3-5 个滤波器抽头是合理的。
所以,问题是,对于我非常有限的平台,哪些过滤方法可能会给我带来最大的收益和最少的振铃?我应该尝试使用经过调整的 FIR 滤波器来获得 8 位友好数字,还是应该做一些完全不同的事情?您认为哪些过滤策略可能在有限的计算环境中最有效?
就我的功课而言,我确实阅读了上面引用的帖子以及与之相关的其他几篇帖子。我在谷歌上做了一些阅读。我了解如何构建移动平均线,包括多项式(=“higher order hold”),但讨论似乎表明它们不是最佳选择。FFT 是不可能的。我目前正在使用各种 3-5 抽头 FIR 滤波器,它们似乎可以工作,但大约是我可以通过计算完成的最大值。我尝试实现 CIC 过滤器(但未能获得不错的结果)。我还没有看过 IIR 滤波器。所以,基本上,我问这个问题是希望你能帮助我专注于更具体的事情,也许是对我来说更有可能有用的过滤器系列,甚至可能是特定的过滤器。

