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

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

3天内不再提示

LabVIEW统一查询工具包 过滤器模式Por的介绍

jf_NKOETB7n 来源:LabVIEW的编程之道 作者:LabVIEW的编程之道 2022-11-28 09:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、过滤器模式Pro简介

前已经写过过滤器模式,这里再写一篇有以下几个方面原因:

1、前一章的算法、数据和数据规则没有分离,这里设计一个可用的工具包;

2、C#里面有统一查询语言(LINQ),里面包含数据查询、集合查询、以及排序,这篇文章也来开发一个LabVIEW的统一查询工具包,实现以上功能。

功能包含以上内容:

1、数据查询;

2、集合运算:交集、并集;

3、数据排序:升序和降序;

以上功能可以任意组合。

二、过滤器模式Pro-过滤

下图为我们设计的UML关系类图:

e69fbdde-6eac-11ed-8abf-dac502259ad0.png

1、Abstract Filter过滤器框架:定义了过滤器过滤的基本规则

2、Abstract Data需要查询的数据类型:只定义的一个tostring用于显示数据

3、Abstract Rule定义了具体数据规则

下面开始编程

1、创建一个工程命名为LLINQ,意思是LabVIEW的LINQ。

2、创建3个类分别命名为Abstract Filter、Abstract Data和Abstract Rule,在Abstract Filter私有数据中添加Abstract Rule和Abstract Data数组;并创建其数据成员访问。

e6c0c51a-6eac-11ed-8abf-dac502259ad0.png

e6e06e74-6eac-11ed-8abf-dac502259ad0.png

3、在Abstract Rule的私有数据数据中添加两个Abstract Data分别命名为RData1、RData2,并创建其数据成员访问。

e6fb4ee2-6eac-11ed-8abf-dac502259ad0.png

e70a07ca-6eac-11ed-8abf-dac502259ad0.png

5、在Abstract Rule中创建一个动态VI命名为Filter rule。

e723d65a-6eac-11ed-8abf-dac502259ad0.png

e73ffd30-6eac-11ed-8abf-dac502259ad0.png

6、在Abstract Filter中添加静态类DoFilter,这个规则比较简单,只要是符合规则就留下,不符合规则就剔除。

e758999e-6eac-11ed-8abf-dac502259ad0.png

e7794ca2-6eac-11ed-8abf-dac502259ad0.png

下边写个实际DEMO来演示下过滤模式

6.1、创建VI命名为Filer DEMO

6.2、创建一个类命名为Double data继承至Abstract Data,在私有数据添加一个double类型数据。

6.3、创建一个类命名为Greate The 0.5继承至Abstract rule,重写Filer rule。

e792f27e-6eac-11ed-8abf-dac502259ad0.png

6.4、在AbstratFIler中添加数据和过滤规则,进行过滤,然后再取出数据

e7a01cb0-6eac-11ed-8abf-dac502259ad0.png

e7c0c7bc-6eac-11ed-8abf-dac502259ad0.png

三、过滤器模式Pro-集合运算

1、并集

在Abstract Filter中创建静态方法Uniton,做法分三步

1.1、设置两个过滤器作为输入;

1.2、找出结合2中与集合1相同的部分并剔除;

1.3、合并剔除后的集合数据并保存到结果数据中。

e7f5e636-6eac-11ed-8abf-dac502259ad0.png

2、交集

在Abstract Filter中创建静态方法Intersection,做法分两步

2.1、设置两个过滤器作为输入;

2.2、取出结合2中与集合1相同的部分,保存到输出结果中。

e8230936-6eac-11ed-8abf-dac502259ad0.png

2、集合范例

下面是一个两个数组,一个是0--9的整数,一个是5--14的整数,求他们的交集和并集。

先创建一个整类继承至Abstract Rule,私有数据类型为整型,重写数据规则Filer Rule:

e839d6f2-6eac-11ed-8abf-dac502259ad0.png

3、下面是具体的使用代码:

e8590fcc-6eac-11ed-8abf-dac502259ad0.png

4、前面板结果

e870beb0-6eac-11ed-8abf-dac502259ad0.png

四、过滤器模式Pro-冒泡排序

数组排序是一个经常使用的功能,LabVIEW自带的数组排序功能只能对数值类型数据进行排序,那么簇,指定类中特定数据排序呢,每次都需要自己写非常麻烦,影响编程效率。下面写个通用的冒泡排序算法:

从最底部两个元素开始比价,如果上一个元素大于下一个元素就交换位置,然后向上挪一个位置,重复以上操作直到最顶端。最大值就像泡泡浮出水面一样,再从最底端到顶端第二个元素重复上面动作,依次循环

e897d2ca-6eac-11ed-8abf-dac502259ad0.png

e8ae5ac2-6eac-11ed-8abf-dac502259ad0.png

e8cc42da-6eac-11ed-8abf-dac502259ad0.png

这个是冒泡迭代的位置。

e8e4acf8-6eac-11ed-8abf-dac502259ad0.png

具体编码如下程序框图:

e907a94c-6eac-11ed-8abf-dac502259ad0.png

建一个double比较的数据规则

e9256a90-6eac-11ed-8abf-dac502259ad0.png

创建个DEMO生成一组随机数看看运行结果:

e93fd010-6eac-11ed-8abf-dac502259ad0.png

e9577260-6eac-11ed-8abf-dac502259ad0.png

运行下结果达到预期,我们把数据数量改成1000,2000看看运行时间

e973813a-6eac-11ed-8abf-dac502259ad0.png

e9947d9a-6eac-11ed-8abf-dac502259ad0.png

上面可以看到1000次运行时间为3.39秒,2000次运行时间为13.7秒,这个时间感觉太长了,能优化排序算法将时间缩短不?

看下一章的分治排序法。

五、过滤器模式Pro-分治排序

冒泡排序算法的时间复杂度为O(n^2)空间复杂度为O(1)

我们使用分治排序时间复杂度为O(nlog(n))空间复杂度为O(log(n))

简单介绍下原理:

固定第一个数,从最后和最前搜索,当后面大于第一个数,前面小于第一个数时就交换搜到的数据。当两个搜索指针相遇时,就交换第固定数和相遇数。交换后结果为:相遇位置数左边数小,比右边的数大。

e9baecf0-6eac-11ed-8abf-dac502259ad0.png

将其按照相遇位置前后分成两组:分别重复上面内容直到分治完成。

e9d97bac-6eac-11ed-8abf-dac502259ad0.png

下边开始编写分治算法代码,图中有需要调用相同的算法需要用到递归,我们把主体算法和递归部分分离,创建一个VI命名为Devide Core,VI属性设置如下:

e9f69b74-6eac-11ed-8abf-dac502259ad0.png

ea04e742-6eac-11ed-8abf-dac502259ad0.png

分治核心代码

ea20be0e-6eac-11ed-8abf-dac502259ad0.png

ea40e01c-6eac-11ed-8abf-dac502259ad0.png

ea5a234c-6eac-11ed-8abf-dac502259ad0.png

ea6d9f44-6eac-11ed-8abf-dac502259ad0.png

测试后1000次时间为0.58秒,2000次时间为2.20秒,比冒泡排序有了很大的改善,那么有没有更快的优化方案呢?看下边异步分治排序法。

e6822012-6eac-11ed-8abf-dac502259ad0.png

五、过滤器模式Pro-异步分治排序

eaa8f1d4-6eac-11ed-8abf-dac502259ad0.png

如上图所示,我们第一次分组后,组一执行完后再执行组二,组一和组二的数据互不干扰,那么我们将异步执行组一和组二,以空间换时间。

具体代码改造如下:

1、将数据转换为引用类型;

2、将组一和组二异步执行。

具体代码如下:

异步分治排序算法:

eac2ddf6-6eac-11ed-8abf-dac502259ad0.png

异步分治核心:

eadee2c6-6eac-11ed-8abf-dac502259ad0.png

测试代码:

eb2d48da-6eac-11ed-8abf-dac502259ad0.png

eb4a2590-6eac-11ed-8abf-dac502259ad0.png

eb6c9648-6eac-11ed-8abf-dac502259ad0.png

eb8084a0-6eac-11ed-8abf-dac502259ad0.png

有上面例子可以看出,使用异步分治排序算法,排序速度有了指数级别提升。

审核编辑:郭婷

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

    关注

    2013

    文章

    3681

    浏览量

    344273
  • 过滤器
    +关注

    关注

    1

    文章

    442

    浏览量

    20835

原文标题:LabVIEW的编程之道—过滤器模式Por

文章出处:【微信号:LabVIEW的编程之道,微信公众号:LabVIEW的编程之道】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    rt-thread studio里面如何设置CAN过滤器

    这个是我配置的过滤器,想问下大家这个设置的为啥不起作用啊,我的环境是rt-thread studio,然后版本是5.1,板子是野火的STM32H743
    发表于 09-10 08:11

    ART-PI 使用CAN硬件过滤器打开后接收中断异常的原因?

    开启硬件过滤器后,出现如下断言异常,不开启硬件过滤器,接收数据正常 (hdr < can->config.maxhdr && hdr
    发表于 09-10 07:10

    rt-thread studio里面如何设置CAN过滤器呢?

    这个是我配置的过滤器,想问下大家这个设置的为啥不起作用啊,我的环境是rt-thread studio,然后版本是5.1,板子是野火的STM32H743
    发表于 08-22 07:45

    宏集案例 | 时间继电器在真空过滤器上的应用

    近年来,随着国家对资源、能源有效利用率的要求越来越高,对环境保护和水处理的要求也越来越严格,因此有大量的固液分离问题需要解决。真空过滤器是是由负压形成真空过滤的固液分离机械。用过滤介质把容器分为上
    的头像 发表于 08-08 18:12 428次阅读
    宏集案例 | 时间继电器在真空<b class='flag-5'>过滤器</b>上的应用

    激光焊接技术在焊接过滤器的工艺应用

    过滤器作为工业设备、汽车及电子产品的关键部件,其制造质量直接影响系统性能和寿命。激光焊接技术凭借其精密、高效与可靠的特性,正逐步成为过滤器焊接工艺的核心解决方案,解决了传统焊接方法难以克服的挑战
    的头像 发表于 07-10 15:08 343次阅读
    激光焊接技术在焊接<b class='flag-5'>过滤器</b>的工艺应用

    最先进的过滤器监测@SENSIRION

    AndriesBosma(气体流动产品经理),ManuelEckstein(暖通空调大客户经理)在需要清洁空气的地方,空气过滤器通常就在不远处。在过去十年里,过滤行业在过滤技术方面取得了巨大进步
    的头像 发表于 07-08 12:05 356次阅读
    最先进的<b class='flag-5'>过滤器</b>监测@SENSIRION

    节并传感完成超千万元融资,加速高端过滤器国产化进程

    膜材研发迭代工作,助力破局高端过滤器”卡脖子”难题, 加速高精度膜过滤器国产替代进程。 节并传感(Gibeing)位于江苏省苏州市,成立于2022年,致力于微孔膜及生物过滤相关耗材的研发及销售。目前公司主要产品为生物制药
    的头像 发表于 05-16 18:17 818次阅读
    节并传感完成超千万元融资,加速高端<b class='flag-5'>过滤器</b>国产化进程

    STM32G0B1VE芯片的CAN过滤器分为掩码模式和列表模式,在列表模式下,可过滤多少个ID呢?

    STM32G0B1VE芯片的CAN过滤器分为掩码模式和列表模式,在列表模式下,可过滤多少个ID呢?芯片手册中未有详细说明
    发表于 03-12 07:16

    神经网络压缩框架 (NNCF) 中的过滤器修剪统计数据怎么查看?

    无法观察神经网络压缩框架 (NNCF) 中的过滤器修剪统计数据
    发表于 03-06 07:10

    云计算开发工具包的功能

    随着云计算技术的不断成熟,越来越多的企业开始将应用和服务迁移到云端,以享受弹性计算资源、高可用性和成本效益等优势。为了加速这进程,云计算服务提供商推出了各种开发工具包。下面,AI部落小编带您了解云计算开发工具包的主要功能。
    的头像 发表于 02-21 11:02 553次阅读

    解析ECAN-E02单过滤器CAN硬件过滤

    什么是CAN总线?CAN(ControllerAreaNetwork)总线是种用于车辆电子设备之间通信的标准协议。CAN过滤器是用来过滤CAN总线上收到的消息,从而确保只处理特定的数据帧。在CAN
    的头像 发表于 01-16 19:35 694次阅读
    解析ECAN-E02单<b class='flag-5'>过滤器</b>CAN硬件<b class='flag-5'>过滤</b>

    Labview声音和振动工具包示例文件Sound Level

    Labview 声音和振动工具包示例文件,声压测试,有模拟和DAQ两个文件。
    发表于 01-05 09:15 5次下载

    CAN协议的软件过滤和硬件过滤

    过滤器来只接收特定的消息。CAN的过滤分为软件过滤和硬件过滤。往期推荐:《CH32FV系列CAN设备过滤器配置》《讲解CH32FV系列32位
    的头像 发表于 12-26 19:33 1023次阅读
    CAN协议的软件<b class='flag-5'>过滤</b>和硬件<b class='flag-5'>过滤</b>

    英迈仪器在线过滤器:精准过滤,守护精密分析仪器

    在精密分析仪器的使用过程中,任何微小的颗粒干扰都可能对实验结果产生重大影响,甚至导致设备损坏。为了确保分析的准确性和仪器的长期稳定运行,Instrumax(英迈仪器)精心研发了全新的在线过滤器,为
    的头像 发表于 12-26 14:03 1082次阅读

    USB音频过滤器驱动程序安装

    电子发烧友网站提供《USB音频过滤器驱动程序安装.pdf》资料免费下载
    发表于 12-19 14:28 0次下载
    USB音频<b class='flag-5'>过滤器</b>驱动程序安装