基于聲卡的虛擬示波器設計【畢業(yè)論文】_第1頁
基于聲卡的虛擬示波器設計【畢業(yè)論文】_第2頁
基于聲卡的虛擬示波器設計【畢業(yè)論文】_第3頁
基于聲卡的虛擬示波器設計【畢業(yè)論文】_第4頁
基于聲卡的虛擬示波器設計【畢業(yè)論文】_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、中北大學2013屆畢業(yè)設計說明書基于聲卡的虛擬示波器設計摘 要當今的世界正以一種前所未有的速度發(fā)展著,科技的發(fā)展更是日新月異。計算機擁有著強大的數(shù)據(jù)處理能力,故而成為人們生活中必不可少的一部分。本文正是利用計算機所具有的不可代替的邏輯運算能力,使得實現(xiàn)虛擬儀器的開發(fā)變?yōu)榭赡?,理論上可以設計出基于聲卡的虛擬示波器。雖然傳統(tǒng)儀器得到迅猛的發(fā)展,精度越來越高,功能越來越強,性能越來越好,但傳統(tǒng)儀器仍然是由廠家設定好的封閉結(jié)構(gòu),有固定的輸入輸出和儀器操作面板。每種儀器實現(xiàn)一種特定的功能,并以確定的方式提供給用戶。我國的高檔儀器主要依賴進口,因為目前國內(nèi)的技術(shù)水平還不夠成熟,沒有達到世界先進水平,所以試

2、圖研究一種簡單方便、成本低又能夠滿足需求的虛擬示波器是非常有必要的。聲卡的性能指標已經(jīng)非常成熟,擁有非常優(yōu)越的A/D轉(zhuǎn)換性能,再加上LabWindows/CVI的強大的函數(shù)庫和驅(qū)動庫,使得研制虛擬示波器變得更加方便和靈活。本文利用計算機聲卡代替?zhèn)鹘y(tǒng)意義上的數(shù)據(jù)采集卡,設計了一種雙通道數(shù)字存儲示波器。由于聲卡所能承載的最大電壓是1V,通過聲卡的采集的輸入信號只能限定在1V以內(nèi)。在這個前提下,本示波器最高可以達到44.1KHz的采樣頻率,量化精度是16位?;诼暱ǖ奶摂M示波器通過計算機的I/O接口聲卡采集到需要測量的信號,通過軟件編程對信號進行運算、分析、顯示,可以通過計算機的顯示器觀察到設計的面

3、板,并且可以通外接設備(如鼠標或鍵盤)對事先設計好的面板進行操作,達到替代傳統(tǒng)儀器的目的。關(guān)鍵詞:虛擬儀器、虛擬示波器、聲卡、LabWindowsThe Design of a Virtual Oscilloscope Based on Sound CardABSTRACTWe are living in a world developing in a speed never seen before, and the development of technology changes with new day. So far, people cannot live without comput

4、ers because of their powerful processing capacity. What we use in this paper is the logically computing power of computers which is irreplaceable, so it makes it possible to develop virtual instruments or a virtual oscilloscope at last. Though traditional instruments have reached a new level, and th

5、ey have got high precision, better function and performance. However, traditional instruments always cannot get rid of close structure, fixed I/O and operation panel. In addition, every instrument offers a fixed function to users in a set way. In our country, we import top grade instruments because

6、we have not grasp this technology which is advanced in the world. So it is necessary to develop a simple and cheap virtual oscilloscope. People have done a lot about PC card which can transform analog signal to digital signal in a unexceptionable mode. Together with powerful function library and dri

7、ve library, it becomes more convenient and versatile. In this paper, we design a two-channel stored digital oscilloscope making use of Sound card instead of traditional data acquisition card. In fact, 1V is the maximum voltage that Sound card can stand, so we must limit the input voltage under 1V. I

8、f the instrument works properly, its sample frequency can reach 44.1 KHz, and its quantification precision is 16 bits. The virtual oscilloscope collect signal from computer input -PC card, and calculate, process, display the signals, and users can operate the panel with external device(mouse or keyb

9、oard) just like using traditional oscilloscope. Key Words:Virtual Instrument, Virtual Oscilloscope, PC card, LabWindows目 錄1 引言11.1 課題研究背景及意義11.2 國內(nèi)外研究現(xiàn)狀21.3 本文的主要研究內(nèi)容31.4 主要章節(jié)安排41.5 本章小結(jié)42 LabWindows/CVI編程環(huán)境的介紹52.1 LabWindows/CVI簡介52.2 創(chuàng)建用戶界面52.3 添加相應代碼72.4 本章小結(jié)73 虛擬示波器的模塊化設計83.1 信號采集模塊83.2 波形顯示模塊93

10、.3 頻譜分析模塊103.4 波形調(diào)節(jié)模塊113.5 信號存儲模塊203.6 其他功能模塊213.7 本章小結(jié)214 虛擬示波器實驗驗證224.1 光標功能驗證224.2 頻率精度及范圍驗證254.3 移動功能驗證304.4縮放功能驗證324.5 本章小結(jié)335 總結(jié)35參 考 文 獻36致 謝381 引言1.1 課題研究背景及意義虛擬儀器技術(shù)是以各專業(yè)學科知識為應用背景,以計算機軟、硬件技術(shù)為核心,把傳感器技術(shù)、自動控制技術(shù)、現(xiàn)代網(wǎng)絡技術(shù)、現(xiàn)代信號處理技術(shù)、數(shù)值分析技術(shù)有效整合在一起的現(xiàn)代測試技術(shù),是目前自動測試與電子測量儀器技術(shù)發(fā)展的重要方向1,2。它基于個人電腦的測控設備或系統(tǒng),通常由計

11、算機、測控電路模塊和專門應用軟件組成,通過人機交互來完成對信號的采集、分析、處理和顯示。虛擬儀器具有性能高、功能強、操作方便、自動化程度高、開發(fā)周期短以及易于實現(xiàn)軟硬件的系統(tǒng)集成和構(gòu)建多用途的測控系統(tǒng)等優(yōu)點3。其主要任務是通過軟件將計算機硬件與儀器硬件有機結(jié)合一起,將以前需硬件實現(xiàn)的相關(guān)技術(shù)通過軟件來實現(xiàn),完成對被測信號的采集、分析、處理、判斷及顯示等一系列功能。由于虛擬示波器擁有了靈活、迅速和低成本等優(yōu)點,使得它逐漸代替了傳統(tǒng)的臺式儀器4。20世紀70年代,由于個人電腦技術(shù)的出現(xiàn),人們開始考慮用電腦來處理傳統(tǒng)儀器測試的數(shù)據(jù);20世紀80年代,隨著計算機技術(shù)的進一步發(fā)展,計算機主板上有了多個擴

12、展槽,并出現(xiàn)了插在計算機里的數(shù)據(jù)采集卡,這樣的系統(tǒng)已經(jīng)可以進行一些簡單的數(shù)據(jù)采集工作,將采集到的數(shù)據(jù)直接由計算機軟件進行處理,這就是虛擬儀器技術(shù)的雛形5。憑借電腦強大的運算及分析能力,配合相關(guān)的硬件及軟件,組合成自己所需的各種儀器,對一些信號(如周期信號)進行處理,這正是虛擬儀器的興起6。虛擬示波器是虛擬儀器技術(shù)的應用,它使用下位機采集現(xiàn)場信號,通過接口電路傳輸數(shù)據(jù)到計算機,再借助強大的監(jiān)控軟件模擬示波器的操作面板,實現(xiàn)信號采集、分析、處理、存儲、顯示、打印輸出等功能7,9。世界上第一塊聲卡魔音卡,是由創(chuàng)新公司董事長沈望傅先生發(fā)明的。這只聲卡在當時引起了一場轟動。有的人認為,這是一個很好的開端

13、,因為PC終于可以“說話”了,并聯(lián)想到將來多媒體PC的模樣;但另有一些人卻認為,這只是一場鬧劇(因為當時的聲卡根本不能夠發(fā)出很真實的聲音)。但是,10年過后,正如前者所預料的,多媒體PC成了現(xiàn)今的標準,每個人都能利用自己的PC來聽CD、玩有聲游戲、通過Iphone等網(wǎng)絡電話來交談,幾乎每一樣事情都和PC音頻發(fā)生關(guān)系?,F(xiàn)在看起來,PC如果沒有了聲卡,也就沒有了繽紛多彩的多媒體世界10。聲卡是計算機與外部環(huán)境聯(lián)系的重要途徑,作為數(shù)據(jù)采集卡來使用,聲卡可以采集音頻范圍內(nèi)的信號。麥克風輸入的信號和喇叭輸出的信號都是模擬信號,而計算機所能識別和處理的信號都是數(shù)字信號,聲卡的作用之一就是實現(xiàn)模擬信號和數(shù)字

14、信號之間的轉(zhuǎn)換11。聲卡的組成部分主要包括:聲音控制/處理芯片,聲音輸入輸出端口和功放芯片等,其中集成了采樣保持、音效處理、A/D轉(zhuǎn)換、D/A轉(zhuǎn)換等電路的聲音控制/處理芯片是聲卡的核心,它對聲卡的性能和檔次起到了決定的作用,具有聲波采樣處理MIDI指令和回放控制等基本功能,有些聲音控制/處理芯片還加進了合聲、混響、音場調(diào)整等功能12。目前,在多數(shù)院校的電子學實驗教學中,常用的仍然是功能固定的臺式示波器。對于一所高等院校而言,臺式示波器成本很高,而且對于剛接觸的學生來講,既難以調(diào)試,又容易損壞,使用起來極其不方便,而虛擬示波器是利用計算機強大的資源使本來需要硬件實現(xiàn)的技術(shù)軟件化,以便最大限度的降

15、低系統(tǒng)成本,同時提高系統(tǒng)的靈活性13。虛擬示波器具有如下優(yōu)點:(1)由于虛擬示波器的內(nèi)容豐富,人機界面好,可以減輕教師的教學負擔,加深學生對知識的理解。(2)提高實驗效率,降低教學成本,參數(shù)輸入簡便,結(jié)果顯示明確。(3)借助虛擬示波器把儀器與計算機相連接,可以充分利用實驗資源14。示波器是科研機關(guān)、企業(yè)研發(fā)實驗室、大專院所的必備測量設備,傳統(tǒng)示波器缺乏相應的計算機接口配合數(shù)據(jù)采集及數(shù)據(jù)處理比較困難。隨著計算機技術(shù)和測量技術(shù)的發(fā)展,虛擬儀器技術(shù)得到飛快發(fā)展,虛擬示波器系統(tǒng)也就應運而生15。1.2 國內(nèi)外研究現(xiàn)狀 測試儀器已經(jīng)有很久的歷史,早些時候的一起都是完全的測試設備,比如EEG(electr

16、oencephalo- graph 腦電圖描記器)記錄系統(tǒng)和示波器,它們包括電源,傳感器,數(shù)字轉(zhuǎn)換和演示,需要人工的參數(shù)設置16。然而隨著虛擬儀器技術(shù)的發(fā)展,采用“虛擬儀器”來取代傳統(tǒng)儀器的新的測控方法正在取代傳統(tǒng)的測控系統(tǒng),即利用數(shù)據(jù)采集卡、信號調(diào)理卡或其他計算機外圍硬件進行信號的采集與檢測。然后由計算機來實現(xiàn)對信號的處理、計算和分析以及測試結(jié)果的顯示17。LabWindows/CVI是基于標準C語言的集成軟件開發(fā)環(huán)境,其開發(fā)虛擬儀器的步驟主要是先確定程序的基本框架,創(chuàng)建用戶界面,然后完成程序代碼的編寫,最后創(chuàng)建工程文件,將程序文件、頭文件、用戶界面文件加入工程中,編譯調(diào)試生成可執(zhí)行文件。虛

17、擬儀器在性能上更具有靈活性用戶可根據(jù)自身需要定制儀器的功能充分體現(xiàn)了它的優(yōu)越性徹底打破了傳統(tǒng)儀器由廠家定義用戶無法改變的模式18,19。1986年,美國國家儀器公司(National Instruments Crop.)首先提出了“軟件就是儀器”的概念。將虛擬儀器應用于教學和科研,已成為當今的發(fā)展趨勢。在采樣頻率不是很高的情況下,基于計算機聲卡的虛擬示波器將更加便宜和靈活,可以利用聲卡進行采樣和輸出,可以實現(xiàn)自動測量,這一點在LabVIEW(包括LabWindows)上已經(jīng)實現(xiàn)20?;谟嬎銠C的虛擬設備已經(jīng)得到很大發(fā)展,在某些程度可以代替?zhèn)鹘y(tǒng)的儀器儀表測試。設備的各個部分既可以分開工作,又可以

18、協(xié)作,具有很大的靈活性?;诼暱ǖ奶摂M示波器V0.94巧妙地利用電腦聲卡的AD/DA轉(zhuǎn)換電路,把電腦變成一臺集信號發(fā)生器、數(shù)字存儲示波器、頻率計、萬用表等多種功能于一體的儀器。在音頻范圍內(nèi)完全可以替代上述各種測量儀器,甚至功能更強大21,22。虛擬儀器產(chǎn)業(yè)在國內(nèi)的現(xiàn)狀和發(fā)展態(tài)勢不容樂觀。我國高檔臺式儀器如數(shù)字示波器主要依靠進口,一方面這些儀器加工工藝復雜、制造水平要求高,生產(chǎn)突破有困難;另一方面,用戶可以將一些先進的數(shù)字信號處理算法應用于虛擬儀器的設計,提供傳統(tǒng)臺式儀器所不具備的功能,而且完全可以通過軟件配置實現(xiàn)多功能集成的儀器設計23。而且我國的計算機技術(shù)通信電子等產(chǎn)業(yè)的起步比較晚,相對滯后

19、與歐美國家,因此我國對虛擬儀器的研究起步也比較晚,發(fā)展比較緩慢。一些高等院校和附屬高科技公司,在研究和開發(fā)儀器產(chǎn)品和虛擬式儀器設計平臺以及引進消化NI公司、HP公司的產(chǎn)品等方面做了一系列有益工作,取得了一批矚目的成果,部分院校的實驗室引入了虛擬儀器系統(tǒng),上海復旦大學、上海交通大學、廣州暨南大學、華中理工大學、四川聯(lián)合大學等24。近一、兩年來這些學校在原有的基礎上,又開發(fā)了一批新的虛擬儀器系統(tǒng)用于教學和科研。其中,華中理工大學機械學院工程測試實驗室將其開發(fā)成果在網(wǎng)上公開展示。四川聯(lián)合大學的教師基于虛擬儀器的設計思想,研制了航空電臺二線綜合測試儀將8臺儀器集成于一體,組成虛擬儀器系統(tǒng),使用方便、靈

20、活。清華大學汽車系利用虛擬儀器技術(shù)構(gòu)建的汽車發(fā)動機檢測系統(tǒng),用于汽車發(fā)動機的出廠檢驗。此外,國內(nèi)己有幾家企業(yè)在研制PC虛擬儀器,哈工大儀器王電子有限責任公司就是其中之一,它的產(chǎn)品已達到一定的批量。其主要產(chǎn)品有數(shù)字存儲示波器系列、任意波形發(fā)生器及頻率計系列、多通道大容量波形記錄儀系列25,26。1.3 本文的主要研究內(nèi)容利用計算機聲卡進行A/D轉(zhuǎn)換,將待測電壓信號轉(zhuǎn)換為數(shù)字量信號,并在LabWindows/CVI下設計可視化操作界面,實時顯示采集到的信號及經(jīng)頻譜分析后的曲線,并能對波形進行控制。利用C語言編寫相應的代碼,在LabWindows/CVI的環(huán)境下,實現(xiàn)對聲卡采集的信號進行顯示、分析、

21、存儲等,實現(xiàn)對外界數(shù)據(jù)的采集和處理,模擬傳統(tǒng)示波器的功能,完成基于聲卡的虛擬示波器設計。1.4 主要章節(jié)安排本說明書主要包括以下幾個章節(jié):1)第一章為引言,主要介紹了虛擬儀器(主要是虛擬示波器)的產(chǎn)生的原因以及國內(nèi)外發(fā)展情況的差距,并簡單介紹了聲卡的由來,最后簡要說明了本次設計的主要目的和要完成的內(nèi)容。2)第二章介紹如何使用LabWindows/CVI。它作為一門通用測試系統(tǒng)開發(fā)工具,已經(jīng)為很多工程師和科學家所接受。所以,通過描述它的使用方法,更容易了解所編程序的步驟和思路。 3)第三章為虛擬示波器的模塊化設計。這種將每個主要的功能分成一個模塊的方法,使得編程過程中條理清晰,易于發(fā)現(xiàn)錯誤,提高

22、工作的效率。其中包括:信號采集模塊、波形顯示模塊、頻譜分析模塊、波形調(diào)節(jié)模塊、信號存儲模塊等。4)第四章為實驗驗證階段。利用臺式機進行測試:利用信號發(fā)生器產(chǎn)生信號,接入聲卡的Line In輸入端,并且將信號同時接到傳統(tǒng)數(shù)字存儲示波器,執(zhí)行程序,將電腦屏幕顯示的波形與示波器顯示波形進行比對,以此判斷出本測試系統(tǒng)的精度。1.5 本章小結(jié)本章簡單介紹了課題研究的背景和意義,并且對聲卡的產(chǎn)生歷史、虛擬示波器的國內(nèi)外研究現(xiàn)狀以及本次課題的主要研究內(nèi)容和組成也做了一些介紹。下一章將對應用軟件LabWindows/CVI進行簡單的描述。2 LabWindows/CVI編程環(huán)境的介紹2.1 LabWindow

23、s/CVI簡介本次畢業(yè)設計首先要了解所用軟件LabWindows/CVI的具體用法,通過對工具的介紹,逐步過渡到設計的思路和具體實現(xiàn)辦法。LabWindows/CVI是National Instruments公司推出的一套面向測控領域的軟件開發(fā)平臺,它以ANSI C為核心,將功能強大,使用靈活的C語言平臺與數(shù)據(jù)采集,分析和表達的測控專業(yè)工具有機地接和起來.它的集成化開發(fā)平臺,交互式編程方法,豐富的控件和庫函數(shù)大大增強了C語言的功能,為熟悉C語言的開發(fā)人員建立檢測系統(tǒng)、自動測量環(huán)境、數(shù)據(jù)采集系統(tǒng)、過程監(jiān)控系統(tǒng)等提供了一個理想的軟件開發(fā)環(huán)境,具有廣闊的開發(fā)前景和市場價值,正是由于這些優(yōu)點,它早就已

24、經(jīng)被許許多多的工程師和科學家所接受和喜愛,各種關(guān)于虛擬儀器開發(fā)的報刊和書籍也蜂擁而至,這使得LabWindows/CVI應用越來越廣泛。2.2 創(chuàng)建用戶界面一個良好的交互界面能夠讓用戶對設計者開發(fā)的系統(tǒng)產(chǎn)生更大的興趣,提高工作和學習的效率,增加了一種美感,所以這對于開發(fā)者來說是必須關(guān)注的。打開軟件后,會出現(xiàn)軟件的許多選項,比如:打開、創(chuàng)建等。第一次使用時點擊創(chuàng)建新的工程,點擊New>Project,如圖2.1,下一次打開進入時可以直接進入上次的工程,無需重新創(chuàng)建,就可繼續(xù)未完成的工作。進入后點擊File>New>User Interface(*.uir)創(chuàng)建一個用戶接口文件(

25、*.uir) ,會出現(xiàn)一個默認的面板,如圖2.2,這樣可以在面板上添加所需部件了。 圖2.1 創(chuàng)建工程 圖2.2創(chuàng)建界面面板創(chuàng)建結(jié)束后,就可以通過右鍵或者點擊工具欄的Create按鈕可以在面板上加入需要的控件,比如:Numeric,Text,Command Button等,如圖2.3。根據(jù)個人的需要添加后,對控件的Control進行修改(具體的修改方式由個人需要而定)。比如:修改Graph的橫縱坐標,修改Command Button的標簽,或者加入Ring Dial的索引等等,如圖2.4。圖2.3添加控件圖2.4 對控件的Control進行修改2.3 添加相應代碼在這里可以很明顯的看出LabW

26、indows/CVI的強大之處了。這是由于:設置好界面后,利用LabWindows/CVI可以直接生成代碼框架,對于每個填寫Callback function的控件都有生成的函數(shù)框架,另外還有主函數(shù)。從用戶圖形界面窗口中選擇:Code>>Generate>>All Code,如圖2.5,并且會選擇需要程序停止時使用哪個控件,非常的方便和人性化。這個時候即使什么都不做了,程序會顯示設計好的界面,并且有停止按鈕,要想實現(xiàn)設定好的其他按鈕功能,比如:觸發(fā),光標定位等,就需要望函數(shù)中添加代碼。當然,一個復雜的程序光有生成好的框架是不夠的,還需要通過其他方式,比如多線程編寫部分代

27、碼,能夠使代碼簡潔,執(zhí)行效率高,更有效利用內(nèi)存。我在程序中寫了一些自己的函數(shù),比如,int MyFunction(void *Data, int Resolution, int NumDataPerChannel, int Stereo)等等。點擊Run>Debug就可以執(zhí)行程序,如果程序正確無誤,就會成功的執(zhí)行,如圖2.6。 圖2.5 生成代碼 圖2.6 執(zhí)行程序2.4 本章小結(jié)本章首先簡單介紹了設計軟件的環(huán)境-LabWindows/CVI。先簡單描述下它的功能,這也就是為什么選擇這款軟件的主要原因之一;接下來簡單描述進行虛擬儀器設計的一般步驟:設計面板,生成并添加代碼,執(zhí)行程序。3

28、虛擬示波器的模塊化設計示波器是生產(chǎn)實踐和科學實驗等常用的儀器之一,具有不可替代的作用。但是傳統(tǒng)示波器外形笨重,對使用者要求較高,而且生產(chǎn)傳統(tǒng)的臺式示波器工藝復雜、技術(shù)要求比較高、生產(chǎn)成本大,不可能全面推廣到各個科研和學習場所中,這就使得虛擬示波器應運而生,虛擬示波器相對傳統(tǒng)示波器有很多的優(yōu)點,如表3.1。本文所設計的是基于聲卡的虛擬示波器,是在LabWindows/CVI 2009平臺下實現(xiàn)的,聲卡是一個非常優(yōu)秀的音頻信號采集系統(tǒng),技術(shù)已經(jīng)非常的成熟,其數(shù)字信號處理器包括模數(shù)變換器ADC(Analogue Digital Converter)和數(shù)模變換器DAC(Digital Analogue

29、 Converter),本文只用到ADC,用于采集音頻信號。在前人的基礎上,利用前輩們設計好的聲卡驅(qū)動,實現(xiàn)信號的采集和一系列的功能。由于作者的能力有限,只能實現(xiàn)傳統(tǒng)示波器的基本功能,但對于基本信號的測量和觀測,已經(jīng)能夠滿足普通教學的需要,能為許多需要它的地方節(jié)省開支和資源。為了方便設計和其他需要的朋友閱讀,我采取了模塊化設計的方法,其中包括信號采集模塊、波形顯示模塊、頻譜分析模塊、波形調(diào)節(jié)模塊、信號存儲模塊以及其他功能模塊等。表3.1 傳統(tǒng)儀器和虛擬儀器對比 3.1 信號采集模塊本文的題目是基于聲卡的虛擬示波器,顧名思義,是在聲卡的基礎上設計的虛擬示波器,而不是常用的數(shù)據(jù)采集卡(DAQ),自

30、然不能直接運用LabWindows/CVI的函數(shù)庫來實現(xiàn)。信號的是從聲卡輸入端接入的,而官方又沒有提供相應的驅(qū)動,所以借用了參考書驅(qū)動聲卡的方法28。聲卡的輸入端口有兩個:分別是Line in端口和Mic in端口。Line in端口也就是線形輸入接口,將品質(zhì)較好的聲音、音樂信號輸入;Mic in端口用于連接麥克風(話筒),也就是錄制聲音。但是我們這里只能用Line in,這是由于Mic in具有放大作用,在聲卡的前置放大器中將信號放大了,而這個放大倍數(shù)又是不確定的,它受聲卡類型、系統(tǒng)、驅(qū)動等的影響。在主函數(shù)中,調(diào)用了聲卡配置函數(shù),用于獲取聲卡的配置信息,包括采樣點數(shù)、采樣位數(shù)、回調(diào)函數(shù)等。在

31、回調(diào)函數(shù)MyFunction()中,首先獲取通道數(shù),然后清除可能存在的曲線(如果事先進行了觸發(fā)),接下來利用switch(Resolution)進行分辨率的判斷,因為大多數(shù)聲卡的配置都是16位的,本文利用的聲卡也是如此。所以在16位的情況下,判斷聲卡的設置是不是立體聲,如果是,則進行雙聲道采集,將獲取的data也就是離散后的點的值存到相應的數(shù)組中,再進行接下來的一系列操作。信號采集是整個系統(tǒng)設計的第一步,是實現(xiàn)虛擬示波器的基礎,只有將信號采集進來之后,才能夠進行接下來一系列的工作,比如顯示、傅立葉變換、存儲等等。3.2 波形顯示模塊虛擬示波器界面是人機交換的唯一途徑,合理的、舒適的界面會讓用戶

32、感覺到舒適和愉悅,非常有利于工作和學習,提高效率,所以一個良好的可視化界面對于設計者來說至關(guān)重要,這直接影響著產(chǎn)品的好壞,直接影響它的推廣度,而LabWindows/CVI恰恰擁有圖形化的界面,可以很方便的在面板上添加所需要的控件,而不需要為了編制圖形控件浪費大量的時間,這為設計者提供了一個很好的展示平臺。在面板上添加一個用于圖形顯示的控件,這樣就創(chuàng)建了顯示屏,雙擊它進行屬性修改:將Callback function設置為show(這是回調(diào)函數(shù)的名稱),Bottom X-Axis內(nèi)的最小值和最大值分別設置為0和1023(這是由于屏幕顯示的是1024個點,每次數(shù)據(jù)更新都是1024個點同時更新),

33、Left Y-Axis內(nèi)的最小值和最大值分別設置為-1和+1(聲卡的輸入范圍是固定的,如果超過1V,可能會燒壞聲卡)。為了實現(xiàn)光標定位,還需要添加Cursors,在這個選項中,將光標的數(shù)量設置為2,并且將光標的顏色分別設置為紫色和淺綠色,并將交叉線形設置為長交叉(這樣使用起來更方便),其他的可以按照自己的喜好進行設置。在面板上添加一個用于表示控制開關(guān)的控件,單擊右鍵,將標簽改為實時顯示,并將Callback function 設置為realtime_show,默認狀態(tài)設置為on。再設置三個用于控制開始、停止和關(guān)閉的三個控件,分別將標簽設置為開始采集、停止采集、關(guān)閉,顏色大小可以按照自己習慣的方

34、式。另外,設置兩個圓形開關(guān)控件,設置為通道1和通道2,默認狀態(tài)設置為on。然后對控件點擊右鍵,選擇Generate Control Callback,生成函數(shù)框架,然后添加函數(shù)功能。在“開始采集”控件中,一旦觸發(fā),先將觸發(fā)模式關(guān)掉,開始采集里面調(diào)用MicStart()函數(shù),My Function()開始工作,信號采集進來,利用if()語句進行判斷實時顯示按鈕是否被選中,并且保證觸發(fā)沒有工作,通過判斷通道1或2才能將其中的波形顯示到Graph上,如果兩個通道都沒有被選中,則利用Message Popup()提出警告,“請選擇通道1或通道2”如圖3.1;同樣,停止采集時,調(diào)用MicPause()函

35、數(shù),My Function()停止工作。在realtime_show中,一旦程序執(zhí)行時,開始采集后點擊控件(同時實時顯示),則會顯示從聲卡讀取到的信號波形,可以在Graph上實時地觀測到,如圖3.2。 圖3.1 選擇通道 圖3.2 實時顯示波形3.3 頻譜分析模塊FFT(fast Fourier transform),即快速傅立葉變換,是一種DFT的高效算法,是一種線性的積分變換,屬于諧波分析,也可用于計算離散傅里葉變換的逆變換。其算法的原理是通過許多小的更加容易進行的變換去實現(xiàn)大規(guī)模的變換,降低了運算要求,提高了運算速度。快速傅里葉變換有廣泛的應用,如數(shù)字信號處理、計算大整數(shù)乘法、求解偏微分

36、方程等等。本文中并不需要了解復雜的算法,只需要利用軟件本身設計好的函數(shù)就可以,因為軟件設計者已經(jīng)將復雜難懂的算法利用程序代碼實現(xiàn)了,這里再次體現(xiàn)了LabWindows/CVI的優(yōu)越性。在面板上添加一個選擇控件,標簽設置為FFT計算,默認值設置為off,Callback function設置為fft,然后生成函數(shù)框架,在框架中添加一些語句。當控件被點擊后,先將面板的實時顯示控件、波形相加控件設置為不選中,F(xiàn)FT計算控件設置為選中,并將定義的全局變量real_time_show_mode(實時顯示)設置為0,wave_sum_mode(波形相加)設置為0,fft_calculate_mode(傅立

37、葉計算)設置為1。不僅如此,此時還要修改顯示縱坐標,這是由于快速傅立葉變換后,幅值不是采樣點的大小值,只是代表著能量大小的包絡,這里只能說明對于相應信號進行變化后的大致情況,或者說是快速傅立葉變化后的形狀等等。為了能夠描述出變化后的形狀,使用SetAxisScalingMode()函數(shù)設置變化后的縱坐標,這里的設定可以說是完全是為MyFunction()函數(shù)服務的,信號采集進來之后,進行傅立葉變換:首先將采樣點值設置為FFT的實部,通過循環(huán)使1024個點的虛部全部設定為0,然后利用FFT函數(shù)(FFT (wave, img, NumDataPerChannel),實現(xiàn)了傅立葉變換,再通過極坐標轉(zhuǎn)

38、換函數(shù)ToPolar1D ()計算出FFT后的幅值大小,再利用畫圖函數(shù)PlotY()將FFT后的波形顯示在Graph上,如圖3.3所示。圖3.3 聲音信號的快速傅立葉變換3.4 波形調(diào)節(jié)模塊在使用傳統(tǒng)示波器時,很少是只查看原始波形的,大多需要對采集進來的波形進行適當?shù)恼{(diào)節(jié),比如移動、放大等,這樣做的目的是能夠?qū)π盘栃畔⒏拥牧私?,便于進行分析和使用。因此,設計虛擬示波器時,必須要考慮到這些波形調(diào)節(jié)的問題,使得它更逼近于傳統(tǒng)示波器,甚至在部分功能上超越傳統(tǒng)示波器,是用戶擁有更佳的操作感受和更多的實用功能。本次基于聲卡的虛擬示波器設計中,波形調(diào)節(jié)模塊包括水平移動,垂直移動,水平放大縮小,垂直放大縮

39、小,光標定位和觸發(fā)控制,其中水平移動和垂直移動作為一個模塊,水平放縮和垂直放縮作為一個模塊。這些都是用戶在使用傳統(tǒng)示波器常用的功能,對于使用者來講是必不可少的。當然也是本文內(nèi)容的重要環(huán)節(jié),下面按照設計的順序逐一敘述。1)水平移動和垂直移動水平移動和垂直移動的原理是一樣的,都是通過修改坐標來實現(xiàn)的,只是設定的移動值大小不同而已。單擊右鍵,設置兩個旋鈕,分別將標簽設定為水平移動和垂直移動,相當于傳統(tǒng)示波器的水平和垂直旋鈕,并將Callback Function分別設置為horizontal_move和vertical_move。編輯Dial時,點擊Label/Value Pairs:水平移動控件添

40、加11個項目,標簽設置為0-10,對應值是-250250,遞增值是50,并把默認標簽設置為5(0);垂直控件同樣添加11個項目,標簽設置也是0-10,只是對應值是-0.50.5,遞增值是0.1,默認標簽也設置為5(0)。這里的50和0.1就是在程序執(zhí)行時旋轉(zhuǎn)一格旋鈕時移動的大小,是根據(jù)程序的要求設置的。圖3.4 移動波形流程圖在編制程序時,要設定一個臨時值tmp,用于獲取當前控件的Value大小,使用GetCtrlVal()語句;然后將這個值與cur_horizon_move_index(確切地說是上一次旋鈕停在的位置值大小,初始值是5)進行比較:如果tmp>cur_horizon_mo

41、ve_index,則說明旋鈕向右旋轉(zhuǎn)調(diào)節(jié)了,表示將圖像向右移動(或者向上移動)為了實現(xiàn)這個功能,將坐標的值最大值和最小值都減小,利用cur_x_min-=STEP_X來實現(xiàn),通過SetAxisRange()語句實現(xiàn);同樣,如果tmp<cur_horizon_move_index,則說明旋鈕向左旋轉(zhuǎn)調(diào)節(jié)了,表示將圖像向左移動(或者向下移動),實現(xiàn)的方法類似。值得注意的是,判斷時cur_x_min和cur_x_max這兩個坐標當前最小值和最大值也一定要隨時修改,判斷完后一定要修改cur_horizon_move_index的值,將它設置為tmp,如圖3.4。只有這樣才能保證移動的正確性,這樣

42、就可以實現(xiàn)水平和垂直移動,如圖3.5,3.6,3.7。 圖3.5 原始波形圖3.6 水平移動后的波形 圖3.7 垂直移動后的波形2)水平縮放和垂直縮放在實際應用中,將圖形放大和縮小狠關(guān)鍵的。很多情況下,用戶會將波形放大或者縮?。涸陲@示屏上波形比較密的情況下,需要看清波形是否存在失真,這時候需要將波形放大;或者顯示屏上顯示的波形不夠一個周期,需要看清到底是什么樣子的波形,這時需要將現(xiàn)有的波形進行縮小。通過以上類似的處理,能夠獲取更多的數(shù)據(jù)信息和規(guī)律,能夠從整體和局部兩個方面來分析現(xiàn)有的信號,這對于信號處理有著非常重要的意義,從而更快更好地完成工作。圖3.8 坐標放大,圖像縮小原理圖3.9 坐標縮

43、小,圖像放大原理為了與移動旋鈕有所區(qū)別,重新選擇兩個跟移動不同的旋鈕,分別將標簽設定為水平縮放和垂直縮放,相當于傳統(tǒng)示波器的水平和垂直縮放旋鈕,將Callback Function分別設置為horizontal_zoom和vertical_zoom。類似地,也要在這兩個控件上添加標簽:編輯Knob時,點擊Label/Value Pairs:水平移動控件添加11個項目,標簽設置為0-10,對應值是1/3232,遞增倍數(shù)是2,并把默認標簽設置為1(0)(表示不放大的信號狀態(tài)),對于垂直控件同樣如此。雖然實現(xiàn)縮放時利用的也是修改坐標的方法,但是實現(xiàn)的方法卻要麻煩點:設定當tmp<cur_hor

44、izon_scale_index時實現(xiàn)縮小,這時需要一個計算公式(tmp1和tmp2初始值分別是當前坐標的最大值和最小值,默認值是0和1023,也就是原始坐標),cur_x_min=tmp1-(tmp2-tmp1)/2.0和 cur_x_max=tmp2+(tmp2-tmp1)/2.0,分別得到新的坐標最小值和最大值,如圖3.8,利用上述計算,可以實現(xiàn)如下的坐標放大,圖像縮小。通過將坐標放大實現(xiàn)圖像縮?。环糯髸r的原理是一樣的,只是計算公式不同,設定當tmp>cur_horizon_scale_index時實現(xiàn)放大,這時設定的最大和最小值分別為cur_x_min=tmp1+(tmp2-tm

45、p1)/4.0和cur_x_max=tmp2-(tmp2-tmp1)/4.0,通過將坐標縮小實現(xiàn)圖像放大,如圖3.9。修改值后,還是利用SetAxisRange()函數(shù)來修改坐標,同樣要修改cur_horizon_move_index的值,將它設置為tmp。水平縮放和垂直縮放的原理和計算公式是完全一樣的,只是具體執(zhí)行的控件不同,以區(qū)分他們的不同功能,如圖3.10,3.11,3.12。圖3.10 初始波形圖3.11 水平放大圖3.12 垂直放大3)光標定位光標功能對于使用者來講是非常重要的。因為人眼的誤差很大,可以說是極大地浪費了示波器的資源,而擁有光標功能就使得情況得到改善,因為它把面板上的某

46、點信息數(shù)字化了,我們可以直接讀取數(shù)值的大小就可以了,不但提高了精度,而且使用時更佳的方便和直觀。對于測量工作來說,有著極為重要的意義。本來是打算利用StripChart作為顯示屏,但是StripChart本身并沒有光標的功能,在三個可供選擇的顯示面板中,只有Graph才有光標功能,所以只能使用Graph。為了顯示當前坐標值以及差值,在面板上添加6個Numeric控件,分別用來代表光標1和2的X、Y以及X和Y,并用text控件來修飾它們,但這些控件都只是顯示作用(Control mode都選擇Indicator,精度是double),沒有回調(diào)函數(shù),實現(xiàn)光標定位功能的代碼設置在Graph中,通過回

47、調(diào)函數(shù)show()實現(xiàn),只要在程序執(zhí)行時點擊顯示屏,光標功能就生效了,首先通過GetGraphCursor()函數(shù)分別獲取x1、y1、x2、y2的坐標,再通過公式換算出實際的時間大小,顯示在下邊的Numeric上。由于采樣頻率是22.04KHz,所以采樣點的兩點之間的間距是1/22.04K=0.454ms,x的值就是利用0.454*x,y的值需要調(diào)試修改公式,用實際的信號接進之后才能修改,x和y分別用time_diff=(x1-x2)>0)?(x1-x2):(x2-x1)*0.0454和vlotage_diff=(y1-y2)>0)?(y1-y2):(y2-y1)這兩個判斷語句來實

48、現(xiàn),從而保證了結(jié)果是正值,運算結(jié)束后,通過SetCtrlVal()語句將結(jié)果顯示到相應的Numeric上,實現(xiàn)了光標定位的功能,如圖3.13。圖3.13 光標定位功能4)觸發(fā)控制觸發(fā)控制是示波器必不可少的功能。當信號接入示波器后,并不是所有的信號都是用戶所關(guān)心的,而事實上周圍必然存在干擾信號,這是無法避免的。這時,研究一種方法可以使得面板上只顯示用戶感興趣的信號變得十分重要,觸發(fā)就這樣產(chǎn)生了。傳統(tǒng)示波器的觸發(fā)方式有很多種,比如:邊沿觸發(fā)、脈沖觸發(fā)、斜率觸發(fā)、交替觸發(fā)等。本系統(tǒng)只設計一種邊沿觸發(fā)方式(包括上升沿觸發(fā)和下降沿觸發(fā)),基本可以滿足一般用戶的需求。 圖3.14 觸發(fā)原理圖3.15 觸發(fā)

49、流程圖觸發(fā)的原理如圖3.14,首先設置一個觸發(fā)電平作為基準電平,當采樣點中有一個點恰好大于觸發(fā)電平,比如圖中的i點,而下一個點又恰好小于觸發(fā)電平,也就是i+1點,如果這時設定的是下降沿觸發(fā),則觸發(fā)功能生效,顯示當前采集到的1024個點;如果兩個相鄰的點的狀況類似于圖中的j和j+1,而這時設置的又是上升沿觸發(fā),則觸發(fā)功能同樣生效,顯示當前波形。在具體操作時,在面板上設置一些控件,包括觸發(fā)的開始、觸發(fā)電平、觸發(fā)模式、觸發(fā)通道等。利用觸發(fā)的基本原理,在設定好觸發(fā)電平、模式和通道以后,點擊開始觸發(fā),就可以在Graph上看到完整的波形。觸發(fā)電平設置在1V+1V之間,觸發(fā)模式包括上升沿觸發(fā)和下降沿觸發(fā),可

50、以任意指定通道1或2進行觸發(fā),實現(xiàn)的過程是:從每波采集到的1024個點中進行掃描進行判斷,例如是上升沿觸發(fā),觸發(fā)電平是0.5V,觸發(fā)通過時通道2,則當通道2的任意兩個點之間滿足前一個點小于0.5V,后一個點大于0.5V,則滿足了觸發(fā)條件,將這波采集的1024個點全部實現(xiàn)出來,實現(xiàn)了觸發(fā)。圖3.16 觸發(fā)功能實現(xiàn)觸發(fā)的原理似乎很簡單,但是用代碼來實現(xiàn)還是存在難題的。因為進行觸發(fā)的時候,只要沒有滿足觸發(fā)條件,面板上其他的功能是不能受到影響的,這就要保證觸發(fā)模塊時時等待著條件的滿足。為了實現(xiàn)這樣的功能,采用多線程的方法,線程是可由系統(tǒng)調(diào)度的一個最簡單的代碼單元,負責執(zhí)行包含在進程的地址空間中的程序代

51、碼。在LabWindows/CVI中,可以使用CmtScheduleThreadPoolFunctionAdv()函數(shù)創(chuàng)建一個線程池,就可以不通過主函數(shù)調(diào)用而直接執(zhí)行。在面板上,設置開始觸發(fā)、觸發(fā)通道、觸發(fā)電平、觸發(fā)模式這幾項功能按鈕。在程序執(zhí)行的情況下,可以設置觸發(fā)通道(包括通道1和通道2)、設置觸發(fā)電平(限定在1V以內(nèi))、設置觸發(fā)模式,設置完成后,點擊開始觸發(fā),則會執(zhí)行trigger()函數(shù),獲取當前值:如果獲取值為1,刪除目前顯示的波形,將其它控件都激活,設置目前事件為1;如果為獲取值為0,則停止觸發(fā)相關(guān)控件的激活狀態(tài)。相關(guān)工作完成后,觸發(fā)條件得到滿足,進行一系列的判斷,如圖3.15。先

52、進行觸發(fā)模式的判斷,再進行觸發(fā)通道的判斷,當滿足相應的條件時,則會顯示這波圖形,如圖3.16。圖3.17 讀取存儲信息3.5 信號存儲模塊相對于傳統(tǒng)示波器,虛擬示波器的存儲更加的方便,無須另外插入USB存儲設備而是直接可以將信號存儲到硬盤中,并且可以隨時打開。為了實現(xiàn)信號存儲,在程序的開始就創(chuàng)建了一個以系統(tǒng)時間為名稱的txt文本文件,利用GetSystemTime()函數(shù)獲取系統(tǒng)實時時間,并作為數(shù)據(jù)源寫到字符串數(shù)組中,再使用Fmt()函數(shù)通過“%s-%s-%s.txt”的格式創(chuàng)建文本名稱,放到fileName數(shù)組中,然后打開相應的文件,將“通道1”和“通道2”先寫到文本中,以便后來察看存儲文件

53、時能夠分得出兩個通道的信號。點擊開始采集后,信號就從聲卡輸入端讀了進來,如果判斷文件存儲模塊被選中,則將采集到的數(shù)據(jù)點寫到數(shù)組,經(jīng)過1024個循環(huán)就將這一波數(shù)存儲到了相應的文件中。為了豐富本系統(tǒng)的功能,實現(xiàn)用戶在安裝好發(fā)布文件后直接可以打開存儲文件,不再需要通過打開驅(qū)動器才能打開相應文件,所以開發(fā)了簡單方便的打開文件功能。在桌面設置Ring、String、Command Button和Tree四個空間,分別用來作為驅(qū)動器選擇、路徑選擇、打開和瀏覽數(shù)據(jù),相應的回調(diào)函數(shù)分別是drive、path、open(Tree沒有回調(diào)函數(shù))。生成函數(shù)框架后,為了方便,手動編寫drivevolume()函數(shù)以供

54、調(diào)用。在drivevolume()函數(shù)中,通過GetDrive()函數(shù)獲取驅(qū)動器個數(shù),然后利用循環(huán)分別為各個盤符命名,從C開始,依次遞增,并將其顯示在Ring_3控件中,而且能夠判斷新插入的外界設備,比如優(yōu)盤。然后在相應的回調(diào)函數(shù)中添加相應代碼:在drive()函數(shù)中,首先調(diào)用drivevolume()函數(shù),判斷所選的盤符,并將其顯示在String控件(作為路徑)上,并設定可通過鍵盤進行輸入,設置文件瀏覽屬性,實現(xiàn)瀏覽驅(qū)動器下的文件;在path()函數(shù)中,獲取當前路徑,并更新文件瀏覽目錄;在open()函數(shù)中,利用默認方式打開相應的文件。通過以上步驟,完成了打開存儲文件的功能,如圖3.17。3

55、.6 其他功能模塊 在程序設計的尾聲階段,為了能夠更好地分析采樣信號的結(jié)構(gòu),所以添加了一些小功能,比如最值的獲取、信號頻率等。利用analysis.h中的MaxMin1D()函數(shù)可以將采集到的信號進行分析,從中得到最大值最小值和它們的位置,但本文只需要得到數(shù)值的大小,并利用NUMERIC控件在面板上顯示出來,只要信號采集進來,無論在面板上顯示與否,最值總是可以被計算出。同時設計了信號頻率按鈕,因為本系統(tǒng)地FFT過于粗糙,只能大致的看出波形,卻不能計算出信號的頻率,但這同樣需要利用光標功能,只是光標功能的延伸罷了,比如:當檢測正弦波的時候,將兩個光標分別指在兩個波峰時,就可以算出這個正弦波的頻率

56、,其實就是利用將兩個點的橫坐標之差的倒數(shù)顯示即可。另外,設定了采樣點數(shù)的控件,原理是將顯示面板的橫坐標進行修改,可以滿足實時顯示時對顯示點數(shù)的修改,實現(xiàn)采樣點數(shù)的控制。3.7 本章小結(jié) 本章是論文中最主要的部分,利用模塊化的設計方法,將信號的采集、分析和處理更加詳細地進行分析。這部分細化為信號采集模塊、波形顯示模塊、頻譜分析模塊、波形調(diào)節(jié)模塊、信號存儲模塊和其他功能模塊,每部分都具體地闡述了設計的思路和具體函數(shù)執(zhí)行的步驟,并且通過流程圖和表格的形式解釋說明,每個模塊最后執(zhí)行的結(jié)果使用截圖保存下來,用來說明設計的合理性??傊康乃悸泛徒Y(jié)果都在本章得到呈現(xiàn),完成了基于聲卡的虛擬示波器設計。4

57、虛擬示波器實驗驗證無論在設計時考慮的多么周到,總會有一些問題是我們意想不到的,這就需要我們反復不斷的實驗,在實驗的過程中找到缺陷所在并及時改正,以此來將本系統(tǒng)更加的完善和保證其合理性。實驗的儀器包括信號發(fā)生器、示波器、裝有LabWindows/CVI軟件的臺式機,利用信號發(fā)生器產(chǎn)生信號,分別接入示波器和臺式機聲卡的Line in口,運行程序,比較兩個屏幕產(chǎn)生的波形,由于虛擬示波器的兩個通道具有相同效果,所以只選擇了通道1進行測試。4.1 光標功能驗證光標功能是驗證的關(guān)鍵,合理實用的光標可以確定波形的任何一點的信息,包括幅值和相對時間。而前面設計的許多功能都是利用光標功能實現(xiàn)的,比如,峰峰值檢測

58、、周期測試等。通過多次測量數(shù)據(jù)的方法進行統(tǒng)計,然后求平均值算出平均誤差大概是多少,由此可以判斷出本系統(tǒng)的精度。1)峰峰值驗證實驗中使用的是正弦波,只要取任意波峰和波谷(或者說是所取正弦波的最大值和最小值),就可以檢測到波形的峰峰值,然后記錄多組數(shù)據(jù),統(tǒng)計分析誤差究竟是多少,如表4.1。圖4.1、4.2就是記錄下臺式機顯示屏上的數(shù)據(jù)同傳統(tǒng)示波器的值進行的對比圖。表4.1 峰值檢測判斷誤差圖4.1 傳統(tǒng)示波器檢測到峰峰值為1V的正弦波圖4.2 通過對比峰峰值檢測測試根據(jù)表格4.1記錄的數(shù)據(jù),通過以下式子求平均值:(2.85+0.00+2.44+1.00+0.83+0.68+1.20+0.55)÷8=1.19,根據(jù)算式得到的結(jié)果,可得誤差值為1.19%,也就是峰峰值檢測精度。2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論