Csharp实现对一维信号进行高斯带通滤波,并封装成类
时间: 2023-06-11 10:09:43 浏览: 59
下面是使用C#语言实现一维高斯带通滤波的代码,并封装成类:
```csharp
using System;
public class GaussianBandPassFilter
{
private double[] kernel;
public GaussianBandPassFilter(double stdDev, int kernelSize)
{
this.kernel = new double[kernelSize];
double sum = 0.0;
int midpoint = kernelSize / 2;
for (int i = 0; i < kernelSize; i++)
{
double x = i - midpoint;
kernel[i] = Math.Exp(-(x * x) / (2 * stdDev * stdDev));
sum += kernel[i];
}
for (int i = 0; i < kernelSize; i++)
{
kernel[i] /= sum;
}
}
public double[] Filter(double[] signal)
{
int kernelSize = kernel.Length;
int signalSize = signal.Length;
int midpoint = kernelSize / 2;
double[] filteredSignal = new double[signalSize];
for (int i = midpoint; i < signalSize - midpoint; i++)
{
double sum = 0.0;
for (int j = 0; j < kernelSize; j++)
{
sum += kernel[j] * signal[i - midpoint + j];
}
filteredSignal[i] = sum;
}
return filteredSignal;
}
}
```
在上面的代码中,`GaussianBandPassFilter`类包含了两个成员:
- `kernel`:存储高斯带通滤波器的卷积核;
- `GaussianBandPassFilter(double stdDev, int kernelSize)`:构造函数,用于初始化高斯带通滤波器的卷积核;
- `Filter(double[] signal)`:滤波方法,用于对输入信号进行滤波。
在构造函数中,我们使用标准差和卷积核大小来计算高斯函数,并将其存储在`kernel`数组中。在`Filter`方法中,我们使用卷积运算对输入信号进行滤波,并将结果存储在`filteredSignal`数组中。然后,我们返回`filteredSignal`数组作为输出。
使用该类的示例代码:
```csharp
double[] signal = new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
double stdDev = 2.0;
int kernelSize = 5;
GaussianBandPassFilter filter = new GaussianBandPassFilter(stdDev, kernelSize);
double[] filteredSignal = filter.Filter(signal);
for (int i = 0; i < filteredSignal.Length; i++)
{
Console.WriteLine(filteredSignal[i]);
}
```
在上面的示例中,我们定义了一个输入信号`signal`,并使用标准差和卷积核大小创建了一个`GaussianBandPassFilter`实例。然后,我们使用`Filter`方法对输入信号进行滤波,并将结果存储在`filteredSignal`数组中。最后,我们遍历`filteredSignal`数组并打印每个元素的值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)