0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

传感器测量怎么做才能稳定呢?

GReq_mcu168 来源:玩转单片机 作者:玩转单片机 2020-06-24 11:37 次阅读

今天遇到一个网友问一个问题,他有一个传感器测量一个物理量,需要判断其变化趋势,我给了一些建议,这里将这个建议展开做些深入分析,并分享给大家。

本文想借此表达一下个人的一个观点,做开发如果遇到无法解决的难题,可以试着从数学的角度出发,看能否找到答案。

是个啥坑?一个项目中用到一个传感器测量一物理量,这里假定测量温度吧。需要判断其变化趋势,利用这个变化趋势去做一些应用。

那么要怎么判断一个物理量的变化趋势呢?我们能自然能想到去求取该随机序列的变化率。这里涉及到一些数序定义。随机序列有很多可能的来源,最为常见是模数采样。

这样将S(t)信号转换为离散信号序列S(n),那么对于当前时刻其斜率怎么求取呢?(这里忽略中间的过度态,仅将其看为线段相连,当然现实应用中如果有更高要求,可以做曲线拟合)

但是如果只判断,斜率极容易误判,比如下面这样的情况:

传感器测量怎么做才能稳定呢?

其斜率一会儿正,一会儿负,但是其总体趋势又是在增加的,所以只考察斜率显然不可取,获取需要在代码在加各种复杂的条件或者限值去判断。即使加这么多条件系统仍然可能表现的非常不健壮。

传感器测量怎么做才能稳定呢?

对于interwetten与威廉的赔率体系 信号2而言,趋势又在不断变化。那么怎么做才能稳定呢?先卖个关子?

函数的凹凸性凹函数凹函数是一个定义在某个向量空间的凸集C(区间)上的实值函数f。设f为定义在区间I上的函数,若对I上的任意两点x1《x2和任意的实数t属于(0,1),总有,

则称函数f为l上凹函数,有的书上也称为下凸函数。

传感器测量怎么做才能稳定呢?

如果把上述条件中的“≥”改成“》”,则叫做严格上凹函数,或叫做严格下凸函数。

上面是一维函数情况,这里来个2维函数的图,刚方便理解

传感器测量怎么做才能稳定呢?

凸函数设f为定义在区间I上的函数,若对I上的任意两点x1《x2和任意的实数t属于(0,1),上面不等式变成大于等于,则在该区间为凸函数。

传感器测量怎么做才能稳定呢?

可见,凹凸是相对的,如f(x)在某区间为凹,则-f(x)则在该区间为凸。

性质若一个函数在某区间二阶可导且大于0,则函数在该区间为凹函数

若一个函数在某区间二阶可导且小于0,则函数在该区间为凸函数

证明,这里就不推导了,可以利用拉格朗日中值定理可以推导出上面这个性质。

来看一下会动的图,加深一下理解:

传感器测量怎么做才能稳定呢?

函数从到切线为蓝色,曲线向上凹,绿色表示曲线是向下凹的,红色表示曲线的拐点。

sin(2x)的一阶导数为:

sin(2x)的二阶导数为:

回到坑里通过上面装逼,是否可以利用离散序列的求导数来判断传感器的变化趋势。啥?导数?又要开始表演了?

前面说了一阶导数是这样的:

那么二阶导数是哪样捏?

化简一下:

其中S[n]表示当前测量点,S[n-1]表示前一个测量点,S[n-2]表示前第2个测量点。应为+S[n-2]

上代码#include 《stdio.h》

#include 《math.h》

#include 《string.h》

typedef struct _T_2ND_DRV

float xn1;

float xn2;

}t_2ND_DRV;

typedef struct _T_1ST_DRV

float xn1;

}t_1ST_DRV;

void init_second_derivative(t_2ND_DRV *pSndDrv)

pSndDrv-》xn1 = 0;

pSndDrv-》xn2 = 0;

float second_derivative(t_2ND_DRV *pSndDrv, float xn,float T)

float result=0.0f;

if(T《=0)

return 0x7FBFFFFF; /*非法数据*/

result = (xn-2*pSndDrv-》xn1+pSndDrv-》xn2)/T/T;

pSndDrv-》xn2 = pSndDrv-》xn1;

pSndDrv-》xn1 = xn;

return result;

void init_fisrt_derivative(t_1ST_DRV *p1stDrv)

p1stDrv-》xn1 = 0;

float fisrt_derivative(t_1ST_DRV *p1stDrv, float xn,float T)

float result=0.0f;

if(T《=0)

return 0x7FBFFFFF; /*非法数据*/

result = (xn-p1stDrv-》xn1)/T;

p1stDrv-》xn1 = xn;

return result;

#define PI 3.1415f

#define SAMPLE_RATE 500.0f

#define SAMPLE_T (1/SAMPLE_RATE)

#define SAMPLE_SIZE (100)

int main()

float sim1[SAMPLE_SIZE];

float sim2[SAMPLE_SIZE];

float out1[SAMPLE_SIZE];

float out2[SAMPLE_SIZE];

t_2ND_DRV sndDrv;

t_1ST_DRV frtDrv;

init_fisrt_derivative(&frtDrv);

init_second_derivative(&sndDrv);

FILE *pFile=fopen(“。/simulationSin.csv”,“wt+”);

if(pFile==NULL)

printf(“simulationSin.csv opened failed”);

return -1

for(int i=0;i《SAMPLE_SIZE;i++)

sim1[i]=10*sin(2*PI*10*i/500);

for(int i=0;i《SAMPLE_SIZE;i++)

out1[i]=fisrt_derivative(&frtDrv,sim1[i],SAMPLE_T);

out2[i]=second_derivative(&sndDrv,sim1[i],SAMPLE_T);

fprintf(pFile,“%f,%f,%f

sim1[i],out1[i],out2[i])

fclose(pFile);

return 0;

忽略前两个点,利用excel生成曲线:

传感器测量怎么做才能稳定呢?

从图中可看出:

一阶导数为正时,函数递增趋势;

一阶导数为负时,函数递减趋势;

二阶导数为0时,出现拐点,趋势改变;此时如果左右两侧的一阶导符号相反,则出现极值。

二阶导数为负时,其一阶导数也即原函数斜率规律单调减,二阶导数为正时,其一阶导数也即原函数斜率规律单调增。

再进一步:

一阶导数与二阶导数结合起来看,就可以看出测量值变化趋势的趋势,比如在前1/4周期,此区间变换趋势为增,也即一阶导数为正,而其二阶导数为负,也可以看出递增的趋势是逐渐减小到0的。

代码优化如果只是做定性判断,上述函数,完全没必要与采样周期做除法,只需要考察其增量即可,代码可优化如下:

typedef struct _T_2ND_DRV

float xn1;

float xn2;

}t_2ND_DRV;

typedef struct _T_1ST_DRV

float xn1;

}t_1ST_DRV;

void init_second_derivative(t_2ND_DRV *pSndDrv)

pSndDrv-》xn1 = 0;

pSndDrv-》xn2 = 0;

float second_derivative(t_2ND_DRV *pSndDrv, float xn)

float result=0.0f;

result = xn-2*pSndDrv-》xn1+pSndDrv-》xn2;

pSndDrv-》xn2 = pSndDrv-》xn1;

pSndDrv-》xn1 = xn;

return result;

void init_fisrt_derivative(t_1ST_DRV *p1stDrv)

p1stDrv-》xn1 = 0;

float fisrt_derivative(t_1ST_DRV *p1stDrv, float xn)

float result=0.0f;

result = xn-p1stDrv-》xn1;

p1stDrv-》xn1 = xn;

return result;

意外收获这里意外引入一个可能很多人没注意的知识点NaN,在计算中,NaN代表非数字,是数字数据类型的成员,可以将其解释为不确定的或无法表示的值,尤其是在浮点运算中。1985年,IEEE 754浮点标准引入了NaN的系统使用,并表示了其他无限量(如无穷大)。

前述函数返回0x7FBFFFFF,也就是表示无穷大。

不同的操作系统编程语言可能具有NaN的不同字符串表示形式:

nan

NaN

NaN%

NAN

NaNQ

NaNS

qNaN

sNaN

1.#SNAN

1.#QNAN

-1.#IND

实际上,由于编码的NaN具有符号,因此通常也可以在NaN的字符串表示中找到它们,例如:

-NaN

NaN12345

-sNaN12300

-NaN(s1234)

工程应用这里给出我的建议方案:

传感器测量怎么做才能稳定呢?

将传感器信号经由电路处理,模数采样,在进入前级数字滤波器,滤除不必要的噪声,在进行一阶/二阶求导。对于一阶和二阶求导再做一级移动平均滤波,最后在按照上面描述进行判别变化趋势,则个人认为基本就比较健壮了。实际移动均值滤波长度不宜选择过长,否则响应就比较滞后了。不能对传感器的变化趋势做出实时的判别。加了后级均值滤波器,则会消除由于波形忽上忽下的随机噪声干扰影响,使得系统判别更为健壮,实际滤波器长度需根据不同的场合进行调试优化。或者也可以选择别的IIR/FIR滤波器形式实现。

总结一下做为嵌入式er编程,有时候有必要去看看数学书,了解一下数学原理的背后故事,可能会给你带来意想不到的作用哦。
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51071

    浏览量

    753311
  • 嵌入式
    +关注

    关注

    5082

    文章

    19117

    浏览量

    304963
  • 数字滤波器
    +关注

    关注

    4

    文章

    270

    浏览量

    47021
收藏 人收藏

    评论

    相关推荐

    利用ldc1314测量金属距离,偶然发现温度对传感器的影响很大,怎么处理?

    利用ldc1314测量金属距离,偶然发现温度对传感器的影响很大。查了一下文档发现温度引起了线圈的热胀冷缩,导致电感量变化。请教下各位怎么做能够将温度的干扰控制在最低??
    发表于 12-23 06:58

    传感器的响应时间对测量结果有何影响?

    测量快速流动的气体流量时,若 传感器 响应慢,所测流量数据就不能准确反映气体的瞬时流量,使测量结果失真. 稳态测量的误差:即使测量对象处于
    的头像 发表于 11-29 09:24 219次阅读
    <b class='flag-5'>传感器</b>的响应时间对<b class='flag-5'>测量</b>结果有何影响?

    气压传感器如何提高测量精度

    ,包括机械式、电容式、电阻式和压电式等。每种类型的传感器都有其特定的应用场景和优缺点。选择合适的传感器类型是提高测量精度的第一步。 机械式传感器 :通常用于工业和气象站,因其结构简单、
    的头像 发表于 11-28 14:02 269次阅读

    AIC3254要怎么做才能够做到反馈抑制

    设计,连编译都无法通过。各位大侠,到底怎么办,期待各位大侠的帮助,谢谢了,万分感谢。AIC3254要怎么做才能够做到反馈抑制
    发表于 11-08 07:49

    点光谱共焦传感器测量透明材质应用

    普密斯 SFS-8022 彩色光谱共焦位移传感器以其高于传统三角测距传感器的精度和在不同材质、不同形貌测量中的稳定一致结果,成为了透明材质测量
    的头像 发表于 10-21 11:06 274次阅读
    点光谱共焦<b class='flag-5'>传感器</b><b class='flag-5'>测量</b>透明材质应用

    液位传感器怎么安装和使用

    浮球在液体中的浮力变化来检测液位。 超声波液位传感器 :利用超声波在液体中的传播时间来测量液位。 电容式液位传感器 :通过测量液体与传感器
    的头像 发表于 09-07 11:07 589次阅读

    什么原因导致压力传感器漂移?

    是什么原因导致压力传感器漂移的?我们在设计的时候怎么才能消除压力传感器漂移
    的头像 发表于 08-22 18:00 1019次阅读
    什么原因导致压力<b class='flag-5'>传感器</b>漂移?

    传感器测量的量和不可测量的量

    传感器是一种能够将物理量或化学量转换为电信号的装置,广泛应用于工业、科研、医疗、环境监测等领域。尽管传感器的种类繁多,能够测量的物理量和化学量也非常广泛,但仍然有一些量是传感器无法
    的头像 发表于 08-19 14:19 508次阅读

    小巧集成,适用于多种电阻传感器测量稳定信号输出满足不同需求

    小巧集成,适用于多种电阻传感器测量稳定信号输出满足不同需求 振动电阻式传感器测量模块RM502采用了高精度模拟信号驱动和采集威廉希尔官方网站 ,特别适用
    的头像 发表于 08-02 10:04 282次阅读

    电涡流位移传感器测量原理是什么

    电涡流位移传感器是一种利用电磁感应原理测量物体位移的传感器。它具有高精度、高稳定性、抗干扰能力强等优点,广泛应用于工业自动化、精密测量等领域
    的头像 发表于 07-26 15:06 1564次阅读

    电容传感器测量转换电路有哪些

    电容传感器是一种将被测量变化转换为电容变化的传感器,具有精度高、灵敏度高、稳定性好等优点,广泛应用于工业自动化、机器人威廉希尔官方网站 、生物医学等领域。电容传感
    的头像 发表于 07-22 11:18 974次阅读

    电容传感器可以测量什么电路

    电容传感器是一种利用电容变化来测量物理量或化学量的传感器。它具有结构简单、灵敏度高、稳定性好、抗干扰能力强等优点,被广泛应用于各种领域。 一、电容
    的头像 发表于 07-22 11:14 396次阅读

    振动电阻式传感器测量模块的传感器接口

    振动电阻式传感器测量模块的传感器接口 RM502模块采用了高精度模拟信号驱动和采集威廉希尔官方网站 ,能够驱动和测量对电阻精度要求较高的传感器。它采用恒流
    的头像 发表于 06-11 14:13 381次阅读
    振动电阻式<b class='flag-5'>传感器</b><b class='flag-5'>测量</b>模块的<b class='flag-5'>传感器</b>接口

    电平转换的电路,该怎么做

    单片机的电源是5V,相应地,它的IO引脚输入输出电压也是5V。但若空气净化器用到的PM2.5传感器,它的工作电源是3.3V,传感器输出的IIC信号同样也是3.3V。
    发表于 03-14 14:09 1600次阅读
    电平转换的电路,该<b class='flag-5'>怎么做</b><b class='flag-5'>呢</b>?

    测量是用激光传感器还是超声波传感器

    测量是用激光传感器还是超声波传感器  激光传感器和超声波传感器都是常用的测量工具,它们在不同的场
    的头像 发表于 01-03 15:59 579次阅读