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
    +关注

    关注

    1974

    文章

    3656

    浏览量

    324330
  • 过滤器
    +关注

    关注

    1

    文章

    430

    浏览量

    19650

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    【教程】讲解CH32FV系列32位CAN硬件过滤

    简介32位硬件过滤器与16位硬件过滤器样具有两种模式32位标识符模式与32位屏蔽位模式。32位
    的头像 发表于 11-08 01:05 286次阅读
    【教程】讲解CH32FV系列32位CAN硬件<b class='flag-5'>过滤</b>

    文理解布隆过滤器和布谷鸟过滤器

    是否存在集合中 。布隆过滤器并不存储集合中的所有元素,而是存储元素的哈希表示,因此牺牲了些精确性: 当布隆过滤报告某元素在集合中不存在时,那么它定不存在;报告某元素存在时,允许出现
    的头像 发表于 11-07 10:10 726次阅读
    <b class='flag-5'>一</b>文理解布隆<b class='flag-5'>过滤器</b>和布谷鸟<b class='flag-5'>过滤器</b>

    CH32FV系列CAN设备过滤器配置

    简介CAN作为总线通信协议,在总线上可能会有大量的数据同时传输,适当的过滤机制可以提升数据处理的效率,节省处理器的资源。通过配置CAN过滤器定义自己的数据接收规则,只接收和处理符合规程的CAN数据
    的头像 发表于 10-11 08:03 315次阅读
    CH32FV系列CAN设备<b class='flag-5'>过滤器</b>配置

    优化TPS62097 Output过滤器

    电子发烧友网站提供《优化TPS62097 Output过滤器.pdf》资料免费下载
    发表于 10-08 11:19 0次下载
    优化TPS62097 Output<b class='flag-5'>过滤器</b>

    PLC工业过滤器数据采集物联网解决方案

    换热器的铜管,降低换热率,影响整个冷却系统效果。 因此往往需要加装工业过滤器以去除原料或产品中的杂质,确保产品质量。对此,物通博联提供PLC工业过滤器数据采集系统,以实现过滤器的智能化监控与管理,及时发现
    的头像 发表于 09-23 10:37 271次阅读
    PLC工业<b class='flag-5'>过滤器</b>数据采集物联网解决方案

    康谋分享 | ADTF过滤器全面解析:构建、配置与数据处理应用

    送数据。接下来,将分享ADTF中创建和使用过滤器,包括设置输入输出针脚(Pins)、配置触发器(Triggers)以及处理数据样本(Samples)。过滤器基础过
    的头像 发表于 09-18 09:42 2566次阅读
    康谋分享 | ADTF<b class='flag-5'>过滤器</b>全面解析:构建、配置与数据处理应用

    艾体宝干货 | 用于故障排除的最佳 Wireshark 过滤器

    Wireshark是种流行的网络协议分析工具,可用于捕获和分析网络数据。在网络故障排除中,Wireshark是款不可或缺的工具,它可以
    的头像 发表于 05-29 15:40 600次阅读
    艾体宝干货 | 用于故障排除的最佳 Wireshark <b class='flag-5'>过滤器</b>

    信号分析和过滤器的作用

    在通信、电子工程、计算机科学等多个领域,信号分析与过滤器扮演着举足轻重的角色。信号分析不仅涉及信号的获取、处理、分析和判断,更是从复杂的信号中提取有用信息,进行精确解读的关键过程。而过滤器,作为种特定的信号处理技术,则在此过程
    的头像 发表于 05-16 17:20 798次阅读

    谷歌搜索引擎添加&quot;Web&quot;过滤器,仅展示文本链接

    启用“Web”过滤器后,搜索结果将避免包括论坛、视频、新闻、图片等各类链接,仅呈现传统的蓝色链接,仿佛回到了2007年之前的通用搜索模式
    的头像 发表于 05-16 11:21 423次阅读

    请问STM32对过滤器编号时有哪些注意事项?

    STM32对过滤器编号时有哪些注意事项?
    发表于 04-12 08:23

    康谋技术| 揭秘汽车功能的核心——深度解读ADTF中的过滤器

    和可视化。而在ADTF软件中,过滤器图(如图1 Filter Graph所示)则是至关重要的,这也是我们理解和应用ADTF的关键所在。下面就让我们深入探索过滤器图的奥秘,揭示它在汽车功能开发中的核心作用
    的头像 发表于 02-04 11:18 579次阅读
    康谋技术| 揭秘汽车功能的核心——深度解读ADTF中的<b class='flag-5'>过滤器</b>图

    AN-B-099:DA14535 减少净排放过滤器应用说明

    电子发烧友网站提供《AN-B-099:DA14535 减少净排放过滤器应用说明.pdf》资料免费下载
    发表于 01-31 10:12 0次下载
    AN-B-099:DA14535 减少净排放<b class='flag-5'>过滤器</b>应用说明