修复波形文件中的整数溢出

信息处理 失真
2022-02-15 00:10:31

我从我的 DAW 录制的这段录音显示出一种奇怪的失真形式:信号在许多地方被削波,但不是简单地被削波(信息丢失),信号的整数值不知何故溢出并存储在文件中。它导致了更糟糕的失真,但信息仍然存在,作为信号另一侧的镜像。

这在查看波形时很明显。您可以清楚地分辨出信号何时出现削波,因为波的其余部分在峰值之间可见。波形

我应该如何修复这个文件?我对 SOX、ffmpeg、C 语言、SuperCollider 和其他各种工具非常熟悉。

1个回答

你所拥有的是“环绕”和一个糟糕的案例。

不过,这很容易修复。让我们打电话给您的样品x[n]和你的最大振幅xmax,所以你的信号目前有界[xmax,+xmax]

逐个采样地检查波形。每当您看到大于最大振幅的跳跃时,请添加或减去最大振幅的两倍以将其恢复到原来的位置。

就像是

for (i = 1; i<n; i++)
{
   sampleDiff = x[i]-x[i-1];
   if (sampleDiff > xmax) { x[i] = x[i] - 2*xmax; }
   if (sampleDiff < -xmax) { x[i] = x[i] + 2*xmax;}
}

确保您使用的数据类型至少可以容纳 [2xmax,+2xmax],这很可能不是原始数据类型。还要确保你没有从“包装”区域开始,即 x[0] 需要很好