X-N*_*N2O 5 c audio signal-processing filter sampling
我试图从一个采样率重新采样信号(声音样本)到更高的采样率.不幸的是,它需要某种过滤器,因为有些"混叠"似乎会发生,而且我不熟悉过滤器.这是我想出的:
int i, j, a, b, z;
a = 44100;
b = 8363;
// upsample by a
for(i = z = 0; i < samplen; i++)
for(j = 0; j < a; j++)
cbuf[z++] = sampdata[i];
// some filter goes here???
// downsample by b
for(j = i = 0; i < z; i += b)
buf[j++] = cbuf[i];
Run Code Online (Sandbox Code Playgroud)
新样本与原始样本非常相似,但它有一些噪音.你能告诉我我需要添加什么过滤器,最好是一些与该过滤器相关的代码吗?
原声:http://www.mediafire.com/? 9gnga1in52d6t4x重采样声音:http://www.mediafire.com/? x34h7ggk8n9k8z1
hot*_*aw2 11
除非采样率(源和目标)都远高于数据中的最高频率,否则不要使用线性插值.这是一个非常差的低通滤波器.
你想要的是一个插值低通滤波器,其阻带开始低于你正在处理的两个采样率的一半.实现这一点的常用方法是使用IIR滤波器和使用多相FIR滤波器进行上采样/下采样.如果您不需要实时性能,并且不想上采样/下采样,则窗口Sinc内插器也适用于此.这是Basic中的Windowed Sinc内插低通滤波器,转换成C应该是微不足道的.
如果你想使用IIR过滤,这里是biquad IIR过滤器的规范食谱.
如果您想要对音频重采样理论进行最佳解释,请参阅斯坦福CCRMA的重采样页面.
thk*_*ala 10
您是否考虑过使用专门的库,例如libsamplerate?
它非常便携,它由知道如何正确执行此类操作的人开发.即使您不直接使用它,您也可能会发现它实现的算法非常有趣.