圖形和音頻編輯和處理軟件通常包含稱爲「高通濾波器」和「低通濾波器」的功能。它們究竟做了什麼,以及實現它們的算法是什麼?什麼是高通和低通濾波器?
回答
百科:
這些 「高」, 「低」,以及 「帶」 的術語是指頻率。在高通中,您嘗試去除低頻。在低通中,您嘗試刪除高位。帶通中,您只允許保持連續的頻率範圍。
選擇截止頻率取決於您的應用。對這些濾波器進行編碼既可以通過模擬RC電路來完成,也可以通過對基於時間的數據進行傅立葉變換來完成。有關代碼示例,請參閱wikipedia文章。
它們通常是傾向於傳遞部分模擬信號的電路。高通傾向於傳輸更多的高頻部分,而低通傾向於傳遞更多的低頻部分。
它們可以用軟件模擬。例如,步行平均值可以用作低通濾波器,而步行平均值和輸入值之間的差值可以用作高通濾波器。
高通濾波器讓高 - 頻率(詳細/本地信息)通。
低通過濾器讓低 - 頻率(粗/粗/全球信息)通。
這裏是你使用卷積如何實現低通濾波器:
double[] signal = (some 1d signal);
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter
double[] result = new double[signal.Length + filter.Length + 1];
// Set result to zero:
for (int i=0; i < result.Length; i++) result[i] = 0;
// Do convolution:
for (int i=0; i < signal.Length; i++)
for (int j=0; j < filter.Length; j++)
result[i+j] = result[i+j] + signal[i] * filter[j];
注意,例如被極度簡化。它不會進行範圍檢查,也不會正確處理邊緣。使用的濾波器(box-car)是一個特別糟糕的低通濾波器,因爲它會導致很多僞像(振鈴)。閱讀濾波器設計。
您也可以在頻域中實現濾波器。下面介紹如何使用FFT實現高通濾波器:
double[] signal = (some 1d signal);
// Do FFT:
double[] real;
double[] imag;
[real, imag] = fft(signal)
// Set the first quarter of the real part to zero to attenuate the low frequencies
for (int i=0; i < real.Length/4; i++)
real[i] = 0;
// Do inverse FFT:
double[] highfrequencysignal = inversefft(real, imag);
此外,這是簡化的,但您明白了。代碼看起來不像數學那麼複雜。
過濾描述了處理數據的行爲,這種處理方式對數據中的不同頻率應用不同級別的衰減。
高通濾波器對高頻應用最小衰減(即保持電平不變),但對低頻應用最大衰減。
低通濾波器是相反的 - 通過對高頻進行衰減,它不會對低頻施加衰減。
有許多不同的過濾算法被使用。最簡單的兩個可能是有限脈衝響應濾波器(又名FIR濾波器)和無限脈衝響應濾波器(又名IIR濾波器)。
FIR濾波器的工作原理是保持一系列樣本並將每個樣本乘以固定係數(基於系列中的位置)。每個這些乘法的結果都是累積的,並且是該樣本的輸出。這被稱爲Multiply-Accumulate - 在專用的DSP硬件中,有一個特定的MAC指令可以做到這一點。
當下一個採樣被添加到系列的開始時,系列中最舊的採樣被刪除,並重復該過程。
濾波器的行爲是通過選擇濾波器係數來確定的。
圖像處理軟件經常提供的一種最簡單的過濾器是平均過濾器。這可以通過將FIR濾波器的所有濾波器係數設置爲相同的值來實現。
這裏是在C++中的低通濾波器,其在一個時間處理該信號一個樣本的超簡單的例子:
float lopass(float input, float cutoff) {
lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0]));
outputs[0]= lo_pass_output;
return(lo_pass_output);
}
這裏是幾乎同樣的事情,除了它的高通:
float hipass(float input, float cutoff) {
hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0]));
outputs[0]=hi_pass_output;
return(hi_pass_output);
}
- 1. 低通和高通濾波器?
- 2. 低/高通濾波器
- 3. 低通濾波器
- 4. 低和高通濾波的相位
- 5. C中的低通和高通濾波器#
- 6. 具有特定截止的低通和高通濾波器
- 7. 在C中實現簡單的高通和低通濾波器
- 8. 積分器和低通濾波器有什麼區別?
- 9. NAudio低通濾波器
- 10. JAVA:低通濾波器
- 11. 低通濾波器的Android
- 12. 低通濾波器軟件?
- 13. 測試低通濾波器
- 14. 正則和自適應低通濾波器有什麼區別?
- 15. 低通濾波器和採樣頻率
- 16. 通過Octave創建低通濾波器
- 17. MATLAB:在陣列中應用低通或高通濾波器
- 18. 如何使用dygraphs實現高通和低通濾波?
- 19. Butterworth高通濾波器,Matlab
- 20. 高通濾波器matlab
- 21. MATLAB上的低通濾波器Butterworth濾波器
- 22. 我需要低通濾波器Sensor.TYPE_ROTATION_VECTOR嗎?
- 23. Matlab低通濾波器使用fft
- 24. 二階低通濾波器算法
- 25. 低通濾波器不工作
- 26. 在matlab中實現低通濾波器
- 27. MATLAB中圖像的低通濾波器?
- 28. 切比雪夫低通濾波器?
- 29. opencv中的低通濾波器
- 30. OpenCL中的低通濾波器
非常酷的代碼示例。爲什麼在一種情況下卷積和FFT在另一種情況下? – dfrankow 2009-03-13 19:03:28
@dfrankow沒有特別的理由。只是爲了展示它在不同領域的外觀。更新了文字以反映這一點。謝謝。 – Hallgrim 2009-03-16 21:31:43