1
我一直在經歷堆棧溢出的帖子,但我不理解如何從麥克風中抓取我的音頻中去除嘶嘶聲。從16位PCM中刪除C++中的音頻噪聲(嘶嘶聲)
我實現了一個簡單的低通濾波器,但我必須做錯了什麼。
unsigned short *buf = "audio data in PCM format";
double out_sample = 0;
int sample_size = "number of samples of audio";
for (int n = 0; n < sample_size/2; n++)
{
out_sample = (out_sample * 90 + buf[n] * 10)/100;
buf[n] = (unsigned short) out_sample;
}
以上產生真正損壞的音頻。
我知道我需要對PCM數據做一個低通濾波器。任何人都可以闡明我做錯了什麼。
在此先感謝。
爲什麼'sample_size/2'?我也不熟悉你提供的LPF,因爲'out_sample'取決於你以前的所有樣本。您還應該意識到,您在時域內而非頻域內「移動」。 – Logman
您擁有的是具有緩慢指數衰減的IIR(無限脈衝響應)濾波器。這是一個非常沉重的LPF。另外,數據的結構需要更清楚。 sample_size/2表明你正在處理可能是交錯的立體聲數據,這是PCM的典型特徵,但是你的代碼沒有顯示出來。這會讓事情變得非常糟糕。 – doug
此外,還有免費的應用程序會向您顯示麥克風噪音的頻譜。你應該根據這個值來支付你的LPF。此外,可以在相對安靜的時段應用動態增益,以最大限度地減少噪音。這些都不是很難,但你可能應該得到一些工具來生成所需的過濾器。 Octave或Matlab擅長這一點。 – doug