谁能帮我看一段150行C语言滤波算法,红包酬谢
需求高手帮我看一段150行滤波算法,我看得云里雾里,不知道有没有用,谁能帮我理清原理思路,给我结构图和注释,红包500,能提出改进另说 #include "hx711.c"#definewtime2 30
#definewdtm 35
ucharidata wtime0=6 ; //默认值5,6,10 震动值
ucharidata wtime1=5 ; //5,5,10
ucharidata wtime4=2 ;//2,2,5
uchar idata fash1 ;//默认值4,5, 8,10,10,12 缓冲区值
uchar idata fash2 ;//默认值8,10,12,12,15,18
uchar idata fash3 ; //默认值10,12,15,20,15,20
uchar idatamer1 ; //默认值100,150,250 震动值
uchar idatamer2 ; //默认值80,100,180
uchar idatamer3 ; //默认值40,50,100
bit pick;
bit f_bit6;
bit stab2;
unsigned long idata ad_out;
xdata unsigned longadbuff;
xdata unsigned longadw_li;
idata unsigned longi1c,i21;
idata unsigned longls_li;
idata unsigned longls_lei;
unsigned char ch_12,ch_13,ch_14,ch_15,ch_16,ch_17,ch_11;
unionadhc
{
unsigned longmr;
unsigned charmr1;
}ad;
////////////////////////////
void InitFilter (void)//滤波参数初始化
{
ch_13=1;
ch_14=1;
ch_17=wtime2;
}
void load_adbuff(void)
{
uchar i;
for(i=0;i<50;i++)
{
adbuff=ad_out;
}
}
unsigned long int madd(unsigned char n1,unsigned char n2)//累计数据
{
unsigned char loop;
ls_lei = 0;
for (loop = 0; loop<n2; loop++)
{
ls_lei= ls_lei + adbuff;
n1++;
}
return(ls_lei);
}
void move(unsigned char dest,unsigned char num)//数值向右移位
{
unsigned char loop,sour;
sour = dest + 1;
for (loop = 0; loop < num; loop++)
{
adbuff = adbuff;
dest++;
sour++;
}
}
////////////////////////////
voidmaic( void )
{
move(0,fash1);//移位,去掉最低位的数据,从第一参数开始移第一参数个数据
adbuff =ad.mr; //加入新数据
ad.mr = madd(0,fash1);//累加数据,从数据0开始,
ad.mr=ad.mr/fash1;//求平均
ls_li = ad.mr;
ls_li = ls_li - i21;
if (ls_li > 0x80000000)
{
ls_li = -ls_li;
}
if(ls_li > mer1)
{
ch_13--;
if (ch_13!=0)
{
return;
}
else
{
ch_13 = 1;
ch_14 = 1;
ch_15 = 1;
ch_16 = 1;
ch_11 = 1;
ch_12=1;
ch_17=1;
}
}
else
{
if ( (ch_14 ^ fash2) !=0 )
{
ch_14++;
}
else
{
ch_13 = wtime0;
}
}
move(fash1,fash2);
adbuff = ad.mr;
ad.mr = madd(fash1+fash2-ch_14,ch_14);
ad.mr= ad.mr / ch_14;
ls_li = ad.mr;
f_bit6=0;
ls_li = ls_li - i21;
if ( ls_li > 0x80000000 )
{
ls_li = -ls_li;
f_bit6=1;
}
i21 = ad.mr;
//////////////////////
if (ls_li>mer2)
{
ch_15--;
if (ch_15 != 0)
{
return;
}
else
{
ch_15 = 1;
ch_16 = 1;
ch_11 = 1;
ch_12=1;
ch_17=1;
}
}
else
{
if ( (ch_14 ^ fash2) == 0)
{
ls_li = ls_li >> 1;
if ( f_bit6 != 0)
{
ad.mr = ad.mr - ls_li;
}
else
{
ad.mr = ad.mr + ls_li;
}
if ((ch_16 ^ fash3) !=0)
{
ch_16++;
}
}
}
move(fash1+fash2, fash3);
adbuff = ad.mr;
ad.mr = madd(fash1+fash2+fash3-ch_16,ch_16);
ad.mr =ad.mr / ch_16;
i21 = ad.mr;
ls_li =ad.mr;
ls_li = ls_li - adw_li;
if (ls_li > 0x80000000)
ls_li = -ls_li;
if (ls_li > mer3)
{
gotocal16;
}
else
{
gotocal17;
}
cal16:
ch_11--;
stab2=0;
if (ch_11!=0)
{
return;
}
else
{
ch_11=1;
ch_12=1;
ch_17=1;
gotocal18;
}
cal17:
if ((ch_16^fash3) !=0)
{
goto cal16;
}
ch_15 = wtime1;
ch_11 = wtime4;
ch_12++;
stab2 = 1;
if ( (ch_12 ^wdtm) !=0 )
{
gotocal18;
}
ch_12 =wdtm;
i1c = i1c + ad.mr;
ch_17--;
if (ch_17!=0)
{
return;
}
ad.mr = i1c / wtime2;
adw_li = adw_li +ad.mr;
adw_li = adw_li >> 1;
i21 = adw_li;
cal18:
adw_li=i21;
ad_out = adw_li;
i1c = 0;
pick = 1;
ch_17 = wtime2;
}
void read_ad(void)
{
HX_OUT1=1;
HX_CLK1=0;
if (HX_OUT1==0)
{
ad.mr =hx711_ad();//AD采样
maic();//滤波
}
}
//楼主,应用场景说一下呗 或许原作者就在论坛哦
称重仪表滤波程序 三次滑动平均,后两次平均数长度可变。 {:lol:}看起来不错 这种滤波算法的理论是什么? mark,滤波算法。 sandeant 发表于 2020-6-25 19:39
三次滑动平均,后两次平均数长度可变。
3次可变滑动平均我知道,前后怎么关联没看出来,几个参数减来减去,跳来跳去看不懂,还有参数怎么调效果? mark,滤波算法+1 滤波算法,mark 是不是使用了低通滤波器的计算手法?如果是的话可以使用相关的仿真软件看下低通滤波器的相关参数和频率响应情况 数据变动大时,滤波长度小。数据平稳时,长度递增,至设定值。兼具数据的快速性,和稳定性。 sandeant 发表于 2020-6-26 08:44
数据变动大时,滤波长度小。数据平稳时,长度递增,至设定值。兼具数据的快速性,和稳定性。 ...
感谢说明,一句话比分析代码强百倍!,提供了思路! lb0857 发表于 2020-6-25 17:14
学习了这个算法可以用在很多地方了 二楼是开玩笑的,其实楼主重点介绍一下使用产品情况 ad采集的量类型是那种等等大伙群策群力 或许解决不了问题但是提供很好思路呢 看起来很不错,应该有很多地方能使用到 下载分析一下,看起来很不错。 lb0857 发表于 2020-6-26 10:03
二楼是开玩笑的,其实楼主重点介绍一下使用产品情况 ad采集的量类型是那种等等大伙群策群力 或许解 ...
称重仪表滤波程序,在晃动,抖动下能快速稳定。大家分析下,可以分享使用 MARK
称重仪表滤波算法,这个是惯性滤波和平滑滤波算法把? 就是个加权滑动平均吧 这个实际使用的时候要根据你的对象调整参数的 加权递推平均滤波法.不同时刻的数据加以不同的权,通常是,越接近现时刻的资料,权取得越大,给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。适用于有较大纯滞后时间常数的对象和采样周期较短的系统。 mark 滤波算法 看了一下,这句似乎是错的.应该是ch_12--; 学习了~~ sipure 发表于 2020-6-27 14:37
看了一下,这句似乎是错的.应该是ch_12--;
你看懂了吗?可与我联系。我没看明白,也不知道对错 MARK C语言滤波算法 MARK C语言滤波算法 称重滤波算法,学习一下 期待高手分析下,看起来很不错 本帖最后由 waymcu 于 2020-6-29 00:50 编辑
学习,学习! 收藏一下 顶起来,等高手分析 滤波算法 {:smile:}先收下,有空研究!
高手,过来解释下。 LZ看懂了没有?出来解答下呗 滤波算法 mark 标记下,称重滤波算法,以后也许用到,等大佬回答 称重滤波算法 称重滤波算法 有偿求助”的帖子,请使用论坛的悬赏功能,禁止私下使用微信或支付宝转账【达到1000汤圆悬赏标题置红】
https://www.amobbs.com/forum.php?mod=viewthread&tid=5737448
帖子上锁。楼主可以重新发悬赏帖子。
页:
[1]