<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于LabVIEW和聲卡的虛擬儀器設計與實現

          基于LabVIEW和聲卡的虛擬儀器設計與實現

          作者: 時間:2014-07-21 來源:網絡 收藏

            摘要:為了在對采樣頻率要求不高的情況下進行信號的生成和分析,采用取代價格昂貴的數據采集卡進行采樣和輸出,利用開發(fā)軟件,分別設計和實現了基于的虛擬信號發(fā)生器和虛擬示波器。信號發(fā)生器可以產生方波、三角波等常用波形和自定義波形,示波器具有波形顯示、圖像暫停和截取以及頻譜分析功能,所設計的具有友好的人機界面,只需兩臺計算機即可進行完整的自測試。

          本文引用地址:http://www.ex-cimer.com/article/255832.htm

            在電子與通信行業(yè)以及試驗測試中,信號發(fā)生器和示波器是應用最廣泛的電子測量儀器。傳統(tǒng)儀器的技術和性能都已經比較成熟,但存在體積較大、不易攜帶、功能固定、并且價格昂貴等缺點。是計算機技術與儀器技術深層次結合產生的產物,代表了當前測試儀器的發(fā)展方向之一。虛擬儀器系統(tǒng)的必備組件包括功能強大的編程工具、靈活易用的數據采集硬件及個人電腦。在實際測量中,需根據需求選擇相應的數據采集卡,但這些卡的價格均比較昂貴,而同樣具備A/D功能的是一個非常優(yōu)秀的音頻信號采集系統(tǒng),具有16位量化精度,數據采集頻率可達到44.1 kHz且已成為大多數計算機的標準配置,當所研究信號的頻率范圍在音頻范圍內(20 Hz~20 kHz)時,利用聲卡進行數據采集便是一個更好的選擇。

            文中基于虛擬儀器的設計概念,利用方便廉價的計算機聲卡分別設計和實現了虛擬信號發(fā)生器和虛擬示波器,特別適合于實驗室環(huán)境下低頻信號的產生與分析。本文使用聲卡進行A/D、D/A轉換以及信號的采集和播放,使用軟件設計了虛擬儀器的前面板并實現相關信號的運算、分析和處理。所設計的虛擬信號發(fā)生器和示波器具有傳統(tǒng)儀器的功能,相比于傳統(tǒng)儀器,具有成本低廉、使用方便、擴展性強等優(yōu)點。

            1 虛擬儀器技術和聲卡工作原理

            1. 1 虛擬儀器的特點

            虛擬儀器首先是由美國國家儀器公司于20世紀80年代中期提出來的,實現“軟件即儀器”的概念。隨著計算機技術和大規(guī)模集成電路的飛速發(fā)展,虛擬儀器技術也得到了很大的發(fā)展。虛擬儀器的實質是將傳統(tǒng)儀器硬件和計算機軟件技術結合起來,以實現并擴展儀器的功能。計算機軟件是虛擬儀器的核心,硬件只是為了解決信號的輸入輸出,虛擬儀器集成了儀器的所有采集、控制、數據分析、結果輸出和用戶界面等功能,使傳統(tǒng)儀器的部分硬件甚至整個儀器都被計算機軟件代替。

            虛擬儀器實現了儀器的智能化、模塊化和多樣化,體現出多功能、低成本等操作優(yōu)點。與傳統(tǒng)儀器相比,虛擬儀器具有更廣的應用領域,因此它成為儀器行業(yè)發(fā)展的一個重要方向,并受到許多國家儀器行業(yè)的重視。

            虛擬儀器開發(fā)平臺目前主要有兩類:一類是基于傳統(tǒng)語言的Turbo C,Microsoft公司的Visual Basic與Visual C++等,這類語言需要開發(fā)人員有較多的編程經驗和較強的調試能力;另一類是專業(yè)圖形化編程軟件,如HP公司的VEE,NI公司的和LabWindows/CVI等。

            1. 2 LabVIEW開發(fā)平臺

            LabVIEW是一個很好的圖形化開發(fā)環(huán)境,專為數據采集和儀器控制而設計,它將信號采集、測量分析和數據顯示功能集中在同一個開放式的開發(fā)環(huán)境中。LabVIEW具有豐富的庫函數供用戶調用,圖形化的編程語言簡單直觀、開發(fā)速度快,在編寫程序的同時可以自動生成圖形化用戶界面,可充分利用計算機強大的計算和顯示功能,被廣泛應用與自動控制和測試領域中。

            1. 3 聲卡工作原理

            聲音的本質是一種波,表現為振幅、頻率和相位等物理量的連續(xù)變化。聲卡是計算機進行聲音處理的適配器,它有3個基本功能:一是音樂合成發(fā)音功能;二是混音器(Mixer)功能和數字信號處理(DSP)功能;三是模擬聲音信號的輸入和輸出功能。聲卡是一個非常優(yōu)秀的音頻信號采集系統(tǒng),其數字信號處理包括模數變換器ADC(Analogue Digital Converter)和數模變換器DAC(Digital Analogue Converter),ADC用于采集音頻信號,DAC則用于重現這些數字聲音。

            聲卡的技術指標包括采樣頻率、采樣位數(量化精度)、聲道數、復音數量、信噪比(SNR)和總諧波失真(THD)等,其中采樣頻率、采樣位數是主要指標?,F在的聲卡一般采用PCI接口,具有16位采樣精度,支持雙通道,最高采樣頻率達44.1kHz。

            聲卡已成為多媒體計算機的一個標準配置,因此基于聲卡的虛擬儀器具有成本低,兼容性好,通用性和靈活性強的優(yōu)點,驅動程序升級方便,可以不受硬件限制,安裝在多臺計算機上,具有很好的可行性。

            2 虛擬信號發(fā)生器設計

            文中在LabVIEW開發(fā)平臺下設計并實現了雙通道虛擬信號發(fā)生器,設計中主要利用了LabVIEW提供的聲卡驅動函數,所設計的雙通道虛擬信號發(fā)生器能夠產生常用的基本波形,并且實現了頻率顯示,頻率調節(jié),幅值調節(jié),直流偏置調節(jié)和頻率掃描等功能。整個程序結構設計采用在LabVIEW狀態(tài)機的基礎上引入事件結構的方法,提高了程序的運行效率。

            2.1 LabVIEW中有關聲卡信號輸出的主要函數

            在虛擬信號發(fā)生器的設計中,用到了LabVIEW軟件“聲音輸出”模塊部分的函數,如圖1所示。下面對設計過程中用到的主要函數及其功能作簡單介紹:

            1)“配置聲音輸出”函數。該函數的作用是配置一個生成數據的聲音輸出設備,初始化聲卡的配置,包括采樣頻率,采樣模式,聲卡參數等。

            2)“設置聲音輸出音量”函數。該函數用來設置聲音輸出設備的播放音量。

            3)“寫入聲音輸出”函數。該函數將準備好的數據寫入聲卡驅動程序進行播放輸出。

            4)“聲音輸出清零”函數。該函數使設備停止播放音頻,清空緩存,將任務返回至默認的未配置的狀態(tài),并清空與任務相關的資源,將任務變?yōu)闊o效。

            

           

            2.2 虛擬信號發(fā)生器的前面板設計

            前面板為用戶提供了友好的操作界面,本文根據傳統(tǒng)儀器的操作面板和本儀器所能實現的功能設計了虛擬信號發(fā)生器的前面板,如圖2所示。前面板主要由四個部分組成,包括波形顯示部分、公共參數設置部分、CH1通道和CH2通道設置部分。波形顯示部分用于顯示兩個通道的輸出波形,公共參數設置部分用于設置聲卡的采樣率、通道數、采樣位數、緩沖區(qū)大小和音量,CH1和CH2通道進行設置每個通道生成的波形參數,包括波形類型、頻率、偏移量、幅度、方波占空比、噪聲等,并可以利用公式輸出自定義波形。

          dc相關文章:dc是什么


          c++相關文章:c++教程


          模數轉換器相關文章:模數轉換器工作原理


          負離子發(fā)生器相關文章:負離子發(fā)生器原理
          離子色譜儀相關文章:離子色譜儀原理

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();