写一段数字滤波算法 C语言
时间: 2023-06-03 12:07:44 浏览: 111
代码,可以实现平均滤波、中值滤波和高斯滤波。
以下是C语言实现平均滤波、中值滤波和高斯滤波的代码示例:
// 平均滤波
float avg_filter(float* data, int len)
{
float sum = 0.0;
for (int i = 0; i < len; i++)
{
sum += data[i];
}
return sum / len;
}
// 中值滤波
float median_filter(float* data, int len)
{
float tmp;
int i, j, k;
for (i = 0; i < len - 1; i++)
{
k = i;
for (j = i + 1; j < len; j++)
{
if (data[k] > data[j])
{
k = j;
}
}
if (k != i)
{
tmp = data[i];
data[i] = data[k];
data[k] = tmp;
}
}
return data[len / 2];
}
// 高斯滤波
float gaussian_filter(float* data, int len)
{
float sum = 0.0;
for (int i = 0; i < len; i++)
{
sum += data[i];
}
float avg = sum / len;
sum = 0.0;
for (int i = 0; i < len; i++)
{
sum += (data[i] - avg) * (data[i] - avg);
}
float std_dev = sqrt(sum / len);
sum = 0.0;
for (int i = 0; i < len; i++)
{
sum += data[i] * exp(-(data[i] - avg) * (data[i] - avg) / (2 * std_dev * std_dev));
}
return sum / len;
}
// 调用示例
void main()
{
float data[] = {1.2, 2.4, 5.6, 7.8, 5.5};
int len = sizeof(data) / sizeof(data[0]);
float result;
// 平均滤波
result = avg_filter(data, len);
printf("平均滤波结果:%.2f\n", result);
// 中值滤波
result = median_filter(data, len);
printf("中值滤波结果:%.2f\n", result);
// 高斯滤波
result = gaussian_filter(data, len);
printf("高斯滤波结果:%.2f\n", result);
}
阅读全文