一维高斯滤波
时间: 2023-07-27 12:05:59 浏览: 221
好的,以下是一个一维高斯滤波函数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100 //定义输入信号的长度
void gaussian_filter(double *input, double *output, int length, double sigma)
{
int i, j;
double h[length]; //定义滤波器系数数组
double sum, tmp;
//计算滤波器系数
for (i = 0; i < length; i++) {
tmp = i - length / 2;
h[i] = exp(-tmp * tmp / (2 * sigma * sigma)) / (sqrt(2 * M_PI) * sigma);
}
//进行高斯滤波
for (i = 0; i < length; i++) {
sum = 0;
for (j = 0; j < length; j++) {
if (i+j-length/2 >= 0 && i+j-length/2 < length) {
sum += input[j] * h[i+j-length/2];
}
}
output[i] = sum;
}
}
int main()
{
double input[N], output[N];
int i;
//生成测试输入信号
for (i = 0; i < N; i++) {
input[i] = 0.5 * sin(2 * M_PI * 50 * i / 1000) + 0.5 * sin(2 * M_PI * 150 * i / 1000);
}
//进行高斯滤波
gaussian_filter(input, output, N, 10);
//输出滤波后的信号
for (i = 0; i < N; i++) {
printf("%f\n", output[i]);
}
return 0;
}
```
该函数的输入参数包括一个指向输入信号数组的指针,一个指向输出信号数组的指针,输入信号的长度,以及高斯滤波的标准差sigma。函数首先计算高斯滤波器的系数,然后将输入信号与滤波器卷积得到输出信号。在main函数中,我们生成了一个包含50Hz和150Hz正弦波的测试输入信号,并进行了高斯滤波,最后输出了滤波后的信号。
相关推荐
![](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)