我在尋找一個.net windows窗體項目的數字低通濾波器代碼/庫/類,最好用c,C++或c#編寫。我可能需要設置極點數,係數,窗口等等。我不能使用任何可用的gpl'd代碼,也不知道那裏有什麼。任何建議感激。低通濾波器軟件?
Q
低通濾波器軟件?
3
A
回答
19
這是我爲近期項目編寫的巴特沃斯低通濾波器。
它有一些神奇的數字作爲常數給我。如果你能弄清楚如何用你的極點,係數等來創建幻數,那麼這可能會有所幫助。
using System;
using System.Collections.Generic;
using System.Text;
namespace Filter
{
public class ButterworthLowPassFilter
{
//filter fc = 2hz, fs = 10hz
private const int LowPassOrder = 4;
private double[] inputValueModifier;
private double[] outputValueModifier;
private double[] inputValue;
private double[] outputValue;
private int valuePosition;
public ButterworthLowPassFilter()
{
inputValueModifier = new double[LowPassOrder];
inputValueModifier[0] = 0.098531160923927;
inputValueModifier[1] = 0.295593482771781;
inputValueModifier[2] = 0.295593482771781;
inputValueModifier[3] = 0.098531160923927;
outputValueModifier = new double[LowPassOrder];
outputValueModifier[0] = 1.0;
outputValueModifier[1] = -0.577240524806303;
outputValueModifier[2] = 0.421787048689562;
outputValueModifier[3] = -0.0562972364918427;
}
public double Filter(double inputValue)
{
if (this.inputValue == null && this.outputValue == null)
{
this.inputValue = new double[LowPassOrder];
this.outputValue = new double[LowPassOrder];
valuePosition = -1;
for (int i=0; i < LowPassOrder; i++)
{
this.inputValue[i] = inputValue;
this.outputValue[i] = inputValue;
}
return inputValue;
}
else if (this.inputValue != null && this.outputValue != null)
{
valuePosition = IncrementLowOrderPosition(valuePosition);
this.inputValue[valuePosition] = inputValue;
this.outputValue[valuePosition] = 0;
int j = valuePosition;
for (int i = 0; i < LowPassOrder; i++)
{
this.outputValue[valuePosition] += inputValueModifier[i] * this.inputValue[j] -
outputValueModifier[i] * this.outputValue[j];
j = DecrementLowOrderPosition(j);
}
return this.outputValue[valuePosition];
}
else
{
throw new Exception("Both inputValue and outputValue should either be null or not null. This should never be thrown.");
}
}
private int DecrementLowOrderPosition(int j)
{
if (--j < 0)
{
j += LowPassOrder;
}
return j;
}
private int IncrementLowOrderPosition(int position)
{
return ((position + 1) % LowPassOrder);
}
}
}
基思
3
好吧,我發現瞭如何讓你使用的係數。我下載八度窗戶和跑黃油命令(如在MatLab中)是這樣的:
並[b,A] =黃油(3,0.4,「低」)
現在我可以使用此代碼與其他fs和fc參數。
相關問題
- 1. 低通濾波器
- 2. NAudio低通濾波器
- 3. JAVA:低通濾波器
- 4. 低通濾波器的Android
- 5. 低/高通濾波器
- 6. 測試低通濾波器
- 7. 通過Octave創建低通濾波器
- 8. 低通和高通濾波器?
- 9. MATLAB上的低通濾波器Butterworth濾波器
- 10. 我需要低通濾波器Sensor.TYPE_ROTATION_VECTOR嗎?
- 11. Matlab低通濾波器使用fft
- 12. 低通濾波器和採樣頻率
- 13. 二階低通濾波器算法
- 14. 低通濾波器不工作
- 15. 在matlab中實現低通濾波器
- 16. MATLAB中圖像的低通濾波器?
- 17. 切比雪夫低通濾波器?
- 18. opencv中的低通濾波器
- 19. OpenCL中的低通濾波器
- 20. 用低通濾波器擴展Karplus-Strong
- 21. C中的低通濾波器
- 22. 加速度傳感器低通濾波
- 23. Python中的低通濾波器
- 24. MATLAB:應用低通濾波器,圖像
- 25. 如何實施低通濾波器?
- 26. iPhone中的低通濾波器
- 27. 極低頻濾波器MATLAB
- 28. R - 時間序列的非線性濾波器 - 濾波器,低通濾波器還是迴路?
- 29. 載波調製和解調中的低通濾波器
- 30. ButterWorth低通濾波器(BLPF)不正確地過濾圖像(C++)
謝謝,這正是我所需要的。但我需要fc = 4hz,fs = 20hz的係數,並且無法找到表格或計算器。 – 2008-12-05 17:24:25
你看過這裏嗎? http://en.wikipedia.org/wiki/Butterworth_filter – 2008-12-05 21:16:10