基于逆波兰算法的数字示波器数学运算处理方法

文档序号:1056781 发布日期:2020-10-13 浏览:30次 >En<

阅读说明:本技术 基于逆波兰算法的数字示波器数学运算处理方法 (Digital oscilloscope mathematical operation processing method based on inverse Polish algorithm ) 是由 黄武煌 张沁川 帅维维 赵勇 叶芃 田书林 王厚军 于 2020-06-30 设计创作,主要内容包括:本发明公开了一种基于逆波兰算法的数字示波器数学运算处理方法,该方法包括输入字符参数,生成运算表达式;对算术运算表达式进行中缀表达式向逆波兰式转换解析,并检测解析过程中表达式的合法性;逐元素对逆波兰形式表达式进行计算;将计算结果存储至对应的数学通道的数据缓冲区内;将运算结果显示于示波器屏幕上。本发明不仅能提供基本的运算方法,还可以使用户根据自身测试需求构造复杂运算表达式,并完成分析计算,满足更多的测量需求。(The invention discloses a digital oscilloscope mathematical operation processing method based on an inverse Polish algorithm, which comprises the steps of inputting character parameters and generating an operation expression; carrying out conversion and analysis of the infix expression to the inverse wave blue expression on the arithmetic operation expression, and detecting the legality of the expression in the analysis process; calculating the inverse Polish form expression element by element; storing the calculation result into a data buffer area of a corresponding mathematical channel; and displaying the operation result on an oscilloscope screen. The invention not only can provide a basic operation method, but also can enable a user to construct a complex operation expression according to the self test requirement, complete analysis and calculation and meet more measurement requirements.)

基于逆波兰算法的数字示波器数学运算处理方法

技术领域

本发明属于电子测量仪器技术领域,具体涉及一种基于逆波兰算法的数字示波器数学运算处理方法。

背景技术

近年来,随着在信号与系统方向的深入研究,以及高速高精度数据采集与处理技术的逐渐成熟,越来越多的功能在电子测试技术及相关仪器中得以实现。在这样的发展背景下,作为一款基础的电子测量仪器,越来越多的领域及行业借助数字示波器完成相关测试工作,随着应用领域的扩展,也出现了各式各样的测试环境,使得测试执行更加困难。同时,不同领域的测试需求也不尽相同,这就要求示波器具备更加全面的波形分析功能,例如可变点数FFT、区域可选直方图分析和追踪图分析等,以满足用户对各类波形的测试需求。

发明内容

针对现有技术中的上述不足,本发明提供了一种基于逆波兰算法的数字示波器数学运算处理方法,对被测信号完成一系列自定义运算处理,实现对采集数据完成更复杂的处理,大大提高了示波器的数据处理能力。。

为了达到上述发明目的,本发明采用的技术方案为:

一种基于逆波兰算法的数字示波器数学运算处理方法,包括以下步骤:

S1、输入字符参数,生成运算表达式;

S2、对算术运算表达式进行中缀表达式向逆波兰式转换解析,并检测解析过程中表达式的合法性;

S3、逐元素对逆波兰形式表达式进行计算;

S4、将计算结果存储至对应的数学通道的数据缓冲区内;

S5、将运算结果显示于示波器屏幕上。

进一步地,所述步骤S1还包括:

将生成的运算表达式转换为半角输入以及小写格式。

进一步地,所述步骤S1之后还包括以下分步骤:

A1、根据测量项字符串以及操作符字符串将运算表达式进行拆分处理;

A2、通过遍历的方式,以“+-*/(),><=!|&~”为分割符标志,将运算表达式元素进行提取,并使用队列方式进行存储。

进一步地,所述步骤A2中,定义Token数据结构作为数据结构体,所述Token数据结构包括类型、单位、标识符、元素位于表达式的位置,其中类型包括操作数、运算符、函数、分隔符,设置运算表达式字符串为List<Token>。

进一步地,所述步骤S2中,对算术运算表达式进行中缀表达式向逆波兰式转换解析具体包括以下分步骤:

B1、创建一存放操作符的数据栈,并按照优先级存放操作符;

B2、依次遍历中缀表达式数据结构,通过检查每个Token元素的类型标识来判断当前元素的类型,直至遍历完整个中缀表达式中的所有元素:

若该元素是操作数,则将该元素输出到逆波兰式队列;否则进行下一判断;

若该元素是函数,使用临时变量保存该元素;否则进行下一判断;

若该元素是运算符,当操作符栈为空或栈顶操作符具有更高的优先级或栈顶为左括号时,将该元素压入栈;否则从栈中弹出一个元素输出至逆波兰式,并重复操作符栈判定步骤,直至将该元素压入栈;否则进行下一判断;

若该元素是左括号,且临时变量不为空,则将该元素输出到逆波兰式的同时将该元素与临时变量压入栈中,然后将临时变量置为空;否则直接将该元素压入栈;否则进行下一判断;

若该元素是右括号,当栈顶为函数时,将该元素输出至逆波兰式队列,并从栈顶弹出一个元素至逆波兰式队列;当栈顶为运算符时,从栈顶弹出一个元素至逆波兰式队列,然后重复判断此时栈是否为空;若栈顶为左括号,从栈顶弹出一个元素;否则进行下一判断;

若该元素为逗号,则依次弹出操作符栈中的所有操作符,输出至逆波兰式队列,直至遇见函数源;否则获取下一个元素进行判断。

进一步地,所述步骤S2还包括函数校验操作,具体包括以下分步骤:

C1、创建一存放操作数及括号的数据栈;

C2、在中缀表达式转换为逆波兰式过程中,

若遇到函数匹配左括号或操作数时,将其压入校验栈中,并且在操作符需要输出至逆波兰式队列时,根据逆波兰式计算规则出栈校验栈中的操作数来检验操作数数量是否匹配该操作符,若满足条件,则校验成功,将操作符输出,若不满足条件,将报错并结束程序。

进一步地,所述步骤S3逐元素对逆波兰形式表达式进行计算具体包括以下分步骤:

D1、创建一存放中间结果的数据栈;

D2、依次遍历逆波兰式数据结构,通过检查每个Token元素的类型标识来判断当前元素的类型,直至遍历完整个逆波兰式中的所有元素:

若该元素为操作数或左右括号,则直接压入栈中;否则进行下一判断;

若该元素为运算符,则首先获取当前运算符定义的操作数个数,并从栈中弹出满足个数的操作数,经过计算后将结果数据压入栈中;否则进行下一判断;

若该元素为函数,则将离栈顶最近的一对括号的范围内操作数从栈中弹出并作用于该函数进行运算,经过计算后将运算结果压入栈中;否则从栈中弹出最后一个数值作为带显示波形的数据结果输出。

本发明具有以下有益效果:

本发明可以将数字示波器的数学运算支持的所有测量项都包含到运算表达式字符串中,通过逆波兰表达式转换来进行波形运算,在逆波兰式的转换过程中,增加操作符验证步骤,以判断操作数个数是否满足运算要求,可以更有效率的实现表达式合法性判断,极大的提高了示波器的数据分析及处理能力,同时运算效率也有一定程度的提高,解决了现有仪器不能对测量项进行自定义多项式构造的缺陷。

附图说明

图1为本发明基于逆波兰算法的数字示波器数学运算处理方法流程示意图;

图2为本发明中缀表达式转逆波兰式流程示意图;

图3为本发明计算逆波兰式流程示意图;

图4为本发明函数校验流程示意图。

具体实施方式

下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

如图1所示,本发明实施例提供了一种基于逆波兰算法的数字示波器数学运算处理方法,包括以下步骤S1至S5:

S1、输入字符参数,生成运算表达式;

在本实施例中,本发明输入至少一个数学表达式字符串,数学表达式字符串可包括测量项字符串、运算符、函数、标量以及左右括号。具体而言,数学表达式字符串可由公式编辑器软键盘或根据所选参数构成直接输入至示波器中,该公式编辑器上包括了构成数学表达式的所有元素,包括通道源、常量、括号、运算符、特殊符号、函数和逻辑运算符。运算符包括加减乘除,函数包括微积分、FFT、线性平均、对数、指数等。

在生成运算表达式后,本发明将生成的运算表达式转换为半角输入以及小写格式,从而方便对运算表达式中的元素在数据库以及操作符库进行查找。

本发明将将运算表达式由字符串形式转换为List<Token>形式,具体包括以下分步骤:

A1、将运算表达式根据测量项字符串以及操作符字符串进行拆分处理;

A2、通过遍历的方式,以“+-*/(),><=!|&~”为分割符标志,将运算表达式元素进行提取,并使用队列方式进行存储。

在步骤A2中,本发明定义Token数据结构作为数据结构体,所述Token数据结构包括类型、单位、标识符、元素位于表达式的位置,其中类型包括操作数、运算符、函数、分隔符,设置运算表达式字符串为List<Token>。

S2、对算术运算表达式进行中缀表达式向逆波兰式转换解析,并检测解析过程中表达式的合法性;

在本实施例中,本发明对算术运算表达式进行中缀表达式向逆波兰式转换解析具体包括以下分步骤:

B1、创建一存放操作符的数据栈,并按照优先级存放操作符;

具体而言,本发明将操作符在操作符栈中遵循越置于栈顶优先级越高的原则进行存放。

B2、按照从左到右顺序依次遍历中缀表达式数据结构,通过检查每个Token元素的类型标识来判断当前元素的类型,直至遍历完整个中缀表达式中的所有元素,如图2所示,判断过程具体为:

B21、首先判断中缀表达式是否为空;若是,则判断操作符栈是否为空,若是则结束流程,否则将操作符栈内剩余的操作符逐一弹出,并压入逆波兰式队列;否则从中缀表达式中获取一个元素进行下一判断;

B22、判断该元素是否是操作数,若是则将该元素输出到逆波兰式队列,并返回步骤B21;否则进行下一判断;

B23、判断该元素是否是函数,若是则使用临时变量_function保存该元素,并返回步骤B21;否则进行下一判断;

B24、判断该元素是否是运算符,若是则再判断操作符栈是否为空或栈顶操作符具有更高的优先级或栈顶为左括号,若是则将该元素压入栈,并返回步骤B21;否则从栈中弹出一个元素输出至逆波兰式,并重复操作符栈判定步骤,直至将该元素压入栈;否则进行下一判断;

B25、判断该元素是否是左括号,若是则再判断临时变量是否不为空,则将该元素输出到逆波兰式的同时将该元素与函数变量压入栈中,然后将临时变量_function置为空;否则直接将该元素压入栈,并返回步骤B21;否则进行下一判断;

B26、判断该元素是否是逗号,若是则依次弹出操作符栈中的所有操作符,输出至逆波兰式队列,直至遇见函数源;否则进行下一判断;

B27、判断操作符栈是否为空,若是则结束流程,否则进行下一判断;

B28、判断栈顶是否是函数,若是则将该元素输出至逆波兰式队列,并从栈顶弹出一个元素至逆波兰式队列,并返回步骤B27;否则进行下一判断;

B29、判断栈顶是否是运算符,若是则从栈顶弹出一个元素至逆波兰式队列,,并返回步骤B27;否则从栈顶弹出一个元素,并返回步骤B21。

本发明检测解析过程中表达式的合法性具体包括以下分步骤:

C1、创建一存放操作数及括号的数据栈;

C2、在中缀表达式转换为逆波兰式过程中,进行函数校验,如图3所示,判断过程具体为:

C21、判断校验栈是否为空,若是则说明表达式不完整,结束流程;否则输出布尔值doPop为真,进行进行下一判断;

C22、判断校验栈是否不为空且布尔值doPop为真,若是则从校验栈中弹出一个元素,进行步骤C26;否则进行下一判断;

C23、判断校验栈是否为空且布尔值doPop为真,若是则进行下一判断,否则说明缺少左括号,结束流程;

C24、判断检验区操作数个数是否匹配函数要求个数,若是则说明公式正确,结束流程;否则进行下一判断;

C25、判断检验区操作数个数是否小于函数要求个数,若是则说明参数过少结束流程;否则说明参数过少结束流程;

C26、判断该元素是否为操作数,若是则将该元素输出至待检验区;否则进行下一判断;

C27、判断该元素是否为左括号,若是则输出布尔值doPop为假,并返回步骤C22;否则说明出现非法字符,结束流程。

S3、逐元素对逆波兰形式表达式进行计算;

在本实施例中,逐元素对逆波兰形式表达式进行计算具体包括以下分步骤:

D1、创建一存放中间结果的数据栈;

D2、按照从左到右顺序依次遍历逆波兰式数据结构,通过检查每个Token元素的类型标识来判断当前元素的类型,直至遍历完整个逆波兰式中的所有元素,如图4所示,判断过程具体为:

D21、判断逆波兰式中是否存在未遍历的元素,若是则从逆波兰式中读取一个元素,进行下一判断;否则将从栈中弹出的最后一个数值作为结果输出,结束流程;

D22、判断该元素是否为操作数或分隔符,若是则将该元素压入栈,并返回步骤D21;否则进行下一判断;

D23、判断该元素是否为运算符,若是则从栈中弹出运算符所需个数数值进行计算,获得计算结果,并将计算结果压入栈,返回步骤D21;否则从栈中弹出一对括号范围参数作用于该函数,获得计算结果,并将计算结果压入栈,返回步骤D21。

反复执行上述步骤,直到遍历完逆波兰式的所有元素为止。

最后从栈中弹出最后一个数值作为带显示波形的数据结果输出。

S4、将计算结果存储至对应的数学通道的数据缓冲区内;

S5、将运算结果显示于示波器屏幕上。

本发明实现了对指定数据源,即包括波形数据、参数测量结果和标量作为数学通道输入源,进行简单代数运算,以及FFT、直方图、追踪图、平均、微分、积分等20多种函数运算和逻辑运算。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:存储器控制方法、存储器存储装置及存储器控制电路单元

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类