精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    關注

    1964

    文章

    3652

    瀏覽量

    322563
  • 過濾器
    +關注

    關注

    1

    文章

    427

    瀏覽量

    19563

原文標題:LabVIEW的編程之道—過濾器模式Por

文章出處:【微信號:LabVIEW的編程之道,微信公眾號:LabVIEW的編程之道】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【教程】講解CH32FV系列32位CAN硬件過濾

    簡介32位硬件過濾器與16位硬件過濾器樣具有兩種模式32位標識符模式與32位屏蔽位模式。32位
    的頭像 發表于 11-08 01:05 ?163次閱讀
    【教程】講解CH32FV系列32位CAN硬件<b class='flag-5'>過濾</b>

    文理解布隆過濾器和布谷鳥過濾器

    是否存在集合中 。布隆過濾器并不存儲集合中的所有元素,而是存儲元素的哈希表示,因此犧牲了些精確性: 當布隆過濾報告某元素在集合中不存在時,那么它定不存在;報告某元素存在時,允許出現
    的頭像 發表于 11-07 10:10 ?628次閱讀
    <b class='flag-5'>一</b>文理解布隆<b class='flag-5'>過濾器</b>和布谷鳥<b class='flag-5'>過濾器</b>

    CH32FV系列CAN設備過濾器配置

    簡介CAN作為總線通信協議,在總線上可能會有大量的數據同時傳輸,適當的過濾機制可以提升數據處理的效率,節省處理器的資源。通過配置CAN過濾器定義自己的數據接收規則,只接收和處理符合規程的CAN數據
    的頭像 發表于 10-11 08:03 ?209次閱讀
    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 ?211次閱讀
    PLC工業<b class='flag-5'>過濾器</b>數據采集物聯網解決方案

    康謀分享 | ADTF過濾器全面解析:構建、配置與數據處理應用

    送數據。接下來,將分享ADTF中創建和使用過濾器,包括設置輸入輸出針腳(Pins)、配置觸發器(Triggers)以及處理數據樣本(Samples)。過濾器基礎過
    的頭像 發表于 09-18 09:42 ?2455次閱讀
    康謀分享 | ADTF<b class='flag-5'>過濾器</b>全面解析:構建、配置與數據處理應用

    艾體寶干貨 | 用于故障排除的最佳 Wireshark 過濾器

    Wireshark是種流行的網絡協議分析工具,可用于捕獲和分析網絡數據。在網絡故障排除中,Wireshark是款不可或缺的工具,它可以
    的頭像 發表于 05-29 15:40 ?527次閱讀
    艾體寶干貨 | 用于故障排除的最佳 Wireshark <b class='flag-5'>過濾器</b>

    信號分析和過濾器的作用

    在通信、電子工程、計算機科學等多個領域,信號分析與過濾器扮演著舉足輕重的角色。信號分析不僅涉及信號的獲取、處理、分析和判斷,更是從復雜的信號中提取有用信息,進行精確解讀的關鍵過程。而過濾器,作為種特定的信號處理技術,則在此過程
    的頭像 發表于 05-16 17:20 ?649次閱讀

    谷歌搜索引擎添加&quot;Web&quot;過濾器,僅展示文本鏈接

    啟用“Web”過濾器后,搜索結果將避免包括論壇、視頻、新聞、圖片等各類鏈接,僅呈現傳統的藍色鏈接,仿佛回到了2007年之前的通用搜索模式
    的頭像 發表于 05-16 11:21 ?345次閱讀

    請問STM32對過濾器編號時有哪些注意事項?

    STM32對過濾器編號時有哪些注意事項?
    發表于 04-12 08:23

    康謀技術| 揭秘汽車功能的核心——深度解讀ADTF中的過濾器

    和可視化。而在ADTF軟件中,過濾器圖(如圖1 Filter Graph所示)則是至關重要的,這也是我們理解和應用ADTF的關鍵所在。下面就讓我們深入探索過濾器圖的奧秘,揭示它在汽車功能開發中的核心作用
    的頭像 發表于 02-04 11:18 ?524次閱讀
    康謀技術| 揭秘汽車功能的核心——深度解讀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>應用說明

    前置過濾器的使用壽命有多長?

    前置過濾器的使用壽命有多長? 前置過濾器的使用壽命有多長,這是個相對而言的概念,因為它的使用壽命取決于多個因素。下面將詳細介紹前置過濾器
    的頭像 發表于 12-11 11:38 ?1106次閱讀

    springboot過濾器和攔截器哪個先執行

    Spring Boot是個用于構建Java應用程序的開發框架,它提供了許多功能和工具來簡化開發和部署過程。其中兩個重要的功能是過濾器和攔截器。本文將詳細介紹Spring Boot
    的頭像 發表于 12-03 15:00 ?2445次閱讀

    LabVIEW開發自適應降噪ANC

    。本文介紹使用自適應篩選器工具包的ANC的些實際示例。 ANC應用程序使用自適應過濾器,這些過濾器的系數會根據特定標準自動調整。通過
    發表于 11-30 19:38