版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 畢業(yè)設計報告(論文)</p><p> 報告(論文)題目:分段卷積的MATLAB仿真 </p><p> 與DSP實現 </p><p> 作者所在系部: 電子工程系 </p><p> 作者所在專業(yè): 通信 </p>
2、<p> 作者所在班級: </p><p> 作 者 姓 名 : </p><p> 作 者 學 號 : </p><p> 指導教師姓名: </p><p> 完 成 時 間 : 2012年
3、6月15日 </p><p> 畢業(yè)設計(論文)任務書(理工類)</p><p><b> 北華航天工業(yè)學院</b></p><p> 本科生畢業(yè)設計(論文)原創(chuàng)性及知識產權聲明</p><p> 是本人在指導教師的指導下,獨立進行研究工作取得的成果。除文中已經注明引用的內容外,本設計(論文)不含任何其
4、他個人或集體已經發(fā)表或撰寫過的作品或成果。對本設計(論文)的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明。因本畢業(yè)設計(論文)引起的法律結果完全由本人承擔。</p><p> 本畢業(yè)設計(論文)成果歸北華航天工業(yè)學院所有。本人遵循北華航天工業(yè)學院有關畢業(yè)設計(論文)的相關規(guī)定,提交畢業(yè)設計(論文)的印刷本和電子版本。本人同意北華航天工業(yè)學院有權保存畢業(yè)設計(論文)的印刷本和電子版,并提供目錄檢索與閱覽
5、服務;可以采用影印、縮印、數字化或其它復制手段保存論文;在不以營利為目的的前提下,可以公布非涉密畢業(yè)設計(論文)的部分或全部內容。</p><p><b> 特此聲明</b></p><p> 畢業(yè)設計(論文)作者: 指導教師: </p><p> 年 月 日
6、年 月 日</p><p><b> 摘 要</b></p><p> 常用的線性卷積方法要求兩個輸入序列的持續(xù)時間相同,但在實際工程中經常會遇到某個輸入序列具有較長持續(xù)時間的情況,從而無法達到信號實時處理的要求。在這種情況下,分段卷積是一種有效的解決方案。本論文設計了分段卷積的快速算法模塊,分段卷積又可以用兩種方法實現,即重疊相加法和重疊保留法。每
7、種方法先對輸入序列進行分段,再將各段進行快速傅里葉變換,接著進行傅里葉逆變換得到各段輸出,將輸出結果進行處理就得到了最終結果。</p><p> 在DSP中采用流水線結構進行實時處理。經檢驗該方法正確且能很好地滿足對信號進行實時處理的要求。</p><p> 關鍵詞 分段卷積 重疊相加法 重疊保留法 快速傅里葉變換</p><p><b&
8、gt; Abstract</b></p><p> Duration of the linear convolution method requires two input sequences, but in practical engineering often encounter an input sequence has a longer duration, thus unable to s
9、ignal real-time processing requirements. In this case, piecewise convolution is an effective solution. Designed a segmented fast convolution algorithm module, piecewise convolution of two ways, ie, overlap-add method and
10、 overlap save method. Each method first segment of the input sequence, then the paragraphs fast Fourier tr</p><p> Key words partition convolution overlap- add method overlap- save method FFT</p>
11、;<p><b> 目 錄</b></p><p><b> 第1章 緒論1</b></p><p> 1.1 課題背景及國內外研究概況1</p><p> 1.2 MATLAB軟件概述1</p><p> 1.2.1 MATLAB軟件介紹1</p>
12、;<p> 1.2.2 MATLAB軟件應用2</p><p> 1.3 DSP技術介紹及應用2</p><p> 1.4 課題的建立以及本文完成的主要工作2</p><p> 第2章 分段卷積技術4</p><p> 2.1 利用FFT計算線性卷積原理及步驟4</p><p>
13、2.2 重疊相加法原理及流程圖4</p><p> 2.2.1 重疊相加法算法原理4</p><p> 2.2.2 流程圖5</p><p> 2.3 重疊保留法原理及流程圖6</p><p> 2.3.1 原理6</p><p> 2.3.2 流程圖8</p><p>&
14、lt;b> 2.4 小結8</b></p><p> 第3章 MATLAB仿真10</p><p> 3.1 重疊相加法10</p><p> 3.2 重疊保留法10</p><p> 3.3 操作步驟11</p><p> 3.4 程序源代碼及結果分析15</p>
15、;<p><b> 3.5 小結20</b></p><p> 第4章 CCS軟件概況21</p><p> 4.1 CCS軟件簡介21</p><p> 4.1.1 軟件概況22</p><p> 4.1.2 CCS軟件的使用22</p><p> 4.2
16、程序源代碼24</p><p><b> 4.3 小結27</b></p><p> 第5章 課題特點28</p><p> 5.1 MATLAB仿真和DSP實現28</p><p> 5.2 采用時域卷積和FFT變換兩種方案28</p><p> 5.3 C語言和匯編語言混
17、合編程28</p><p> 第6章 結論29</p><p><b> 致 謝30</b></p><p><b> 參考文獻31</b></p><p><b> 附錄32</b></p><p> 分段卷積的MATLAB
18、仿真與DSP實現</p><p><b> 第1章 緒論</b></p><p> 1.1 課題背景及國內外研究概況</p><p> 由于 Matlab 具有計算快速準確和使用方便等優(yōu)點,已經逐漸成為數字信號處理(DSP)應用中分析和設計的主要仿真工具。常用的線性卷積方法要求兩個輸入序列的持續(xù)時間相同, 但在實際工程中經常會遇到某個輸
19、入序列具有較長持續(xù)時間的情況,理論上可以將整個波形存儲起來,利用快速線性卷積方法進行處理。但是利用快速線性卷積變換存在以下問題:(1)需要對那個短序列補充很多零點,從而導致計算量和需要的存儲空間無謂的增加;(2)需要獲得所有的輸入序列,并完全進行處理后,輸出序列才是有效的,因此整個系統(tǒng)必然存在較大的延時,不能符合實時處理的要求;(3)實際上,當兩個序列長度差距較大時,快速卷積的優(yōu)勢并不能體現出來,從而無法達到信號實時處理的要求。在這種情
20、況下,分段卷積是一種有效的解決方案。</p><p> 分段卷積快速算法模塊,在DSP中采用流水線結構進行實時處理,經檢驗該方法正確且能很好地滿足對信號進行實時處理的要求。</p><p> 1.2 MATLAB軟件概述</p><p> 1.2.1 MATLAB軟件介紹</p><p> MATLAB是由美國mathworks公司發(fā)
21、布的主要面對科學計算、可視化以及交互式程序設計的高科技計算環(huán)境。它將數值分析、矩陣計算、科學數據可視化以及非線性動態(tài)系統(tǒng)的建模和仿真等諸多強大功能集成在一個易于使用的視窗環(huán)境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案,并在很大程度上擺脫了傳統(tǒng)非交互式程序設計語言(如C、Fortran)的編輯模式,代表了當今國際科學計算軟件的先進水平。</p><p> Matlab和
22、Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現算法、創(chuàng)建用戶界面、連接MATLAB開發(fā)工作界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。</p><p> MATLAB的基本數據單位是矩陣,它的指令表達式與數學、工程中常用的形式十
23、分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完成相同的事情簡捷得多,并且MATLAB也吸收了像Maple等軟件的優(yōu)點,使MATLAB成為一個強大的數學軟件。在新的版本中也加入了對C,FORTRAN,C++ ,JAVA的支持??梢灾苯诱{用,用戶也可以將自己編寫的實用程序導入到MATLAB函數庫中方便自己以后調用,此外許多的MATLAB愛好者都編寫了一些經典的程序,用戶可以直接進行下載就可以使用。</p>
24、<p> MATLAB具有以下特點:</p><p> 1.高效的數值計算及符號計算功能,能使用戶從繁雜的數學運算分析中解脫出來;</p><p> 2.具有完備的圖形處理功能,實現計算結果和編程的可視化;</p><p> 3.友好的用戶界面及接近數學表達式的自然化語言,使學者易于學習和掌握;</p><p> 4.功能
25、豐富的應用工具箱,為用戶提供了大量方便實用的處理工具。.</p><p> 1.2.2 MATLAB軟件應用</p><p> MATLAB 產品族可以用來進行以下各種工作: </p><p> ?。?) 數值分析 </p><p> (2)數值和符號計算 </p><p> ?。?)工程與科學繪圖
26、 </p><p> ?。?)控制系統(tǒng)的設計與仿真 </p><p> (5)數字圖像處理 技術 </p><p> ?。?)數字信號處理 技術 </p><p> ?。?)通訊系統(tǒng)設計與仿真 </p><p> (8)財務與金融工程 </p><p> MATLAB 的
27、應用范圍非常廣,包括信號和圖像處理、通訊、控制系統(tǒng)設計、測試和測量、財務建模和分析以及計算生物學等眾多應用領域。附加的工具箱(單獨提供的專用 MATLAB 函數集)擴展了 MATLAB 環(huán)境,以解決這些應用領域內特定類型的問題。</p><p> 1.3 DSP技術介紹及應用</p><p> 數字信號處理是利用計算機或專用處理設備,以數字的形式對信號進行分析、采集、合成、變換、濾波、
28、估算、壓縮、識別等加工處理,以便提取有用的信息并進行有效的傳輸與應用。與模擬信號處理相比,數字信號處理具有精確、靈活、抗干擾能力強、可靠性高、體積小、易于大規(guī)模集成等優(yōu)點。</p><p> DSP是一種特別適合于進行數字信號處理運算的微處理器,主要用于實時快速實現各種數字信號處理的算法。</p><p> 1.4 課題的建立以及本文完成的主要工作</p><p&g
29、t; 利用FFT實現線性卷積方法要求兩個輸入序列的長度基本相同,但在實際工程中經常會遇到某個輸入序列具有較長持續(xù)時間的情況,而另一序列較短,理論上可以將輸入序列(長序列)存儲起來,利用快速線性卷積方法進行處理,但無法達到信號“實時”處理的要求。在這種情況下,分段卷積是一種有效的解決方案。</p><p> 本文主要包括以下內容:</p><p> 1.基于matlab完成分段卷積,并
30、以圖形方式演示分段卷積過程;</p><p> 2.基于DSP編程實現分段卷積;</p><p> 3.采用重疊相加法和重疊保留法兩種方法實現。</p><p> 第2章 分段卷積技術</p><p> 2.1 利用FFT計算線性卷積原理及步驟</p><p> 設輸入信號分別為x(n)和y(n),分別對其
31、進行FFT運算,進而求出Y(k),利用逆FFT得到y(tǒng)(n)。計算步驟如下:</p><p> a.計算X(k)=FFT[x(n)]</p><p> b. 求H(k)=FFT[h(n)]</p><p> c. 求Y(k)=H(k)X(k) k=0~L-1</p><p> d. 求y(n)=IFFT[Y(k)]
32、 n=0~L-1</p><p> 上述結論適用于x(n)、h(n)兩序列長度比較接近或相等的情況,如果x(n)、h(n)長度相差較多,例如:h(n)為某濾波器的單位脈沖響應,長度有限,用來處理一個很長的輸入信號x(n),或者處理一個連續(xù)不斷的信號,按上述方法,h(n)要補許多零再進行計算,計算量有很大的浪費,或者根本不能實現。為了保持快速卷積法的優(yōu)越性,可將x(n)分為許多段后處理,每小段的長與h(n
33、)接近,其處理方法有兩種:即重疊相加法和重疊保留法。</p><p> 2.2 重疊相加法原理及流程圖</p><p> 2.2.1 重疊相加法算法原理</p><p> 重疊相加法是將輸入序列x(n)進行分段,每段長度為N,分段的結果與h(n)(長度為M)進行卷積,且N不小于M,如圖2-1所示。</p><p> 圖2-1 重疊相
34、加法中x(n)分段圖</p><p> 將分段結果代入式(2-1):</p><p><b> ?。?-1)</b></p><p> 其中,的長度為N+M-1,有效區(qū)間為[lN,(l+1)N+M-2]。</p><p> 為了提高運算效率,可以用N+M-1點的循環(huán)卷積來完成的計算,如圖2-2所示。</p&g
35、t;<p> 圖2-2 重疊相加法中yl(n)之間關系圖</p><p><b> 2.2.2 流程圖</b></p><p> 重疊相加法流程圖如圖2-3所示。</p><p> 圖2-3 重疊相加法流程圖</p><p> 2.3 重疊保留法原理及流程圖</p><p>
36、;<b> 2.3.1 原理</b></p><p> 對序列y(n)進行分段,每段長度為N,則,分段結果如式(2-2):</p><p> 其他 (2-2) </p><p> 重疊保留法中yl(n)的分段結果如圖2-4所示,</p><p> 圖2-4 重疊保留
37、法中yl(n)分段圖</p><p> 因h(n)為因果序列且長度為M,由線性卷積的物理含義可知,從點(lN-M+1)到點[(l+1)N-1]范圍內的輸入將唯一決定序列yl(n)的取值,所以根據輸出序列y(n)的分段結果可確定輸入序列x(n)的分段方式,如式(2-3)所示,</p><p> 其他 (2-3)</p><p> 式中l(wèi)=1,2..
38、..</p><p> 重疊保留法中xl(n)各段間的關系如圖2-5所示。</p><p> 圖2-5 重疊保留法中xl(n)之間關系圖</p><p><b> 2.3.2 流程圖</b></p><p> 重疊保留法流程圖如圖2-6所示。</p><p><b> 否<
39、;/b></p><p><b> 是</b></p><p> 圖2-6 重疊保留法流程圖</p><p><b> 2.4 小結</b></p><p> 重疊相加法和重疊保留法都是應用DFT求線性卷積的方法,之所以會改進直接計算線性卷積的時間復雜度,就是因為DFT的快速算法。兩種
40、算法都是對原序列進行分組,進行循環(huán)卷積后再組合,有相同的時間復雜度,但在執(zhí)行過程和應用范圍上還是有一定的區(qū)別。重疊相加法是對已知的有限長序列進行分段后與系統(tǒng)序列循環(huán)卷積,組合時去掉每段后面重疊的部分;重疊保留法是通過對輸出序列進行分段后導出的一種線性卷積方法,分段前對原序列前面進行添零,分段循環(huán)卷積后將每段后面未重疊的一部分保留后組合。</p><p> 兩個程序在分段上有差異,但都是對截斷的序列進行循環(huán)卷積,
41、因而有一定的通用性。在進行本實驗的編程上,最主要的是理解兩種方法實現的過程,在對數據處理時要注意各個數據的含義和數組的組合過程。</p><p> 在編程過程中,我曾多次遇到數據長度不匹配的提醒,通常是數組長度后少添了或多添了常數,這種錯誤必須比對方法的定義耐心仔細的尋找。在數組的組合上本人認為是很有技巧的,力求明確簡單,必須經過多次的嘗試才能得出較為理想的方式。</p><p> 第
42、3章 MATLAB仿真</p><p><b> 3.1 重疊相加法</b></p><p> MATLAB實現重疊相加法流程圖如圖3-1所示。</p><p> 圖3-1 MATLAB實現重疊相加法流程圖</p><p><b> 3.2 重疊保留法</b></p><
43、;p> MATLAB實現重疊相加法流程圖如圖3-2所示。</p><p> 圖3-2 MATLAB實現重疊保留法圖</p><p><b> 3.3 操作步驟</b></p><p><b> 一、重疊相加法</b></p><p> 1.建立一個新文件,名為cdxj.m,如圖3-
44、3所示。</p><p> 圖3-3 重疊相加法建立新文件圖</p><p><b> 2.輸入程序代碼</b></p><p> 輸入重疊相加法程序代碼過程如圖3-4所示。</p><p> 圖3-4 重疊相加法輸入程序代碼圖</p><p> 3.保存文件并運行,結果如圖3-5、3-
45、6所示。</p><p> 圖3-5 重疊相加法保存運行文件圖</p><p> 圖3-6 重疊相加法保存運行文件圖</p><p><b> 4.仿真結果</b></p><p> 仿真結果如圖3-7所示。</p><p> 圖3-7 重疊相加法仿真結果圖</p><
46、;p> 運算結果如圖3-8所示。</p><p> 圖3-8 重疊相加法運算結果圖</p><p><b> 重疊保留法</b></p><p> 程序代碼及保存文件如圖3-9、3-10所示。</p><p> 圖3-9 重疊保留法程序代碼圖</p><p> 圖3-10 重疊保
47、留法保存文件圖</p><p> 仿真結果及運行結果如圖3-11、3-12所示。</p><p> 圖3-11 重疊保留法仿真結果圖</p><p> 圖3-12 重疊保留法運行結果圖</p><p> 3.4 程序源代碼及結果分析</p><p><b> 1.重疊相加法</b><
48、;/p><p> function [] =cdj(xe,h,N)</p><p> h=[1 0 -1];xe=[1:10];N=6;</p><p> k=length( xe );%輸入序列長度</p><p> t=length(h);%有限長序列長度</p><p> g=N+t-1;%進行循環(huán)卷積的長
49、度</p><p> m=ceil(k/N);%將xe分段</p><p> p=m*N+t-1;%序列卷積后的總長度</p><p> yn=zeros(1,p);</p><p> x=[xe,zeros(1,m*N-k)];%補零</p><p> for j=0:m-1</p><
50、p> xj=x(N*j+1:N*(j+1));%xe中每段卷積的元素</p><p> xak=fft(xj,g);</p><p> hk=fft(h,g);</p><p> yn1=ifft(xak.*hk); %每段的卷積結果</p><p> temp=zeros(1,p);</p><p>
51、 temp(N*j+1:N*j+g)=yn1;</p><p> yn=yn+temp;%將每段的卷積結果加到y(tǒng)n中</p><p><b> end;</b></p><p> yn %輸出卷積后的結果</p><p><b> n=0:p-1;</b></p>&
52、lt;p><b> figure(1)</b></p><p> subplot(2,1,1);</p><p> stem(n,yn);</p><p> xlabel('n');ylabel('y(n)');</p><p> title('h(n)與xe(n)
53、的線性卷積的時域波形—重疊相加法');</p><p> subplot(2,1,2);</p><p> stem(n,abs(fft(yn)));</p><p> xlabel('k');ylabel('Y(k)');</p><p> axis([0,6*p/5,0,sum(ceil(a
54、bs(yn)))]);</p><p> title('h(n)與xe(n)的線性卷積的頻域特性—重疊相加法');</p><p><b> 運行結果</b></p><p> h=[1 0 -1];</p><p> xe=[1:10];</p><p><b>
55、; N=6</b></p><p> 經過重疊相加法求得線性卷積結果為</p><p><b> yn =</b></p><p> Columns 1 through 11</p><p> 1.0000 2.0000 2.0000 2.0000 2.0000 2.0
56、000 2.0000 2.0000 2.0000 2.0000 -9.0000</p><p> Columns 12 through 14</p><p> -10.0000 -0.0000 -0.0000</p><p> 仿真圖形如圖3-14:</p><p> 圖3-13 重疊相加法仿真結果
57、圖</p><p> 可以看出仿真結果與運算結果相同。用以上算法,對長為k的序列x(n)進行分段,每段長度為N,可分為[K/N]段,每段的結果與h(n)(長度為M)進行卷積,</p><p> 通過FFT運算可以減少運算量,復乘[K/N](N+M-1)log2(N+M-1)次,復加2[K/N](N+M-1)log2(N+M-1)次如圖3-14所示:</p><p&g
58、t; 圖3-14 重疊相加法結果分析圖</p><p><b> 2.重疊保留法</b></p><p> function [] =cdbl(xe,h,N)</p><p> xe=[1:10];h=[1 0 -1];N=4;</p><p> k=length(xe);%輸入序列長度</p>
59、<p> M=length(h);%有限長序列長度</p><p> g=N+M-1;%進行循環(huán)卷積的長度</p><p> m=ceil(k/N);%將xe分段</p><p> p=m*N+M-1;%序列卷積后的總長度</p><p> xe1=zeros(1,M-1);</p><p> x
60、=[xe1,xe,zeros(1,g-(k-(m-1)*N)+M-1)];%在xe前面添(M-1)個零,后面添足零為g的整數倍</p><p> yn=zeros(1,p);</p><p> for j=0:m-1</p><p> xj=x(N*j+1:N*(j+1)+M-1);%xe中每段卷積的元素</p><p> xak=f
61、ft(xj,g);</p><p> hk=fft(h,g);</p><p> yn1=ifft(xak.*hk); %每段的卷積結果</p><p> temp=zeros(1,p);</p><p> temp(N*j+1:N*(j+1))=yn1(M:g)</p><p> yn=yn+temp;%將
62、每段的卷積結果加到y(tǒng)n中</p><p><b> end;</b></p><p> yn %輸出卷積后的結果</p><p><b> n=0:p-1;</b></p><p><b> figure(2)</b></p><p>
63、 subplot(2,1,1);</p><p> stem(n,yn);</p><p> xlabel('n');ylabel('y(n)');</p><p> title(' xc(n)與xe(n)的線性卷積的時域波形—重疊保留法');</p><p> subplot(2,1,
64、2);</p><p> stem(n,abs(fft(yn)));</p><p> xlabel('k');ylabel('Y(k)');</p><p> axis([0,6*p/5,0,sum(ceil(abs(yn)))]);</p><p> title('xc(n)與xe(n)的線
65、性卷積的幅頻特性—重疊保留法');</p><p><b> end</b></p><p><b> % 測試序列</b></p><p> % xe=[1:10];</p><p> % h=[1 0 -1];</p><p> % N=4;cdbl(x
66、e,h,N)</p><p><b> 運行結果</b></p><p><b> 測試序列</b></p><p> xe=[1:10];</p><p> h=[1 0 -1];</p><p><b> N=4;</b></p>
67、;<p><b> 結果為:</b></p><p><b> yn =</b></p><p> Columns 1 through 11</p><p> 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2
68、.0000 2.0000 2.0000 -9.0000</p><p> Columns 12 through 14</p><p> -10.0000 0 0</p><p> 仿真如圖3-16所示。</p><p> 圖3-15 重疊保留法仿真結果圖</p><p
69、> 重疊保留法和重疊相加法是有相同的運算過程,如圖3-16所示:</p><p> 圖3-16 結果分析圖</p><p> 因而也是進行了復乘[K/N](N+M-1)log2(N+M-1)次,復加2[K/N](N+M-1)log2(N+M-1)次。</p><p><b> 3.5 小結 </b></p><
70、p> 重疊相加法和重疊保留法都是應用DFT求線性卷積的方法,之所以會改進直接計算線性卷積的時間復雜度,就是因為DFT的快速算法。兩種算法都是對原序列進行分組,進行循環(huán)卷積后再組合,有相同的時間復雜度,但在執(zhí)行過程和應用范圍上還是有一定的區(qū)別。重疊相加法是對已知的有限長序列進行分段后與系統(tǒng)序列循環(huán)卷積,組合時去掉每段后面重疊的部分;重疊保留法是通過對輸出序列進行分段后導出的一種線性卷積方法,分段前對原序列前面進行添零,分段循環(huán)卷積
71、后將每段后面未重疊的一部分保留后組合。</p><p> 兩個程序在分段上有差異,但都是對截斷的序列進行循環(huán)卷積,因而有一定的通用性。在進行本設計的編程上,最主要的是理解兩種方法實現的過程,在對數據處理時要注意各個數據的含義和數組的組合過程。</p><p> 第4章 CCS軟件概況</p><p> 4.1 CCS軟件簡介</p><p
72、> CCS(Code Composer Studio數據設計工作室)代碼調試器是一種合成開發(fā)環(huán)境。 它是一種針對標準TMS320調試器接口的交互式方法。CCS目前有CCS1.1, CCS1.2 和CCS2.0等三個不同時期的版本,又有CC2000 ( 針對C2XX ),CCS5000 ( 針對C54XX )和CCS6000 (針對C6X )三個不同的型號。我們所使用的是CCS50002.0的版本。</p><
73、p> CCS5000具有以下特性:</p><p> TI編譯器的完全集成的環(huán)境:CCS5000目標管理系統(tǒng),內建編輯器,所有的調試和分析能力集成在一個Windows環(huán)境中。</p><p> 對C和DSP匯編文件的目標管理:目標編輯器保持對所有文件及相關內容的跟蹤。它只對最近一次編譯中改變過的文件重新編譯,以節(jié)省編譯時間。</p><p> 高集成的
74、編輯器調整C和DSP匯編代碼:CCS5000的內建編輯器支持C和匯編文件的動態(tài)語法加亮顯示。使用戶能很容易地閱讀代碼和當場發(fā)現語法錯誤。</p><p> 編輯和調試時的后臺編輯:用戶在使用編譯器和匯編器時沒有必要退出系統(tǒng)到DOS環(huán)境中,因為CCS5000會自動將這些工具裝載在它的環(huán)境中。在其窗口中,錯誤會加亮顯示只要雙擊錯誤就可以直接到達出錯處。</p><p> 在含有浮點并行調試
75、管理器(PDM)的原有的MS窗口下支持多處理器CCS5000在 Windows95和Windows-me中支持多處理。PDM(調試管理器)允許將命令傳播給所有的或所選擇的處理器。</p><p> 在任何算法點觀察信號的圖形窗口探針:圖形顯示窗口使用戶能夠觀察時域或頻域內的信號。對于頻域圖,FFT(快速傅立葉變換)在主機內執(zhí)行,這樣就可以觀察所感興趣的部分而無須改變它的DSP代碼。圖顯示也可以同探針連接,當前顯
76、示窗口被更新時,探針被指定,這樣當代碼執(zhí)行到達該點時,就可以迅速地觀察到信號。</p><p> 文件探針在算法處通過文件提取或加入信號或數據:CCS5000允許用戶從PC機讀或寫信號流。而不是實時的讀信號,這就可以用已知的例子來仿真算法。</p><p> 圖形分析:CCS5000的圖形分析能力在其環(huán)境中是集成的。</p><p> 在后臺(系統(tǒng)命令)執(zhí)行用
77、戶的DOS程序:</p><p> 用戶可以執(zhí)行CCS5000中的DOS程序,并將其輸出以流水方式送到CCS5000的輸出窗口。且允許用戶將應用程序集成到CCS5000。</p><p> 技術狀態(tài)觀察窗口:CCS5000的可視窗口允許用戶進入C表達式及相關變量。結構、數組、指針都能很簡單地遞歸擴展和減少,以便進入復雜結構。</p><p> 代數分解窗口:允
78、許用戶選擇查看寫成代數表達式的C格式,提高可讀性 。</p><p> 目標DSP上的幫助:DSP結構和寄存器上的在線幫助可以使用戶不必查看技術手冊。</p><p> 用戶擴展:擴展語言(GEL)使得用戶可以將自己的菜單項加到CCS5000的菜單欄中。</p><p> 主要操作流程如圖4-1所示。</p><p> 圖4-1 主要
79、操作流程圖 </p><p> 4.1.1 軟件概況</p><p> CCS提供了環(huán)境配置、源文件編譯、程序調試、跟蹤和分析等工具。可以幫助用戶在一個軟件環(huán)境下完成編譯、編譯鏈接、調試和數據分析等工作。與TI提供的早期軟件開發(fā)工具相比,利用CCS能夠加快軟件開發(fā)進程,提高工作效率:CCS一般工作在兩種模式:軟件仿真器和與硬件開發(fā)板相結合的在線編程。前者可以脫離DSP芯片,在PC機上模
80、擬DSP的指令集與工作機制,主要用于前期算法實現和調試;后者實時運行在DSP芯片上??梢栽诰€編制和調試應用程序。一般的,一種CCS只適用于一種系列的DSP芯片。例如CCS5000適用于C5000系列DSP芯片,包括C54x和C55x。用戶只需要在CCS配置程序中設定DSP的類型和開發(fā)平臺類型即可。</p><p> 4.1.2 CCS軟件的使用</p><p> 打開CCS5000主程
81、序,打開的主界面如圖4-2所示。</p><p> 圖4-2 CCS54xx軟件界面</p><p><b> 1.新建工程文件</b></p><p> 文件復制完成以后,啟動CCS,在主菜單中單擊“Project”(設計),會有“new”和“open”選項,創(chuàng)建新工程使用“new”選項。程序會提問新建工程的名字以及保存位置,指定后單擊
82、“確定”即可,如圖4-3所示。</p><p> 圖4-3 新建工程圖 </p><p> 可以使用兩種方式向工程添加源文件、CMD文件和庫文件添加源文件。</p><p> 在主菜單中單擊“Project”,選擇“Add Files to Project”命令,在彈出的添加文件對話框中找到目錄“a”,選擇文件“a.c”,單擊“打開”按鈕,如下面左圖所示。&l
83、t;/p><p> 另一個方法是在工程名“a.pjt”上單擊鼠標右鍵,選擇“Add Files”命令。在彈出的添加文件的對話框中,找到目錄“a”,再在添加文件對話框中單擊“文件類型”,選擇“C Source Files(*.c;*.ccc)”,這樣在添加文件對話框里就只顯示指定類型的文件。同時選擇“l(fā)oad.asm”和“vectors.asm”,單擊“打開”按鈕,如圖4-4所示。</p><p&
84、gt; 圖4-4 添加文件方式圖 </p><p> ?。?)接著添加必需的內存定位文件“*.cmd”,使用上述任一方式,向工程里添加“a.cmd”,注意在添加文件對話框的“文件類型”下拉列表中要選擇“Link Command File(*.cmd)”,該文件定義了各代碼段和數據段在存儲器中的位置。</p><p> ?。?)因為本實驗工程是基于C語言編寫的,因此還需要添加運行時支持庫(
85、Run-Time-Support Library)。使用上述任何一種方式,向工程添加“rts.lib”文件,該文件存放在CCS的安裝目錄“\c5400\cgtools\lib”下。注意在添加文件對話框的“文件類型”下拉列表中要選擇“Object Library Files(*.o*,*.l*)”。</p><p> (3)添加頭文件。在工程名“a.pjt”上單擊鼠標右鍵,選擇“Scan All Dependen
86、cies”,這樣a.c文件所包含的頭文件“a.h”將出現在工程瀏覽窗中的“Iclude”文件夾中。頭文件實際不用人工添加,在Build工程時,CCS本身就會自動完成掃描。</p><p><b> 建造和運行程序</b></p><p> 建造(Building)在這里指編譯、匯編、鏈接三個獨立步驟按順序聯合運行。在主菜單中單擊“Project”,選擇“Rebui
87、ld All”,或者單擊工具條圖標,CCS將重新對工程中所有文件進行編譯、匯編、鏈接,并同步在底部窗口中顯示編譯連接信息。連接完畢,CCS生成一個“.out”文件,默認存放在目錄“a”下的“debug”(除錯)目錄中。</p><p> 建造完畢后,再完成裝載程序的步驟:在主菜單中單擊“File”,選擇“Load Program”,在彈出對話框中,找到目錄“a”下的“debug”目錄,選擇“a.out”,并打開
88、。</p><p> 在主菜單中單擊“Debug”,選擇“Run”,或單擊工具條圖標,讓程序全速運行。如果能在底部的stdout標準輸出窗口看到程序運行的輸出信息“a started”,證明程序能夠正常運行。在主菜單中單擊“Debug”,選擇“Run”,或單擊工具條圖標,讓程序停止運行。</p><p> 2.多種觀察窗口幫助調試</p><p> 查看寄存器
89、:在 CCS中選擇View菜單中的CPU Registers命令。</p><p> 查看數據:選擇View菜單中的Memory…命令,彈出設置窗口,按實際需要指定其中的參數,如起始地址等,就可以觀察到數據單元中的值,該值可以以多種格式表示。</p><p> 查看程序中變量的當前值:可以在程序中用光標選中變量名,在鼠標右鍵菜單中選擇Add to Watch Window命令就可以把該
90、變量添加到Watch窗口。隨著程序的運行,可以在Watch窗口看到該變量的值的變化。</p><p> 顯示圖形:如果要觀察的變量太多,例如要觀察一個數組的值,那么可以用一種更直觀的方法,就是把數據用圖形的方式表現出來。選擇View菜單中的Graph命令,會有不同類型的圖形可供選擇。常用的是時域/頻域波形,即Time/Frequency…項。在彈出的Graph Property對話框中,可以設定圖形的標題、數據
91、的起始地址、采集緩沖區(qū)的大小、顯示數據的大小、數據類型等屬性。</p><p><b> 4.2 程序源代碼</b></p><p> 根據課題要實現的功能及要求,CCS軟件進行分段卷積編程部分C語言源程序:</p><p><b> 1.重疊相加法</b></p><p> #includ
92、e<stdio.h></p><p><b> main()</b></p><p><b> {</b></p><p> static float y[600],z[600];</p><p> int m,n,L,i,j,k,s,t,t1,p,M;
93、 </p><p> float x[10]={1,2,3,4,5,6,7,8,9,10};</p><p> float v[3]={1,0,-1};</p><p> M=6;m=10;n=3;</p><p><b> L=M+n-1;</b></p><p><b
94、> t=m/M;</b></p><p> if (m%M==0)</p><p><b> t1=t;</b></p><p> else t1=t+1; </p><p> for (p=0;p<=t1-1;p++)</p><p><b> {&
95、lt;/b></p><p> for(i=p*L;i<=(p+1)*L-1;i++)</p><p><b> {</b></p><p><b> s=0;</b></p><p> for (j=0;j<=M-1;j++)</p><p>&l
96、t;b> {k=i-j;</b></p><p> s+=x[p*M+j]*v[k-p*L];</p><p><b> y[i]=s;}</b></p><p><b> }}</b></p><p> for(p=0;p<=t1-1;p++) </p>
97、;<p><b> {</b></p><p> for(i=p*L;i<=(p+1)*L-1;i++)</p><p> {if(i==0||(0<i<M-1))</p><p> z[i]=y[i];</p><p> if((L+p*M-n<i<=L+p*M-1
98、)&&(i>M-1))</p><p> z[i]=y[i+p*(n-1)]+y[i+(p+1)*(n-1)];</p><p> if((p*L-1<i<=p*L+M-n)&&(i>=L))</p><p> z[i]=y[i+p*(n-1)];</p><p> return
99、(z[i]);}</p><p><b> } </b></p><p><b> }</b></p><p><b> 2.重疊保留法</b></p><p> #include<stdio.h></p><p><b>
100、 main()</b></p><p><b> {</b></p><p> static float y[600],x1[600],h1[300],h2[300];</p><p> int M,N,L,Lx,i,j,k,s,t,t1,p; </p><p>
101、 float x[10]={1,2,3,4,5,6,7,8,9,10};</p><p> float h[3]={1,0,-1};</p><p> Lx=10;M=3;N=6;</p><p><b> L=M+N-1;</b></p><p><b> t=Lx/N;</b><
102、/p><p> if (Lx%N==0)</p><p><b> t1=t;</b></p><p> else t1=t+1; </p><p> for(j=M;j<L;j++)</p><p><b> h[j]=0;</b></p><
103、;p> for(i=M-1;i<=Lx+M-2;i++)</p><p> x1[i]=x[i-M+1];</p><p> for(i=0;i<M-1;i++)</p><p><b> x1[i]=0;</b></p><p> h1[0]=h[0];</p><p&g
104、t; for(j=1;j<L;j++)</p><p> h1[j]=h[L-j];</p><p> for(p=0;p<t1;p++)</p><p><b> {</b></p><p> for(i=p*L;i<(p+1)*L;i++)</p><p><
105、b> {s=0;</b></p><p> for(j=0;j<L;j++)</p><p> s+=x1[j+p*N]*h1[j];</p><p><b> y[i]=s;</b></p><p> for (k=0;k<L;k++) </p><p>
106、<b> {</b></p><p> h2[k]=h1[k];</p><p> h1[0]=h2[L-1];}</p><p> for(k=1;k<L;k++)</p><p> h1[k]=h2[k-1];</p><p><b> }</b><
107、;/p><p><b> }</b></p><p> for(p=0;p<t1;p++)</p><p><b> {</b></p><p> for(i=p*N;i<(p+1)*N;i++)</p><p> {y[i]=y[i+(p+1)*(M-1)
108、];</p><p> Return(y[i]);}</p><p><b> }</b></p><p><b> }</b></p><p><b> 3.鏈接文件</b></p><p><b> MEMORY</b>
109、;</p><p><b> {</b></p><p> PAGE 0: EPROG: origin = 0x1400, len = 0x7c00</p><p> VECT: origin = 0xff80, len = 0x80</p><p> PAGE
110、1: USERREGS: origin = 0x60, len = 0x1c</p><p> BIOSREGS: origin = 0x7c, len = 0x4</p><p> IDATA: origin = 0x80, len = 0x1380</p><p> EDATA:
111、 origin = 0x1400, len = 0x8000</p><p> EDATA1: origin = 0x9400, len = 0x4c00</p><p><b> }</b></p><p><b> SECTIONS</b></p><p
112、><b> {</b></p><p> .vectors: {} > VECT PAGE 0</p><p> .sysregs: {} > BIOSREGS PAGE 1</p><p> .trcinit: {} > EPROG PAGE 0</p><p> .gblinit:
113、{} > EPROG PAGE 0</p><p> frt: {} > EPROG PAGE 0</p><p> .text: {} > EPROG PAGE 0</p><p> .cinit: {} > EPROG PAGE 0</p><p> .pinit: {} > E
114、PROG PAGE 0</p><p> .sysinit: {} > EPROG PAGE 0</p><p> .bss: {} > IDATA PAGE 1</p><p> .far: {} > IDATA PAGE 1</p><p> .const: {} > IDATA PAG
115、E 1</p><p> .switch: {} > IDATA PAGE 1</p><p> .sysmem: {} > IDATA PAGE 1</p><p> .cio: {} > IDATA PAGE 1</p><p> .MEM$obj: {} > IDATA PAGE 1</
116、p><p> .sysheap: {} > IDATA PAGE 1</p><p> .stack: {} > IDATA PAGE 1</p><p><b> }</b></p><p><b> 4.3 小結</b></p><p> 重疊相加法
117、和重疊保留法計算分段卷積與線性卷積完全相同,且能很好的解決實際工程中利用快速線性卷積變換經常會遇到的以下問題:(1)需要對那個短序列補充很多零點,從而導致計算量和需要的存儲空間無謂的增加;(2)需要獲得所有的輸入序列,并完全進行處理后,輸出序列才是有效的,因此整個系統(tǒng)必然存在較大的延時,不能符合實時處理的要求;(3)實際上,當兩個序列長度差距較大時,快速卷積的優(yōu)勢并不能體現出來,從而無法達到信號實時處理的要求。分段卷積快速算法模塊,在D
118、SP中采用流水線結構進行實時處理,經檢驗該方法正確且能很好地滿足對信號進行實時處理的要求。</p><p><b> 第5章 課題特點</b></p><p> 5.1 MATLAB仿真和DSP實現</p><p> MATLAB將一個優(yōu)秀軟件的易用性與可靠性、通用性與專業(yè)性 、一般目的的應用與高深的科學技術應用有機的相結合。MATLA
119、B是一種直譯式的高級語言,比其它程序設計語言容易。它集科學計算、圖象處理;聲音處理于一身,并提供了豐富的Windows圖形界面設計方法。</p><p> MATLAB語言是功能強大的計算機高級語言,它以超群的風格與性能風靡全世界,成功地應用于各工程學科的研究領域。</p><p> 在具體編程實現某個DSP算法之前,一般首先需要對其進行模擬仿真。MATLAB目前已經成為非常優(yōu)秀的仿真
120、工具、現行的版本已經包含了許多強大的工具軟件包。被各個學科廣泛使用。單獨使用MATLAB語言就可以實現C、FORTRAN等語言的許多功能,并且實現起來更加簡潔方便,同時它也提供同C語言的接口。</p><p> 5.2 采用時域卷積和FFT變換兩種方案</p><p> 為了解決在實際過程中線性卷積會遇到的無法滿足實時性要求的問題,可采用分段卷積方案,分段卷積可采用兩種方案:(1)采用
121、是與直接卷積方法;(2)采用FFT變換得到Y(K),再進行IFFT得到y(tǒng)(n)。</p><p> 5.3 C語言和匯編語言混合編程</p><p> 用C語言開發(fā)DSP程序不僅使DSP開發(fā)的速度大大加快,而且開發(fā)出來的DSP程序的可讀性和可移植性都大大增加,程序修改也極為方便。雖然C編譯器的優(yōu)化功能可以使C代碼的效率大大增加,但在某些情況下,C代碼的效率還是無法與手工編寫的匯編代碼的
122、效率相比,如FFT程序。此外,用C語言實現DSP芯片的某些硬件控制也不如匯編程序方便,有些甚至無法用C語言實現。因此,在很多情況下,DSP應用程序往往需要用C語言和匯編語言的混合編程方法來實現,以達到最佳地利用DSP芯片軟硬件資源的目的。</p><p> 用C語言和匯編語言的混合編程方法主要有以下三種:</p><p> 獨立編寫C程序和匯編程序,分開編譯或匯編形成各自的目標代碼模塊
123、,然后用鏈接器將C模塊和匯編模塊鏈接起來。</p><p> 直接在C語言程序的相應位置嵌入匯編語句;</p><p> 對C程序進行編譯生成相應的匯編程序,然后對匯編程序進行手工優(yōu)化和修改。</p><p> 本設計采用第一種方法。</p><p><b> 第6章 結論</b></p><
124、;p> 分段卷積方法是實際數字信號處理中經常用到的方法。它能夠靈活的計算長輸入序列對IIR的濾波響應,并且不會引入很大的延時,通??梢怨?jié)約%50的計算時間,因此是一種很有效的方法。</p><p> 利用重疊相加法和重疊保留法計算分段卷積的結果不但與線性卷積結果相同。而且很好地解決了常用的線性卷積方法要求兩個輸入序列的持續(xù)時間相同, 但在實際工程中經常會遇到某個輸入序列具有較長持續(xù)時間的情況,從而無法達
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計----基于matlab的qpsk系統(tǒng)仿真設計與實現
- 電流保護matlab仿真畢業(yè)設計
- 利用matlab軟件設計實現信號仿真系統(tǒng)畢業(yè)設計
- 畢業(yè)設計---基于matlab的dpll設計與仿真
- 畢業(yè)設計---基于matlab的卷積碼的分析與應用
- 畢業(yè)設計--基于matlab的rf電路設計與仿真
- 畢業(yè)設計--基于matlab的rf電路設計與仿真
- 畢業(yè)設計--基于matlab實現的ct重建算法仿真比較研究
- dc-dc-ac仿真matlab畢業(yè)設計
- matlab實現卷積碼編譯碼畢業(yè)論文
- 畢業(yè)設計---基matlab的人臉識別系統(tǒng)設計與仿真
- 畢業(yè)設計(論文)-基于matlab的液壓系統(tǒng)的設計與仿真
- 畢業(yè)設計(論文)基于matlab的rf電路設計與仿真
- 同步發(fā)電機matlab仿真同步電機模型的matlab仿真畢業(yè)設計
- 調制解調的matlab實現畢業(yè)設計
- 畢業(yè)設計 ---基于matlab仿真的數字調制與解調設計
- dtmf信號系統(tǒng)的matlab仿真畢業(yè)設計
- 新型pid控制技術的matlab仿真畢業(yè)設計
- 【畢業(yè)設計】基于matlab車牌識別系統(tǒng)設計與實現
- 基于matlab的fir濾波器設計與仿真_畢業(yè)設計論文
評論
0/150
提交評論