Audio 8位音频采样到16位

Audio 8位音频采样到16位,audio,signal-processing,quantization,8-bit,Audio,Signal Processing,Quantization,8 Bit,这是我的“周末”爱好问题 我有一些深受喜爱的单周期波形,来自经典合成器的ROM 这些是8位样本(256个可能值) 因为它们只有8位,所以噪声层相当高。这是由于量化误差造成的。量化误差很奇怪。它把所有的频率都弄乱了一点 我想把这些循环,并使“干净”的16位版本。(是的,我知道人们喜欢脏版,所以我会让用户在脏版和干净版之间插入他们喜欢的内容。) 这听起来不可能,对吧,因为我已经永远失去了低8位,对吗?但这件事在我脑海里已经有一段时间了,我很确定我能做到 请记住,这些是单周期波形,只是为了回放而不断重

这是我的“周末”爱好问题

我有一些深受喜爱的单周期波形,来自经典合成器的ROM

这些是8位样本(256个可能值)

因为它们只有8位,所以噪声层相当高。这是由于量化误差造成的。量化误差很奇怪。它把所有的频率都弄乱了一点

我想把这些循环,并使“干净”的16位版本。(是的,我知道人们喜欢脏版,所以我会让用户在脏版和干净版之间插入他们喜欢的内容。)

这听起来不可能,对吧,因为我已经永远失去了低8位,对吗?但这件事在我脑海里已经有一段时间了,我很确定我能做到

请记住,这些是单周期波形,只是为了回放而不断重复,所以这是一个特例。(当然,合成器会做各种各样的事情来让声音变得有趣,包括封套、调制、滤波器交叉衰落等。)

对于每个单独的字节样本,我真正知道的是它是16位版本中256个值中的一个。(想象一下相反的过程,16位值被截断或四舍五入为8位。)

我的评估函数是试图得到最小的噪声地板。我应该能够判断一个或多个FFT

详尽的测试可能会花费很长时间,所以我可以在第一次通过时采用较低的分辨率。或者我只是随机推送随机选择的值(在保持相同8位版本的已知值范围内),然后进行计算并保持更干净的版本?或者我能做些更快的事吗?当搜索空间中的其他地方可能有更好的最小值时,我是否有陷入局部最小值的危险?我在其他类似的情况下也遇到过这种情况

我是否可以通过查看相邻的值进行初步猜测



编辑:一些人指出,如果我取消新波形采样到原始波形的要求,问题会更容易解决。没错。事实上,如果我只是在寻找更清晰的声音,那么解决方案很简单。

您可以将现有的8位样本放入新16位样本的高阶字节中,然后使用低阶字节在每个原始8位样本之间创建一些新的16位数据点

这将使用几个新样本在每个原始8位样本之间连接一条16位直线。这听起来比你现在听到的要安静得多,这是两个原始样本之间突然的8位跳跃


你也可以尝试应用一些。

按照你问题中的方法,我建议研究爬山算法等

有更多关于它的信息,侧框有到其他可能更合适的算法的链接


人工智能就像炼金术——我们从未达到最终目标,但一路上涌现出了很多好东西。

好吧,我希望一些FIR滤波(IIR,如果你真的需要处理周期,但FIR可以提供更好的结果而不失稳)来清除噪声。你必须用它来获得你想要的效果,但基本的问题是平滑通过8位分辨率采样产生的音频中的锐利边缘。我会对音频的中心频率做一个大范围的调整,然后做一个低通滤波器,然后听录音,确保我选择的滤波器不会让它听起来“平坦”

虽然这很难,但你能做的只有这么多,低8位丢失了,你能做的最好的就是近似它

几乎不可能消除看起来像你的信号的噪音。如果你开始在你的频带上使用tweeking,它会去除你感兴趣的信号

对于上采样,因为您已经在使用FFT,所以可以将零添加到频域信号的末尾,然后执行逆FFT。这完全保留了原始信号的频率和相位信息,尽管它将相同的能量传播到更多样本上。如果您先将其8位转换为16位采样,这不会是一个太大的问题。但是在进行转换之前,我通常通过一个整数增益因子来提升它

皮特

编辑: 评论有点长了,所以我会转移一些到答案上来

FFT输出中的峰值是量化引起的谐波尖峰。我倾向于以不同于噪音地板的方式来看待它们。你可以像某人提到的那样抖动,消除谐波尖峰的振幅,使噪声层变平,但是你会在噪声层平坦的部分失去所有的信号到噪声。就FFT而言。使用该方法进行插值时,它会保留相同的能量并分布在更多的采样上,这会降低振幅。因此,在进行反向运算之前,通过乘以增益因子,为信号提供更多能量

信号是简单/复杂的正弦波,还是有硬边?i、 三角形,方波,等等。我假设它们从一个周期到另一个周期是连续的,这有效吗?如果是这样,您还可以通过增加馈送到FFT的波形周期数来提高FFT分辨率,以更精确地定位频率。如果您能够准确地识别所使用的频率,假设它们有些离散,那么您可能能够完全重新创建预期的信号

16位到8位通孔截断要求将产生与原始源不匹配的结果。(从而使找到最佳答案变得更加困难。)通常,您会通过尝试“获得最接近的匹配”(即舍入到最接近的数字)来生成定点波形(中继是一种地板操作)。这很可能是它们最初产生的方式。添加0.5(在本例中,0.5是128)然后中继输出将允许您生成更精确的结果。如果不担心的话,那好吧