搜索
bottom↓
12
返回列表 发新帖
楼主: always123456

10种简单的数字滤波算法(C语言源程序)

  [复制链接]

出0入0汤圆

发表于 2014-11-1 13:33:54 | 显示全部楼层
谢谢分享。。。

出0入0汤圆

发表于 2014-11-1 13:40:19 | 显示全部楼层
10种简单的数字滤波算法(C语言源程序),学习了!mark

出0入0汤圆

发表于 2014-11-1 14:01:35 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2014-12-17 17:21:56 | 显示全部楼层
必须顶起来的说。。。。

出0入0汤圆

发表于 2014-12-29 20:29:14 | 显示全部楼层
实践出真知,不同项目用过不少不同的滤波算法,稳定能用就好,有这些理解指导更好了 谢谢分享

出0入0汤圆

发表于 2015-1-1 04:28:43 | 显示全部楼层
好東西!! 收下了~~~~~

出0入0汤圆

发表于 2015-1-1 05:36:34 来自手机 | 显示全部楼层
代码需要优化一下

出0入0汤圆

发表于 2015-1-1 08:18:58 | 显示全部楼层
学习一下!

出0入0汤圆

发表于 2015-1-1 10:44:25 | 显示全部楼层
没有用过,还是要顶一下。需加强这方面知识

出0入0汤圆

发表于 2015-1-1 17:23:32 | 显示全部楼层
一阶滞后滤波法

之前做一个东西显示电量的时候用过这种方式,终于知道这种滤波的名字了

出0入0汤圆

发表于 2015-1-20 19:31:50 | 显示全部楼层
真是好资料,学习到了很多,顶

出0入0汤圆

发表于 2015-1-24 15:48:11 | 显示全部楼层
很实用,学习了,

出0入0汤圆

发表于 2015-1-27 13:21:34 | 显示全部楼层
说的挺好的。。 要是有fir 这么简单的教程就好了

出0入0汤圆

发表于 2015-1-27 13:24:08 | 显示全部楼层
收藏,学习了

出0入0汤圆

发表于 2015-1-28 18:04:35 | 显示全部楼层
非常感谢!!!

出0入0汤圆

发表于 2015-1-28 19:40:57 | 显示全部楼层
记号 备用

出0入0汤圆

发表于 2015-1-28 21:39:53 | 显示全部楼层
我之前用的是平均值滤波,但是效果不是很好

出50入0汤圆

发表于 2015-1-28 21:49:35 | 显示全部楼层
受教了!!!

出0入0汤圆

发表于 2015-7-11 09:14:01 | 显示全部楼层
我需要学习卡尔曼滤波

出0入0汤圆

发表于 2015-7-11 21:11:33 | 显示全部楼层
学习了, 谢谢楼主.

出0入0汤圆

发表于 2015-7-27 09:26:25 | 显示全部楼层
本帖最后由 Kwangsi 于 2015-7-27 09:30 编辑
go2deathward 发表于 2014-4-8 14:01
呵呵,中位值滤波,为什么要排序?简单的东西,复杂化了。中位值无非就是去掉最大最小值而已,排序太麻烦了 ...


事实上 就算是你这个做法还有 很大的提升空间,

单片机本身资源就有限,而且很多情况下要求实时
如果按教科书的算法去做 那就该吃药了

出0入0汤圆

发表于 2015-8-10 11:39:05 | 显示全部楼层
贴一个我的代码给大家

电路有市电 过零点检测
每次过零 启动150us的 TIMER1_ISR 中断 在3750 us开始,每隔150us采集一次市电的 ADC 以检测用的市电是110v还是220V 同时检测一个0.1R的ADC ,市电的 ADC *16 /0.R的ADC 连续采样10次 去掉最大值和最小值。

void TIMER1_ISR (void) interrupt 3 //using 1
{
    //150us
    //GPIO2 ^= BIT3;//GPIO19
    //GPIO0 ^= BIT2;
    //++electrical_level_timer;//t2_count2
    switch(++electrical_level_timer)
    {
        case 1:
            TRIAC_OFF;  //bidirectional triode thyristor
            break;

        case 24:
            electric_supply_0p1R_adc_max = 0x0000;
            electric_supply_0p1R_adc_min = 0xFFFF;
            electric_supply_0p1R_adc_sum = 0x0000;
            break;

        case 25://150*25=3750
        case 26://150*26=3900
        case 27://150*27=4050
        case 28://150*28=4200
        case 29://150*29=4350
        case 30://150*30=4500
        case 31://150*31=4650
        case 32://150*32=4800
        case 33://150*33=4950
            electric_supply_voltage_adc = ADC1_GetConversionValue(2);//adc 220v or 110v
            electric_supply_voltage_adc = (electric_supply_voltage_adc << 4);
            electric_0p1R_adc = ADC1_GetConversionValue(0);//0.1R
            electric_supply_0p1R_adc = (electric_supply_voltage_adc) / electric_0p1R_adc;

            if(electric_supply_0p1R_adc_max < electric_supply_0p1R_adc)
            {
                electric_supply_0p1R_adc_max = electric_supply_0p1R_adc;
            }
            else if(electric_supply_0p1R_adc_min > electric_supply_0p1R_adc)
            {
                electric_supply_0p1R_adc_min = electric_supply_0p1R_adc;
            }

            electric_supply_0p1R_adc_sum += electric_supply_0p1R_adc;
#if 0
            Debug_UartSendByte(0x55);
            Debug_UartSendByte(electric_supply_voltage_adc >> 8);
            Debug_UartSendByte((u8_t)electric_supply_voltage_adc);
            
            Debug_UartSendByte(0x56);
            Debug_UartSendByte(electric_0p1R_adc >> 8);
            Debug_UartSendByte((u8_t)electric_0p1R_adc);
#endif
            Debug_UartSendByte(0x5A);
            Debug_UartSendByte(electric_supply_0p1R_adc >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc);

            Debug_UartSendByte(0xA5);
            Debug_UartSendByte(electric_supply_0p1R_adc_sum >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_sum);
            break;

        case 34://150*34=5100us
            electric_supply_voltage_adc = ADC1_GetConversionValue(2);//adc 220v or 110v
            electric_supply_voltage_adc = (electric_supply_voltage_adc << 4);
            electric_0p1R_adc = ADC1_GetConversionValue(0);//0.1R
            electric_supply_0p1R_adc = (electric_supply_voltage_adc) / electric_0p1R_adc;

            if(electric_supply_0p1R_adc_max < electric_supply_0p1R_adc)
            {
                electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_min;
                electric_supply_0p1R_adc_max = electric_supply_0p1R_adc;
            }
            else if(electric_supply_0p1R_adc_min > electric_supply_0p1R_adc)
            {
                electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_max;
                electric_supply_0p1R_adc_min = electric_supply_0p1R_adc;
            }
            else
            {
                electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_min;
                electric_supply_0p1R_adc_sum -= electric_supply_0p1R_adc_max;
                electric_supply_0p1R_adc_sum += electric_supply_0p1R_adc;
            }

            //3.3ms
                TF1 = 0;
            TR1 = 0;        //disable T1
            ET1 = 0;
            Debug_UartSendByte(0x5A);
            Debug_UartSendByte(electric_supply_0p1R_adc >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc);

            Debug_UartSendByte(0xA5);
            Debug_UartSendByte(electric_supply_0p1R_adc_sum >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_sum);
            
             Debug_UartSendByte(0x8A);
            Debug_UartSendByte(electric_supply_0p1R_adc_min >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_min);
             Debug_UartSendByte(0x9A);
            Debug_UartSendByte(electric_supply_0p1R_adc_max >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_max);
            Debug_UartSendByte(0xAA);
            Debug_UartSendByte(electric_supply_0p1R_adc_sum >> 8);
            Debug_UartSendByte((u8_t)electric_supply_0p1R_adc_sum);
            
            electrical_level_timer = 0;
            break;

        default:
            break;


    }
}

出0入0汤圆

发表于 2015-9-23 20:37:09 | 显示全部楼层
收藏了,慢慢消化

出0入0汤圆

发表于 2015-9-30 14:44:52 | 显示全部楼层
好东西 常用

出0入0汤圆

发表于 2015-10-1 13:37:50 | 显示全部楼层
总结的好好

出0入0汤圆

发表于 2015-10-1 16:25:55 | 显示全部楼层
好东西,学些一下。

出0入0汤圆

发表于 2015-10-28 21:36:52 | 显示全部楼层

收藏,谢谢分享

出0入0汤圆

发表于 2015-10-28 23:50:19 | 显示全部楼层
数字滤波很有用的,马克一下,谢谢

出0入0汤圆

发表于 2016-2-26 20:40:23 | 显示全部楼层
MARK  C语言滤波

出0入4汤圆

发表于 2016-2-26 20:53:59 | 显示全部楼层
这个确实经典

出0入0汤圆

发表于 2016-4-28 23:56:20 | 显示全部楼层
mark,多谢

出0入4汤圆

发表于 2016-4-29 08:20:34 来自手机 | 显示全部楼层
mark, 记下来

出0入91汤圆

发表于 2016-4-29 08:54:35 | 显示全部楼层
mark一下  以后说不定有用

出0入0汤圆

发表于 2016-6-17 13:47:07 | 显示全部楼层
mark           

出0入0汤圆

发表于 2016-6-25 07:15:29 | 显示全部楼层
谢谢楼主了


出0入0汤圆

发表于 2017-1-8 23:44:40 | 显示全部楼层
不错,收藏了1

出0入0汤圆

发表于 2017-1-9 00:50:54 | 显示全部楼层
做个记号,明天电脑上再仔细看

出0入0汤圆

发表于 2017-1-9 13:08:03 | 显示全部楼层
这个是在‘程序匠人"写的一本书里看到多,网上也到处都是。

出0入0汤圆

发表于 2017-1-11 20:35:41 | 显示全部楼层
不错的资料,多谢分享

出0入0汤圆

发表于 2017-2-24 10:30:19 | 显示全部楼层
中位值平均滤波法运算中有一处问题:

/********************************************
说明:采一组队列去掉最大值和最小值
优点:融合了两种滤波的优点。对于偶然出现的脉冲性干扰,可消
除有其引起的采样值偏差。对周期干扰有良好的抑制作用,
平滑度高,适于高频振荡的系统。
缺点:测量速度慢
*********************************************/

#define N 12

uchar filter()

{
unsigned char i,j,k,l;
unsigned char temp,sum=0,value;
unsigned char value_buf[N],;

for(i=0;i<N;i++)
{
value_buf = get_ad();
delay();
}
//采样值从小到大排列(冒泡法)
for(j=0;j<N-1;j++)
{
for(i=0;i<N-j;i++)
应该改成for(i=0;i<(N-1-j);i++)
{
if(value_buf>value_buf[i+1])
{
temp = value_buf;
value_buf = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}

for(i=1;i<N-1;i++)
sum += value_buf;

value = sum/(N-2);
return(value);
}

出0入0汤圆

发表于 2017-2-24 11:02:32 | 显示全部楼层
收藏备用,数字滤波

出0入0汤圆

发表于 2017-2-25 19:21:24 | 显示全部楼层
如此强大,可惜我看不懂@

出0入0汤圆

发表于 2017-3-2 19:14:07 | 显示全部楼层
有2种方法用过了

出0入0汤圆

发表于 2017-3-31 18:27:49 | 显示全部楼层
mark下,需要实践测试验证下

出0入0汤圆

发表于 2017-12-6 10:48:51 | 显示全部楼层
122楼的代码写的真好.顶!

出0入0汤圆

发表于 2017-12-7 17:37:36 | 显示全部楼层
谢了,学习

出0入0汤圆

发表于 2020-12-14 21:06:04 | 显示全部楼层
实用,作个记号

出0入0汤圆

发表于 2020-12-15 08:32:23 | 显示全部楼层
收藏了,谢谢分享

出0入0汤圆

发表于 2021-6-16 13:47:15 | 显示全部楼层
学习收藏,谢谢

出0入0汤圆

发表于 2021-11-29 11:01:02 | 显示全部楼层
谢谢各位分享,正需要。现在学习51ADC
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 17:27

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

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