【发布时间】:2011-05-22 13:38:07
【问题描述】:
我正在尝试将信号(声音样本)从一个采样率重新采样到更高的采样率。 不幸的是,它需要某种过滤器,因为似乎会出现一些“混叠”,而且我不熟悉过滤器。这是我想出的:
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];
新样本与原始样本非常相似,但有一些噪音。 你能告诉我我需要添加什么过滤器,最好是一些与该过滤器相关的代码?
原声:http://www.mediafire.com/?9gnga1in52d6t4x 重采样声音:http://www.mediafire.com/?x34h7ggk8n9k8z1
【问题讨论】:
-
从简单的线性插值开始:不要将
cbuf[z]设置为sampdata[i],而是将其设置为sampdata[i] + (j/(double)a)(sampdata[i+1] - sampdata[i])。我对声音处理知之甚少,不知道这是否足够,但它会让你很忙,直到有人知道他们的东西:-)你可能还需要对下采样进行抗锯齿处理。
标签: c audio filter signal-processing sampling