我已經創建了一個簡單的切比雪夫低通濾波器,基於本網站生成的係數:http://www-users.cs.york.ac.uk/~fisher/mkfilter/,我正在使用它來濾除16kHz採樣率音頻信號之前的4kHz以上的頻率,然後下采樣到8kHz。這裏是我的代碼(這是C#,但這個問題不是特定於C#的,可以隨意使用不同語言的其他語言)。Chebyshev LPF引入噪聲
/// <summary>
/// Chebyshev, lowpass, -0.5dB ripple, order 4, 16kHz sample rte, 4kHz cutoff
/// </summary>
class ChebyshevLpf4Pole
{
const int NZEROS = 4;
const int NPOLES = 4;
const float GAIN = 1.403178626e+01f;
private float[] xv = new float[NZEROS+1];
private float[] yv = new float[NPOLES + 1];
public float Filter(float inValue)
{
xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4];
xv[4] = inValue/GAIN;
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3]; yv[3] = yv[4];
yv[4] = (xv[0] + xv[4]) + 4 * (xv[1] + xv[3]) + 6 * xv[2]
+ (-0.1641503452f * yv[0]) + (0.4023376691f * yv[1])
+ (-0.9100943707f * yv[2]) + (0.5316388226f * yv[3]);
return yv[4];
}
}
爲了測試它,我使用Audacity創建了一個從20Hz到8kHz的正弦波「啁啾聲」。測試信號是這樣的:
對其進行篩選後,我得到:
波形顯示過濾器確實減少4kHz以上頻率的幅度,但我有一個噪音加在我的信號上。這似乎是我嘗試實施的過濾器類型中的任何一種(例如巴特沃斯,凸起的餘弦等)。
上午我做錯了什麼,或者說這些過濾器只需在其他頻率引入假象?如果我使用平均每對樣本的樸素方法進行下采樣,我根本不會得到這種噪聲(但顯然混疊更糟糕)。
它是C#,所以它們將包含零。 – 2011-05-05 11:04:27
好的(標籤會有幫助) – Bart 2011-05-05 11:23:02
將編輯問題。不想標記C#,因爲我會用任何編程語言回答 – 2011-05-05 11:27:32