搜索
bottom↓
回复: 0
打印 上一主题 下一主题

请问如何对一个单片机串口收到的模拟量数组,进行中值滤波?

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2024-8-16 21:03:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家感觉这个怎么样?

#include <stdio.h>

#define N 10  // 假设模拟量数组的大小
#define WINDOW_SIZE 3  // 中值滤波的窗口大小,这里为了简单起见,我们选择3

void sort(int *window, int size) {
    // 简单的冒泡排序
    for(int i = 0; i < size-1; i++) {
        for(int j = 0; j < size-1-i; j++) {
            if(window[j] > window[j+1]) {
                int temp = window[j];
                window[j] = window[j+1];
                window[j+1] = temp;
            }
        }
    }
}

int median_filter(int *input, int size) {
    int window[WINDOW_SIZE];
    for (int i = 0; i < size; i++) {
        // 为窗口填充数据
        // 对于数组的边界处理,这里简单地令窗口超出数组范围的部分等于边界值
        for(int j = 0; j < WINDOW_SIZE; j++) {
            int index = i + j - (WINDOW_SIZE / 2);
            if(index < 0) index = 0;  // 处理左边界
            if(index > size - 1) index = size - 1;  // 处理右边界
            window[j] = input[index];
        }
        
        sort(window, WINDOW_SIZE);  // 对窗口内的数据进行排序
        input[i] = window[WINDOW_SIZE / 2];  // 将中值作为滤波结果
    }
}

int main() {
    int data[N] = {1, 50, 52, 48, 49, 500, 51, 52, 49, 50};  // 示例模拟量数组
    printf("Original data: \n");
    for(int i = 0; i < N; i++) {
        printf("%d ", data[i]);
    }
    printf("\n");
   
    median_filter(data, N);  // 对数据进行中值滤波
   
    printf("Filtered data: \n");
    for(int i = 0; i < N; i++) {
        printf("%d ", data[i]);
    }
    printf("\n");
   
    return 0;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 07:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表