我正在嘗試從一個採樣率向更高採樣率重新採樣信號(聲音採樣)。 不幸的是,它需要某種過濾器,因爲似乎出現了一些「別名」,並且我對過濾器不熟悉。這是我想出的:重新採樣一個聲音樣本,我使用哪個過濾器?
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])`。我對聲音處理知之甚少,不知道它是否足夠接近,但它會讓你一直忙碌,直到有人來了解誰是他們的東西:-)你也可能需要反鋸齒縮樣。 – 2010-12-09 00:06:00