版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一種基于MATLAB的信號采集和分解方法收藏 MATLAB是美國Mathworks公司開發(fā)的適合于工程各領(lǐng)域的分析設(shè)計(jì)與復(fù)雜計(jì)算的軟件,該軟件包括基本部分和專業(yè)擴(kuò)展兩大部分。擴(kuò)展部分稱為工具箱,用于解決某一方面的專業(yè)問題。文中實(shí)現(xiàn)的是基于數(shù)據(jù)采集工具箱和小波變換工具箱的聲音信號采集和分析方法。 數(shù)據(jù)采集工具箱是一種建立在MATLAB環(huán)境下的M函數(shù)文件和MEX動態(tài)鏈接庫文件的集合,包含大區(qū)域的組件:M文件函數(shù)、數(shù)據(jù)采集引擎及硬件驅(qū)動適配器,它具有如下特點(diǎn):是一種通過使用與PC機(jī)兼容的、即插即用的數(shù)據(jù)采集設(shè)備在MATLAB環(huán)境中的架構(gòu);支持模擬信號的輸入輸出, 據(jù)采集工具箱采集! 個(gè)通道的動態(tài)信號
2、,然后利用以及數(shù)字信號的輸入、輸出,子系統(tǒng)還包括同步模擬輸入輸出的轉(zhuǎn)換;支持聲卡;事件驅(qū)動采集。 MATIAB數(shù)據(jù)采集工具箱被廣泛的使用在工程學(xué)和科學(xué)的領(lǐng)域, 從數(shù)據(jù)采集和分析到應(yīng)用程序開發(fā)。MATLAB環(huán)境集合了數(shù)學(xué)計(jì)算, 圖形化輸出, 和強(qiáng)有力的計(jì)算機(jī)程序語言。內(nèi)建的接口讓使用者可以從儀器、檔案、和外部數(shù)據(jù)庫和程序中讀取數(shù)據(jù)。另外, MATLAB 應(yīng)用程序還可以整合使用其它著名的計(jì)算機(jī)語言所開發(fā)出來的函式庫如C 、C+、FORTRAN, 和Java。 下面介紹MATLAB數(shù)據(jù)采集工具箱的內(nèi)部結(jié)構(gòu), 和外部的使用接口, 熟悉數(shù)據(jù)采集工具箱的使用方法將會了解如何使用同一組指令去操作各種不同硬件
3、的數(shù)據(jù)采集卡以進(jìn)行模擬輸入(AI), 模擬輸出(AO), 數(shù)字輸出入(DIO)的各種操作。對于MATLAB的使用者而言將是一項(xiàng)有力的工具。何謂MATLAB數(shù)據(jù)采集工具箱(Data Acquisition Toolbox)。 數(shù)據(jù)采集工具箱是一組M-File函式集和MEX-File 等動態(tài)鏈接鏈接庫所組成的, 專門使用在數(shù)據(jù)采集方面的一組函式庫。它提供了以下主要的功能:1. 以相同的指令操作 模擬輸入(AI), 模擬輸出(AO), 數(shù)字輸出入(DIO)和同步模擬輸出入轉(zhuǎn)換各式功能, 不會因不同硬件而產(chǎn)生不同的指令.2. 一個(gè)及時(shí)數(shù)據(jù)采集環(huán)境, 被測量的數(shù)據(jù)不需經(jīng)由轉(zhuǎn)換可直接進(jìn)入MATLAB 直接
4、進(jìn)行分析。3. 支持主要的數(shù)據(jù)采集卡的廠商, 如:凌華, Agilent, ComputerBoards 和 National Instruments。4. 支持事件驅(qū)動(Event-driven)的數(shù)據(jù)采集。MATLAB數(shù)據(jù)采集工具箱的內(nèi)部結(jié)構(gòu)數(shù)據(jù)采集工具箱包括三個(gè)模塊分別為: M-File 函式集, 數(shù)據(jù)采集引擎(Data Acquisition Engine), 和硬件轉(zhuǎn)接驅(qū)動程序(Hardware Driver Adaptors)。如下圖所示, 這些模塊允許使用者在MATLAB 內(nèi)和使用者的數(shù)據(jù)采集硬件之間交換數(shù)據(jù)。 數(shù)據(jù)采集工具箱的三大模塊和數(shù)據(jù)流動的關(guān)系屬性和事件是內(nèi)部溝通的方式,
5、 數(shù)據(jù)是主要傳送的標(biāo)的, 分述如下:屬性(Property values)使用者能經(jīng)由屬性的改變而改變使用者的數(shù)據(jù)采集行為, 經(jīng)由數(shù)據(jù)采集工具箱屬性的改變將會影響到硬件驅(qū)動程序的行為, 使硬件的工作符合使用者的實(shí)際需要。 資料(Data)使用者能從感應(yīng)器獲取數(shù)據(jù)并存放它在MATLAB內(nèi),或從MATLAB 輸出數(shù)據(jù)到作動器。此外使用者能在數(shù)字(1和0)和數(shù)字的輸出入(DIO)之間進(jìn)行數(shù)據(jù)轉(zhuǎn)換。 事件(Events)事件發(fā)生在當(dāng)某個(gè)特定的情況符合之后,通常在使用者設(shè)定屬性后使用者可以指定一個(gè)或更多的回呼函數(shù)(Callback function)去處理不同的事件。使用者能使用事件的一些方式包括預(yù)先決
6、定相當(dāng)數(shù)量的數(shù)據(jù)被采集之后立刻進(jìn)行分析, 或當(dāng)硬件驅(qū)動程序有錯(cuò)誤發(fā)生時(shí)顯示一個(gè)錯(cuò)誤訊息到MATLAB的工作區(qū)。 開始進(jìn)行數(shù)據(jù)采集或許最有效學(xué)習(xí)數(shù)據(jù)采集工具箱的方式為,連接使用者的硬設(shè)備然后開始使用數(shù)據(jù)采集工具箱實(shí)際的進(jìn)行數(shù)據(jù)采集的工作. 實(shí)際進(jìn)行如何輸入或輸出數(shù)據(jù)。這個(gè)部分提供使用者一個(gè)簡單的例子說明怎么從實(shí)際的硬件上采集數(shù)據(jù)(AI), 又如何從MATLAB中產(chǎn)生數(shù)據(jù)并輸出到實(shí)際的硬件(AO), 另一種常見的數(shù)據(jù)采集是使用數(shù)字I/O(DIO)。以上均為典型的數(shù)據(jù)采集范例并且會對個(gè)范例作說明。使用者應(yīng)該記住這些步驟并修改成為自己的數(shù)據(jù)采集應(yīng)用。 注意模擬輸入和模擬輸出范例使用一張凌華 DAQ20
7、10的數(shù)據(jù)采集卡, 如果使用者使用一種另外支持的硬件裝置, 使用者應(yīng)該修改硬件轉(zhuǎn)接驅(qū)動程序的名稱(Hardware Driver Adaptor Name.)和設(shè)備識別碼(Hardware Device Identifier)。如果使用者想要所有函數(shù)的相關(guān)說明, 可以參考MATLAB的函數(shù)說明。如果使用者想要其它的屬性相關(guān)說明, 可以參考MATLAB的基本屬性說明。 如果使用者已經(jīng)安裝好凌華 DAQ2010的數(shù)據(jù)采集卡,安裝好硬件驅(qū)動程序. 就可在光盤中或是到凌華科技網(wǎng)站http:/www.凌華 中尋找D2K-MTLB的DAQ2000系列的硬件轉(zhuǎn)接驅(qū)動程序,安裝D2K-MTLB后就算完成了準(zhǔn)備
8、動作。 模擬輸入(AI)范例這個(gè)范例將會使用數(shù)據(jù)采集工具箱對真實(shí)的數(shù)據(jù)采集卡進(jìn)行設(shè)定, 操作, 采集數(shù)據(jù), 并以圖表顯示出來.,只要稍為修改設(shè)定屬性值, 即可使用在真實(shí)的應(yīng)用中. 1.宣告一個(gè)裝置對象 宣告一個(gè)可以代表DAQ2010的模擬輸入對象(ai)ai = analoginput(凌華,1); 2.增加輸入信道(Add channels) 增加一個(gè)硬件信道到aichan = addchannel(ai, 0); 3.設(shè)定屬性值 設(shè)定取樣頻率和觸發(fā)來源和條件set(ai,SampleRate,2000)set(ai,TriggerType, Immediate)set(ai,Trigger
9、Channel, chan) %不一定要執(zhí)行此指令因?yàn)闀枰猅rigger訊號set(ai,TriggerConditionValue, 2.0) %不一定要執(zhí)行此指令因?yàn)闀枰猅rigger訊號 4.開始采集數(shù)據(jù) 當(dāng)數(shù)據(jù)采集結(jié)束時(shí), ai會自動停止數(shù)據(jù)采集并傳回?cái)?shù)據(jù).此時(shí)亦可使用圖表將數(shù)據(jù)顯示. start(ai)data = getdata(ai);plot(data) 5.清除宣告的對象變量 當(dāng)使用者不再需要使用ai 裝置對象變量時(shí), 使用者必需清除并釋放ai 所占用的內(nèi)存.delete(chan)clear chandelete(ai)clear ai 圖二: 數(shù)據(jù)采集模擬輸入(AI)
10、范例的執(zhí)行結(jié)果 模擬輸出(AO)范例這個(gè)范例將會使用數(shù)據(jù)采集工具箱對真實(shí)的數(shù)據(jù)采集卡進(jìn)行設(shè)定, 操作, 輸出數(shù)據(jù), 并以圖表顯示準(zhǔn)備要輸出的波形.,只要稍為修改設(shè)定屬性值, 即可使用在真實(shí)的應(yīng)用中. 1.宣告一個(gè)裝置對象 宣告一個(gè)可以代表DAQ2010的模擬輸出對象(ao)ao = analogoutput (凌華,1); 2.增加輸出通道(Add channels) 增加一個(gè)或二個(gè)硬件信道到aochan = addchannel(ao, 0); %或 addchannel(ao,0:1); 3.設(shè)定屬性值 設(shè)定更新頻率set(ao,SampleRate,2000) 4.開始輸出資料 首先先在
11、MATLAB內(nèi)產(chǎn)生所要輸出的波形, 然后可以把波形數(shù)據(jù)寫入ao, 一次可以寫入一個(gè)通道或是寫入二個(gè)通道.data = 10*sin(linspace(0,2*pi*10,8000);plot(data)putdata(ao, data) %或 putdata(ao,data data) 5.清除宣告的對象變量 當(dāng)使用者不再需要使用ao 裝置對象變量時(shí), 使用者必需清除并釋放ao 所占用的內(nèi)存.stop(ao)delete(chan)clear chandelete(ao)clear ao 圖三: 數(shù)據(jù)模擬輸出(AO)范例的輸出波形 數(shù)字輸出入(DIO)范例這個(gè)范例將會使用數(shù)據(jù)采集工具箱對真實(shí)的
12、數(shù)據(jù)采集卡進(jìn)行數(shù)字的輸出, 同時(shí)讀回那些值. 1.宣告一個(gè)裝置對象 宣告一個(gè)可以代表DAQ2010的數(shù)字輸出入對象(dio)dio = digitalio (凌華,1); 2.增加數(shù)字訊號線(Add lines) 增加八個(gè)數(shù)字訊號線到dio, 同時(shí)將數(shù)字訊號線設(shè)定為”輸出”addline(dio,0:7,out); 3.讀和寫數(shù)值 產(chǎn)生一個(gè)數(shù)值的數(shù)組, 并將它送到dio裝置對象, 注意讀和寫數(shù)字訊號線通常不必再對其輸出入的方向重新設(shè)定.pval = 1 1 1 1 0 1 0 1;putvalue(dio,pval)gval = getvalue(dio);plot(gval) 5.清除宣告的
13、對象變量 當(dāng)使用者不再需要使用dio 裝置對象變量時(shí), 使用者必需清除并釋放dio 所占用的內(nèi)存.delete(dio)clear dio 在此簡單的介紹MATLAB數(shù)據(jù)采集工具箱的內(nèi)部結(jié)構(gòu)和使用方法,使用此種方式在MATLAB內(nèi)控制數(shù)據(jù)采集卡是最直接的方式,同時(shí)可以完全和MATLAB整合并進(jìn)行實(shí)時(shí)的數(shù)據(jù)存取和實(shí)時(shí)的分析,使用資料采集工具箱再加上一片可以在工具箱內(nèi)使用的數(shù)據(jù)采集卡是所有需要作數(shù)據(jù)采集的工程師必備的工具。 小波分析是近十幾年才發(fā)展起來并迅速應(yīng)用到圖像處理和語音分析等眾多領(lǐng)域的一種數(shù)學(xué)工具,屬于時(shí)頻分析的一種。小波變換是一種信號的時(shí)間-尺度(時(shí)間-頻域)分析方法,具有多分辨率分析的
14、特點(diǎn),在信號處理中,小波在信號(如聲音信號,圖像信號等)處理中得到極其廣泛的應(yīng)用。小波分析是當(dāng)前數(shù)學(xué)中一個(gè)迅速發(fā)展的新領(lǐng)域,它同時(shí)具有理論深刻和應(yīng)用十分廣泛的雙重意義。小波變換的概念是由法國從事石油信號處理的工程師J.Morlet在1974年首先提出的,通過物理的直觀和信號處理的實(shí)際需要經(jīng)驗(yàn)的建立了反演公式,當(dāng)時(shí)未能得到數(shù)學(xué)家的認(rèn)可。正如1807年法國的熱學(xué)工程師J.B.J.Fourier提出任一函數(shù)都能展開成三角函數(shù)的無窮級數(shù)的創(chuàng)新概念未能得到著名數(shù)學(xué)家J.L.Lagrange,P.S.Laplace以及A.M.Legendre的認(rèn)可一樣。幸運(yùn)的是,早在七十年代,A.Calderon表示定理
15、的發(fā)現(xiàn)、Hardy空間的原子分解和無條件基的深入研究為小波變換的誕生做了理論上的準(zhǔn)備,而且J.O.Stromberg還構(gòu)造了歷史上非常類似于現(xiàn)在的小波基;1986年著名數(shù)學(xué)家Y.Meyer偶然構(gòu)造出一個(gè)真正的小波基,并與S.Mallat合作建立了構(gòu)造小波基的同意方法棗多尺度分析之后,小波分析才開始蓬勃發(fā)展起來,其中比利時(shí)女?dāng)?shù)學(xué)家I.Daubechies撰寫的小波十講(Ten Lectures on Wavelets)對小波的普及起了重要的推動作用。它與Fourier變換、窗口Fourier變換(Gabor變換)相比,這是一個(gè)時(shí)間和頻率的局域變換,因而能有效的從信號中提取信息,通過伸縮和平移等運(yùn)
16、算功能對函數(shù)或信號進(jìn)行多尺度細(xì)化分析(Multiscale Analysis),解決了Fourier變換不能解決的許多困難問題,從而小波變化被譽(yù)為“數(shù)學(xué)顯微鏡”,它是調(diào)和分析發(fā)展史上里程碑式的進(jìn)展。小波(Wavelet)這一術(shù)語,顧名思義,“小波”就是小的波形。所謂“小”是指它具有衰減性;而稱之為“波”則是指它的波動性,其振幅正負(fù)相間的震蕩形式。與Fourier變換相比,小波變換是時(shí)間(空間)頻率的局部化分析,它通過伸縮平移運(yùn)算對信號(函數(shù))逐步進(jìn)行多尺度細(xì)化,最終達(dá)到高頻處時(shí)間細(xì)分,低頻處頻率細(xì)分,能自動適應(yīng)時(shí)頻信號分析的要求,從而可聚焦到信號的任意細(xì)節(jié),解決了Fourier變換的困難問題,
17、成為繼Fourier變換以來在科學(xué)方法上的重大突破。有人把小波變換稱為“數(shù)學(xué)顯微鏡”。小波分析的應(yīng)用是與小波分析的理論研究緊密地結(jié)合在一起地?,F(xiàn)在,它已經(jīng)在科技信息產(chǎn)業(yè)領(lǐng)域取得了令人矚目的成就。 電子信息技術(shù)是六大高新技術(shù)中重要的一個(gè)領(lǐng)域,它的重要方面是圖像和信號處理?,F(xiàn)今,信號處理已經(jīng)成為當(dāng)代科學(xué)技術(shù)工作的重要部分,信號處理的目的就是:準(zhǔn)確的分析、診斷、編碼壓縮和量化、快速傳遞或存儲、精確地重構(gòu)(或恢復(fù))。從數(shù)學(xué)地角度來看,信號與圖像處理可以統(tǒng)一看作是信號處理(圖像可以看作是二維信號),在小波分析地許多分析的許多應(yīng)用中,都可以歸結(jié)為信號處理問題?,F(xiàn)在,對于其性質(zhì)隨實(shí)踐是穩(wěn)定不變的信號,處理的
18、理想工具仍然是傅立葉分析。但是在實(shí)際應(yīng)用中的絕大多數(shù)信號是非穩(wěn)定的,而特別適用于非穩(wěn)定信號的工具就是小波分析。小波分析是當(dāng)前應(yīng)用數(shù)學(xué)和工程學(xué)科中一個(gè)迅速發(fā)展的新領(lǐng)域,經(jīng)過近10年的探索研究,重要的數(shù)學(xué)形式化體系已經(jīng)建立,理論基礎(chǔ)更加扎實(shí)。與Fourier變換相比,小波變換是空間(時(shí)間)和頻率的局部變換,因而能有效地從信號中提取信息。通過伸縮和平移等運(yùn)算功能可對函數(shù)或信號進(jìn)行多尺度的細(xì)化分析,解決了Fourier變換不能解決的許多困難問題。小波變換聯(lián)系了應(yīng)用數(shù)學(xué)、物理學(xué)、計(jì)算機(jī)科學(xué)、信號與信息處理、圖像處理、地震勘探等多個(gè)學(xué)科。數(shù)學(xué)家認(rèn)為,小波分析是一個(gè)新的數(shù)學(xué)分支,它是泛函分析、Fourier
19、分析、樣調(diào)分析、數(shù)值分析的完美結(jié)晶;信號和信息處理專家認(rèn)為,小波分析是時(shí)間尺度分析和多分辨分析的一種新技術(shù),它在信號分析、語音合成、圖像識別、計(jì)算機(jī)視覺、數(shù)據(jù)壓縮、地震勘探、大氣與海洋波分析等方面的研究都取得了有科學(xué)意義和應(yīng)用價(jià)值的成果。事實(shí)上小波分析的應(yīng)用領(lǐng)域十分廣泛,它包括:數(shù)學(xué)領(lǐng)域的許多學(xué)科;信號分析、圖像處理;量子力學(xué)、理論物理;軍事電子對抗與武器的智能化;計(jì)算機(jī)分類與識別;音樂與語言的人工合成;醫(yī)學(xué)成像與診斷;地震勘探數(shù)據(jù)處理;大型機(jī)械的故障診斷等方面;例如,在數(shù)學(xué)方面,它已用于數(shù)值分析、構(gòu)造快速數(shù)值方法、曲線曲面構(gòu)造、微分方程求解、控制論等。在信號分析方面的濾波、去噪聲、壓縮、傳遞
20、等。在圖像處理方面的圖像壓縮、分類、識別與診斷,去污等。在醫(yī)學(xué)成像方面的減少B超、CT、核磁共振成像的時(shí)間,提高分辨率等。(1)小波分析用于信號與圖像壓縮是小波分析應(yīng)用的一個(gè)重要方面。它的特點(diǎn)是壓縮比高,壓縮速度快,壓縮后能保持信號與圖像的特征不變,且在傳遞中可以抗干擾?;谛〔ǚ治龅膲嚎s方法很多,比較成功的有小波包最好基方法,小波域紋理模型方法,小波變換零樹壓縮,小波變換向量壓縮等。(2)小波在信號分析中的應(yīng)用也十分廣泛。它可以用于邊界的處理與濾波、時(shí)頻分析、信噪分離與提取弱信號、求分形指數(shù)、信號的識別與診斷以及多尺度邊緣檢測等。(3)在工程技術(shù)等方面的應(yīng)用。包括計(jì)算機(jī)視覺、計(jì)算機(jī)圖形學(xué)、曲
21、線設(shè)計(jì)、湍流、遠(yuǎn)程宇宙的研究與生物醫(yī)學(xué)方面。 文中提出的簡單、經(jīng)濟(jì)的信號采集方法是利用聲卡的A/D轉(zhuǎn)換工作原理和MATLAB環(huán)境下的數(shù)據(jù)采集工具箱采集2個(gè)通道的動態(tài)信號,然后利用小波變換工具箱對音頻信號進(jìn)行分解,觀察信號的近似和細(xì)節(jié)。1 音頻信號的采集方法 在音頻信號處理方面,下面介紹一種簡單,實(shí)用,經(jīng)濟(jì)的適用于中低頻的信號處理方法,如圖1所示。 采集時(shí)將隨時(shí)間變化的力、位移、時(shí)間變化的電壓信號,并將其降壓處理,圖1 中低頻信號采集分析圖其變化范圍在-11V之間以滿足聲卡的輸入要求,然后就可以將兩路信號直接連接到聲卡的LINE IN接口上,利用MATLAB環(huán)境下數(shù)據(jù)采集工具箱(Data Acq
22、uitsition)采集聲音信號,為提高聲音信號的質(zhì)量,可對采樣頻率等屬性進(jìn)行必要的設(shè)置。 在對聲音進(jìn)行錄制過程中,不可避免地會夾雜一些噪音,需要通過濾波器才能過濾掉這些噪音。實(shí)際上,數(shù)字濾波器設(shè)計(jì)是信號處理工具箱一個(gè)重要的組成部分,可以根據(jù)頻譜的特點(diǎn)和處理信號的目的組成部分,設(shè)計(jì)出各種各樣符合要求的數(shù)字濾波器。圖2 輸入信號頻譜圖 下面以驗(yàn)證吉他每根弦的基本(最低)頻率為例,說明信號采集的方法(在聲卡的一個(gè)通道上采集了1s的聲音信號)由于一根吉他琴弦的振蕩頻率為112Hz,配置聲卡的最低采樣率應(yīng)為8000,甚至可以更低。在彈響琴弦后,在之附近放置麥克風(fēng),然后用手動觸發(fā)器觸發(fā)信號采集文件如下,
23、結(jié)果如圖2、3所示。圖3 輸入信號波形圖AI=analoginput(winsound); %定義模擬輸入目標(biāo)AI為聲卡chan=addchannel(AI,1); %設(shè)置通道數(shù)為1duration=1; %1s采集set(AI,SampleRate,8000); %設(shè)置采樣率為8000HzActualRate=get(AI,SampleRate);set(AI,SamplePerTrigger,duration*ActualRate); %設(shè)置觸發(fā)采樣數(shù)量set(AI,TriggerType,Manual) %觸發(fā)類型為手動blocksize=get(AI,SamplePerTrigger)
24、; %模塊大小為每觸發(fā)采樣的大小Fs=ActualRate; %設(shè)置頻率start(AI)trigger(AI) %觸發(fā)啟動(這時(shí)要撥響吉他,并將聲音傳入聲卡)data=getdata(AI);figure(1),plot(data);f,mag=daqdocfft(data,Fs,blocksize)%f,mag=daqdocfft(data,Fs,blocksize)calculates the FFT of X%using sampling frequency Fs and the SamplesPerTrigger%pervided the BLOCKSIZExfft=abs(fft(
25、data); %Avoid taking the log of 0.index=find(xfft=0)xfft(index)=1e-17;mag=20*log(xfft);mag=mag(1:floor(blocksize/2);f=(0:length(mag)-1)*Fs/blocksize;f=f(:);figure(2),plot(f,mag)grid onymax,maxindex=max(mag)2 信號的分析 為對信號進(jìn)行更細(xì)致、更深入地分析,可以利用小波分解函數(shù)對信號進(jìn)行多層分解,觀察信號的近似和細(xì)節(jié)A信號中低頻部分代表著信號的發(fā)展趨勢,在小波分析中,則對應(yīng)著最大的尺度小波變換
26、的低頻系數(shù),隨著尺度的增加,時(shí)間分辨率地降低,對信號的這種發(fā)展趨勢會表現(xiàn)得更明顯。另外,尺度分解中的低頻部分隨著層次的增加,含有的高頻信息會隨之減少A 當(dāng)分解到下一層次時(shí),就有更高頻率的信息被去除,則剩下的就是信號的發(fā)展趨勢。 下面對采集到的信號進(jìn)行尺度為 的小波分解,表現(xiàn)聲音最主要的部分是低頻部分,因此一個(gè)最簡單的壓縮方法是利用小波分解,去掉信號的高頻環(huán)境下數(shù)據(jù)采集工具部分而只保留低頻部分AN 文件如下y,Fs,NBITS=WAVREAD(t2.wav);figure(1),plot(y)wavetype=input(Please input the wavetype:,s)%以下進(jìn)行1級分
27、解a1,h1,v1,d1=dwt2(y,wavetype);%畫出圖像figure(2),subplot(2,2,1);plot(a1);title(1級分解編碼低頻系數(shù));axis square;axis offfn=strcat(t1,-,wavetype,1a.wav);subplot(2,2,2);plot(h1);title(1級分解編碼水平高頻系數(shù));axis square;axis offfn=strcat(t1,-,wavetype,1h.wav);wavwrite(h1,fn)subplot(2,2,3);plot(v1);title(1級分解編碼垂直高頻系數(shù));axis s
28、quare;axis offfn=strcat(t1,-,wavetype,_1v.wav);wavwrite(v1,fn)subplot(2,2,4);plot(d1);title(1級分解編碼斜線高頻系數(shù));axis square;axis offfn=strcat(t1,-,wavetype,_1d.wav);wavwrite(d1,fn) 上述的程序在MATLAB環(huán)境下運(yùn)行通過,文件執(zhí)行后,輸出各級分解的低頻系數(shù)、水平高頻系數(shù)、垂直高頻系數(shù)和斜線高頻系數(shù)圖像,以及采用haar、db1和db3小波可得到如下的信號分解測試表(其中原始文件大小為158K字節(jié)),見表1。表1 信號三級分解測試
29、表(只列出低頻部分):分解層次 haar/字節(jié) db1/字節(jié) db3/字節(jié)I級 79 79 237II級 40 40 158III級 20 20 80 從表1可以看出,haar和db1小波比db3小波效果要好,在應(yīng)用時(shí),應(yīng)反復(fù)實(shí)驗(yàn)選取小波的類型,必要時(shí)可以自己編寫小波函數(shù)。 本文中結(jié)合應(yīng)用MATLAB環(huán)境下數(shù)據(jù)采集工具箱、信號處理工具箱和小波工具箱采集和分析信號處理工具箱和小波工具箱采集和分析信號的方法,試驗(yàn)結(jié)果表明,進(jìn)行信號分析具有簡單易行,分析結(jié)果可靠的特點(diǎn) 因此,充分利用好這個(gè)有效的分析工具,必將為有效地進(jìn)行信號分析提供技術(shù)幫助。目錄:C-MEX程序編寫學(xué)習(xí)筆記1 MEX文件簡介在MAT
30、LAB中可調(diào)用的C或Fortran語言程序稱為MEX文件。MATLAB可以直接把MEX文件視為它的內(nèi)建函數(shù)進(jìn)行調(diào)用。MEX文件是動態(tài)鏈接的子例程,MATLAB解釋器可以自動載入并執(zhí)行它。MEX文件主要有以下用途:1 對于大量現(xiàn)有的C或者Fortran程序可以無須改寫成MATLAB專用的M文件格式而在MATLAB中執(zhí)行。2 對于那些MATLAB運(yùn)算速度過慢的算法,可以用C或者Frotran語言編寫以提高效率。2 一個(gè)MEX文件例子#include mex.h/* timestwo.c本MEX文件的目的是實(shí)現(xiàn)timestwo的功能*/void timestwo(double y, double x
31、)y0 = 2.0*x0;/*下面這個(gè)mexFunction的目的是使MATLAB知道如何調(diào)用這個(gè)timestwo函數(shù)*/void mexFunction( int nlhs, mxArray *plhs, int nrhs, const mxArray *prhs )/* nlhs是MATLAB命令行方式下輸出參數(shù)的個(gè)數(shù);*plhs是MATLAB命令行方式下的輸出參數(shù);nrhs是MATLAB命令行方式下輸入?yún)?shù)的個(gè)數(shù);*prhs是MATLAB命令行方式下的輸入?yún)?shù); */double *x,*y; /double指針類型不能改變!int mrows,ncols;/* Check for pr
32、oper number of arguments. */if(nrhs!=1) mexErrMsgTxt(One input required.);else if(nlhs1) mexErrMsgTxt(Too many output arguments);/* 在MATLAB命令行方式下,本MEX文件的調(diào)用格式是y=timestwo(x)輸入?yún)?shù)(x)個(gè)數(shù)1,輸出參數(shù)(y)個(gè)數(shù)1,所以在程序一開始就檢查nrhs是否1以及nlhs是否1(因?yàn)镸ATLAB有一個(gè)缺省輸出參數(shù)ans,所以nlhs可以=0 */mrows = mxGetM(prhs0); /* 獲得輸入矩陣的行數(shù) */ncols =
33、 mxGetN(prhs0); /* 獲得輸入矩陣的列數(shù) */if( !mxIsDouble(prhs0) | mxIsComplex(prhs0) | !(mrows=1 & ncols=1) ) mexErrMsgTxt(Input must be a noncomplex scalar double.); /* 判斷輸入矩陣是否是double類,以及它是否只包括單個(gè)元素 */* 為輸出創(chuàng)建一個(gè)矩陣,顯然這個(gè)矩陣也應(yīng)該是1x1的 */plhs0 = mxCreateDoubleMatrix(mrows,ncols, mxREAL);x = mxGetPr(prhs0); /* 獲得指向輸入
34、/輸出矩陣數(shù)據(jù)的指針 */y = mxGetPr(plhs0);timestwo(y,x); /* 調(diào)用C 函數(shù)timestwo(y,x) */把上面這個(gè)文件timestwo.c編輯完成后,在matlab命令行里輸入:mex timestwo.cmatlab會提示你選擇一個(gè)編譯器進(jìn)行編譯,如果安裝了VC,則選擇VC+即可。編譯完成后會在同一目錄下生成同名的動態(tài)鏈接庫文件timestwo.dll。此后再輸入“mex *.c”編譯mex文件時(shí)將不再提示用戶選擇編譯器,而自動選擇默認(rèn)的編譯器編譯。若想改變編譯器進(jìn)行編譯,可輸入“mex timestwo.c setup”。編譯完成后即可使用此動態(tài)鏈接
35、庫了。在MATLAB命令行下輸入:x = 2;y = timestwo(x)將會顯示:y =43 MEX文件格式詳解首先編制自己的C算法程序,緊跟著定義mexFunction函數(shù),mexFunction的定義法唯一,它只能是如下形式:void mexFunction( int nlhs, mxArray *plhs, int nrhs, const mxArray *prhs )其名稱和參數(shù)類型不許有任何改變,在mexFunciton函數(shù)中可以調(diào)用你剛定義好的C 程序。3.1 參數(shù)定義以上面的timestwo.c文件為例,當(dāng)編譯完成后在matlab命令行輸入“y = timestwo(x)”時(shí)
36、,matlab便隨即加載timestwo.dll動態(tài)鏈接庫文件。timestwo.dll加載完成后首先執(zhí)行mexFunciton函數(shù),并把輸入?yún)?shù)x的值“2”傳遞給prhs0,輸入?yún)?shù)的個(gè)數(shù)“1”傳遞給plhs。由于matlab里的變量都是以double類型存儲的,故mex程序里所有輸入輸出參數(shù)對應(yīng)的C類型均應(yīng)為double。這也是為什么上例中定義“double *x,*y;”必須為double指針類型的原因。而且還要注意,必須是double指針,不能僅為double。3.2 輸入輸出參數(shù)檢查接下來可以做輸入?yún)?shù)的檢查,確定輸入?yún)?shù)的個(gè)數(shù)是否符合定義,否則給出錯(cuò)誤提示信息。3.3 參數(shù)掛接參數(shù)
37、檢查完成以后就是對應(yīng)輸入輸出參數(shù)的掛接(一時(shí)想不到更好的詞,此處暫借用“掛接”一詞表達(dá)如下所述的意思):/* 為輸出創(chuàng)建一個(gè)矩陣,顯然這個(gè)矩陣也應(yīng)該是1x1的 */plhs0 = mxCreateDoubleMatrix(mrows,ncols, mxREAL);x = mxGetPr(prhs0); /* 獲得指向輸入/輸出矩陣數(shù)據(jù)的指針 */y = mxGetPr(plhs0);這里首先給輸出參數(shù)創(chuàng)建了一個(gè)矩陣。注意,不論輸出的是一個(gè)矩陣還是一個(gè)標(biāo)量,都必須為所有的輸出參數(shù)創(chuàng)建單獨(dú)的矩陣。如果是標(biāo)量,則創(chuàng)建的時(shí)候把行和列都設(shè)為1即可:mxCreateDoubleMatrix(1,1, mx
38、REAL);之所以這樣做的原因是matlab里面每個(gè)變量都是以矩陣形式存在的。prhs和plhs是不能直接在程序中使用的,必須要定義對應(yīng)的指針變量。故而要對接口參數(shù)的指針和程序中使用參數(shù)的指針進(jìn)行掛接,也就是“x = mxGetPr(prhs0);”語句所做的工作??吹竭@里就應(yīng)該明白為什么void mexFunction函數(shù)里面所有的輸入輸出參數(shù)都必須定義為double指針的原因了吧。因?yàn)樗卸x的參數(shù)必須要和prhs、plhs進(jìn)行掛接。3.4 調(diào)用功能函數(shù)參數(shù)掛接完成以后就可以調(diào)用自己編寫的功能函數(shù)了:timestwo(y,x); /* 調(diào)用C 函數(shù)timestwo(y,x) */這里需要注
39、意,調(diào)用的輸入?yún)?shù)與定義的參數(shù)要相符。如timestwo()函數(shù)的定義如下:void timestwo(double y, double x)兩個(gè)參數(shù)均為指針類型,故調(diào)用的時(shí)候“timestwo(y,x);”輸入的是“y,x”兩個(gè)指針。而如果timestwo()函數(shù)的定義為:void timestwo(double y, double x)則說明輸入?yún)?shù)x應(yīng)該為double類型的變量,這時(shí)的輸入?yún)?shù)可寫為:timestwo(y,x0);3.5 功能函數(shù)的編寫功能函數(shù)的編寫取決于用戶要完成的功能。這里值得提出來說明的有以下2點(diǎn):(1) 功能函數(shù)名和最終在matlab里調(diào)用的函數(shù)名沒有直接聯(lián)系,而
40、只于mexFunction里調(diào)用的函數(shù)名有關(guān)系。Matlab調(diào)用的函數(shù)名取決于最后生成的dll文件名,而這個(gè)文件名可以任意更改(但首字母不能為數(shù)字)。(2) 功能函數(shù)沒有返回值,是void類型,而整個(gè)dll模塊最終返回給matlab的輸出參數(shù)是包含在功能函數(shù)的輸入?yún)?shù)中的。由前面介紹的輸入輸出參數(shù)需要掛接的原因,故功能函數(shù)的輸入?yún)?shù)中對應(yīng)的最終輸出參數(shù)必須定義為double指針類型,如:“void timestwo(double y, double x)”。其中y是最終的輸出參數(shù),必須為double指針類型,而從matlab里傳來的輸入?yún)?shù),則視情況而定是否需要定義為指針類型。3.6 第二個(gè)MEX文件例子這個(gè)例子是完成dijkstra最短路徑算法的程序。#include mex.h/* 求網(wǎng)絡(luò)中所有節(jié)點(diǎn)到指定節(jié)點(diǎn)的最短路,Dijkstra算法*/#define INFN 1000
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版團(tuán)購工業(yè)地產(chǎn)協(xié)議書3篇
- 2024職業(yè)技能拓展訓(xùn)練合同
- 二零二五年度臨時(shí)道路建設(shè)臨建工程合同范本2篇
- 2025年度珠寶品牌授權(quán)與連鎖經(jīng)營合同范本2篇
- 二零二五版房地產(chǎn)項(xiàng)目市場調(diào)研與策劃咨詢服務(wù)合同范本3篇
- 二零二五年度農(nóng)副產(chǎn)品電商平臺數(shù)據(jù)分析與應(yīng)用合同
- 2025年度智能穿戴設(shè)備代生產(chǎn)加工合同范本4篇
- 2024政府機(jī)關(guān)信息化系統(tǒng)運(yùn)維服務(wù)詢價(jià)采購合同3篇
- 個(gè)體餐飲店合伙人股權(quán)回購協(xié)議模板版B版
- 二零二五年度住宅樓屋頂綠化工程合同3篇
- 2024至2030年中國膨潤土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報(bào)告
- 【地理】地圖的選擇和應(yīng)用(分層練) 2024-2025學(xué)年七年級地理上冊同步備課系列(人教版)
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- JBT 14588-2023 激光加工鏡頭 (正式版)
- 2024年四川省成都市樹德實(shí)驗(yàn)中學(xué)物理八年級下冊期末質(zhì)量檢測試題含解析
- 九型人格與領(lǐng)導(dǎo)力講義
- 廉潔應(yīng)征承諾書
- 2023年四川省成都市中考物理試卷真題(含答案)
- 泵車述職報(bào)告
- 2024年山西文旅集團(tuán)招聘筆試參考題庫含答案解析
- 恢復(fù)中華人民共和國國籍申請表
評論
0/150
提交評論