我正在尝试将 44100 Hz 上采样到 96000 Hz,我已经试过了。
sum1 = mPastWavBuffer[(int)mOffset];
sum2 = mPastWavBuffer[(int)mOffset+1];
double sum = (sum1 + (sum2-sum1)) * (mOffset-(int)mOffset);
mOffset 是一个 double 值,包含递增的步进因子以移动 44100 Hz 样本文件并使其达到 96000 Hz。此线性插值取自 Wiki Linear Interpolation from two known points但这并没有给我想要的结果,这听起来很糟糕。
我在这里用错了吗?或者如果这不是使用它的方式,我应该如何处理这个公式??
问候,摩根
最佳答案
这可能是因为线性插值并不是您真正想要的。如果您只是将采样率加倍,它可能工作得相当好,但如果您使用非整数因子,如果您得到好的结果,我会感到惊讶。
我建议要么尝试高阶多项式插值,要么在频率空间中做一些事情(第一个比第二个更容易)。
编辑:从评论中我还注意到您的总和计算已关闭:
double sum = sum1 + (sum2-sum1) * (mOffset-(int)mOffset);
就是你想要的。
关于c++ - 将音频从 44100 上采样到 96000 Hz 和线性插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822575/