|
作者:王彥
許久許久沒有這么安靜下來寫點(diǎn)東西了,最近特別有功夫,就回憶了一下學(xué)習(xí)DSP的整個(gè)過程,我算不上會(huì)DSP只是在認(rèn)真的學(xué)習(xí)罷了,我想時(shí)常有空就把我學(xué)習(xí)DSP的心得寫下來,以作將來自己的一份回憶,也許無什么大的價(jià)值供大家參考,我還是會(huì)認(rèn)真虛心的去寫下去。
我學(xué)DSP有半年多了吧,還是不是很懂整個(gè)奧妙的專業(yè),也許臺(tái)深了也許我的知識(shí)儲(chǔ)備還是不夠吧,學(xué)習(xí)起來也說不上吃力,但還是不是那么明朗的感覺。閑話就不多說了,我們說正題吧,學(xué)DSP其實(shí)是我的一個(gè)同學(xué)給我引的路,他是做ARM的對這個(gè)方面多少有點(diǎn)了解,就推薦我學(xué)DSP,在大三的暑假快結(jié)束的時(shí)候就引我見了一個(gè)導(dǎo)師,在DSP方面做過研究我就跟著老師學(xué)習(xí),開始嘛自己不是了解,老師就推薦我先看TI的54系列的手冊,我用了一個(gè)暑假認(rèn)真的看,做了至少一本的筆記,感覺還是不夠,但想想那本書其實(shí)還真的很有用的,我到顯示還時(shí)常在那時(shí)做的筆記中去查找一些東西。
要說學(xué)DSP我不得不說一本學(xué)DSP人很多都了解的一本書,程佩青的《數(shù)字信號(hào)處理》,初學(xué)DSP不看這本書也許會(huì)走些彎路吧,這本書講了很多基礎(chǔ)的數(shù)字信號(hào)處理的知識(shí),我現(xiàn)在不管在哪都會(huì)帶上這本書,為什么呢?這本書講了很多基礎(chǔ)知識(shí),算法從何而來,就是從那些傳遞函數(shù),從那些模擬向數(shù)字轉(zhuǎn)換的推導(dǎo)再經(jīng)過MATLAB做以處理,就會(huì)得到DSP的一些算法的數(shù)據(jù),說的是很簡單,我們大家都有這樣的經(jīng)歷吧,別人給你好的路讓你去走你會(huì)覺得沒什么難的,等叫你自己去走一條別人沒有告訴你的路的時(shí)候我們就知道自己的問題很多了,所以這條路不是說的那么簡單。但我想數(shù)學(xué)好的人在這方面可能會(huì)少走一些彎路,我用了一個(gè)暑假看TI手冊和數(shù)字信號(hào)處理,反正到現(xiàn)在還是不能說自己都懂,我只認(rèn)為自己都了解一點(diǎn)皮毛而已。到了大四開學(xué),我就去實(shí)驗(yàn)室做DSP的實(shí)驗(yàn),沒什么難的都是按實(shí)驗(yàn)書的步驟往下走就會(huì)完成預(yù)訂的目標(biāo),大概用了一個(gè)星期做完了這些。在接下來的日子感覺有點(diǎn)漂浮了,呵呵。導(dǎo)師就給了我一個(gè)新的任務(wù),把我做的DSP的實(shí)驗(yàn)的程序不管是C語言的還是匯編的都“翻譯”出來,這個(gè)可夠我嗆的了,學(xué)C的時(shí)候還學(xué)了點(diǎn)大概就跟看英語一樣還能馬馬虎虎看下去,可匯編啊,我的天哪,學(xué)單片機(jī)和微機(jī)原理的匯編時(shí)候就沒怎么學(xué),談匯編色變啊。沒辦法,自己想學(xué)就只有拿一本寫有指令集的書一個(gè)對著一個(gè)慢慢的看,終于用了快一個(gè)月的時(shí)間完了。松了一口氣,可后面的路還廠呢,豈是這些就足矣的,在后面學(xué)習(xí)CMD文件。。。。。就是關(guān)于CCS的一些知識(shí),到此還是只會(huì)在試驗(yàn)箱上跑現(xiàn)成的程序,自己下的程序都還不會(huì)在試驗(yàn)箱上運(yùn)行,怎么辦呢?不跑怎么知道自己下的程序是不是可以通過運(yùn)行呢?就找導(dǎo)師教我,先將CMD文件的后綴改為CMD這樣就變成了CMD文件了,在CCS中先建一個(gè)工程文件,隨便你想放哪都可以,但最好要有一個(gè)文件夾,建完了就在ADD(在工程文件的下拉目錄下點(diǎn)右鍵)加C文件,要是有匯編的話還要加匯編的文件,加了C語言就要加編譯器,將C轉(zhuǎn)換為匯編語言,當(dāng)然這是機(jī)子自身的運(yùn)行步驟不是我們考慮的我們只要把轉(zhuǎn)換器加載進(jìn)去就OK了,這個(gè)也是在右鍵ADD加載了,最后還有一點(diǎn)重要的別忘了,CMD文件還沒加呢,這些做完了可以用CCS上的檢驗(yàn)功能檢驗(yàn),無錯(cuò)的話可以生成OUT文件,這個(gè)就是運(yùn)行的執(zhí)行文件,大家有一點(diǎn)需要注意的,有時(shí)一些參數(shù)需要修改的在DEBUG中,依自己需要修改,這個(gè)現(xiàn)在還不是太明白,以后弄懂了在后續(xù)文章中寫出來。運(yùn)行OUT文件,就要在LODE中加入這個(gè)OUT文件再運(yùn)行就可以了,可以在視窗中改些參數(shù)看到自己想要得到的圖形等。
以上些的比較雜,我現(xiàn)在在看MATLAB在數(shù)字信號(hào)處理中的應(yīng)用,我想DSP就是做算法最難,而MATLAB是做算法實(shí)現(xiàn)的工具,所以就抽些時(shí)間集中把MATLAB看下,DSP也不是傳說中的那么難我們只要有信心多看多做一定可以做的很好的。好了,今天就先寫這么多吧,以后在寫。這個(gè)博客中的一些文章是我轉(zhuǎn)載的,希望對大家有用,我以后也會(huì)盡量加些自己寫的文章。歡迎大家常來看看,支持小弟。
要學(xué)好DSP我們有不能忽視的三門基礎(chǔ)先修課程:信號(hào)與系統(tǒng),數(shù)字信號(hào)處理和微機(jī)(單片機(jī))。這三門課是學(xué)DSP的基礎(chǔ),要想做好DSP我們要做到硬件和軟件的結(jié)合,還要會(huì)設(shè)計(jì)系統(tǒng),那么問題來了,硬件和軟件的結(jié)合必然要求對基礎(chǔ)知識(shí)有深刻的理解和認(rèn)識(shí)(這里系統(tǒng)的設(shè)計(jì)我們在后面談)。
那先說下信號(hào)與系統(tǒng),信號(hào)與系統(tǒng)的核心思想是什么呢?就是把復(fù)雜的信號(hào)給分解了,分解成簡單的信號(hào)分解成我們可以容易下手的處理的簡單信號(hào),再通過一個(gè)系統(tǒng)或者若干得到響應(yīng),最后將這些若干響應(yīng)用同樣組合的方式組合起來送到輸出端,結(jié)果就會(huì)得到我們的系統(tǒng)響應(yīng)。細(xì)點(diǎn)說,時(shí)域分析,時(shí)域分析是把信號(hào)分解后分別乘上單位沖擊響應(yīng)(即把信號(hào)分別通過單位系統(tǒng)),再把得到的響應(yīng)累加求和就會(huì)得到時(shí)域的響應(yīng)(單位沖擊響應(yīng)移位加權(quán)和),為什么說是累加求和呢?線性積分就是求和很多因子的求和這里也是同樣的道理。再說頻域分析,頻域分析是把信號(hào)分解成若干不同頻率的正弦信號(hào)再通過系統(tǒng)然后累加求和。思路跟上面一樣,總的來說信號(hào)與系統(tǒng)的思想就是把復(fù)雜的信號(hào)分解成簡單的信號(hào),分別通過系統(tǒng),但后累加求和(積分)得到我們需要的響應(yīng)。說到信號(hào)與系統(tǒng)不能不提到傅立葉變換,傅立葉變換是信號(hào)與系統(tǒng)的工具,通過它才可以得到系統(tǒng)變換,下面幾個(gè)需要記下,正余弦函數(shù)的指數(shù)表示,歐拉公式(重點(diǎn)),周期函數(shù)的傅立葉級(jí)數(shù)的展開,傅立葉變換對,一些常用函數(shù)的傅立葉變換需要記住(正余弦,指數(shù),常數(shù),沖擊響應(yīng),,,,),單位沖擊序列的傅立葉變換尤其需要記住這是DSP后面處理函數(shù)的核心內(nèi)容,F(xiàn)[δ(t-nT)]=w。Σn=-∞∞δ(w-w。)=w。δw。(w).
這里說下數(shù)字信號(hào)處理,數(shù)字信號(hào)處理主要處理的是離散信號(hào),離散時(shí)間信號(hào)盡管在時(shí)間上是離散的,但在幅度上仍然是連續(xù)變化的,因此仍然是模擬信號(hào),只有經(jīng)過量化器,也就是將各離散時(shí)間點(diǎn)上的信號(hào)幅度歸并到有限的若干個(gè)電平上,并用數(shù)字來表示時(shí),才稱其為數(shù)字信號(hào)(digital signal).實(shí)際上,任何序列都可以表示成δ[n]的移位加權(quán)和,這是一個(gè)非常重要的概念,因?yàn)槲覀冊谟懻撔盘?hào)通過系統(tǒng)的時(shí)候,只需要討論單位數(shù)字沖激通過系統(tǒng)的響應(yīng),即單位沖激響應(yīng),然后將系統(tǒng)對各移位的沖擊的響應(yīng)疊加,就得到系統(tǒng)的輸出。這個(gè)思想和信號(hào)與系統(tǒng)的處理思想是一樣的,整個(gè)一部信號(hào)與系統(tǒng)的理論就是建立在對信號(hào)的不同形式分解,然后再綜合的基礎(chǔ)上的。數(shù)字信號(hào)處理中有兩個(gè)比較重要也比較基礎(chǔ)的沖激響應(yīng)系統(tǒng):有限沖激響應(yīng)系統(tǒng)(FIR,Finite Impulse Response);無限沖激響應(yīng)系統(tǒng)(IIR, Infinite Impulse Response);也有兩個(gè)比較基礎(chǔ)的變換:Z變換和傅立葉變換。
下面是時(shí)域和頻域的對應(yīng):
時(shí)域的連續(xù)非周期信號(hào)←→頻域連續(xù)非周期譜(FT)
時(shí)域的周期信號(hào)
←→頻域離散譜(FST)
時(shí)域的離散信號(hào)
←→頻域周期譜(DTFT)
時(shí)域的離散周期信號(hào)
←→頻域離散周期譜(DFT)
在DFT中,變換的兩邊都是離散的,從而才是真正能用計(jì)算機(jī)來做數(shù)字信號(hào)處理的變換對。兩邊都是周期的,從而處理可以只在一個(gè)周期內(nèi)進(jìn)行,這有兩個(gè)重要的意義,一是所做的處理是有限的(這對計(jì)算機(jī)來說是必須的);二是只在一個(gè)周期內(nèi)就可以保留全部的信息(這對準(zhǔn)確的處理來說是必須的);
在現(xiàn)實(shí)工程中我們遇到的信號(hào)往往是連續(xù)的非周期的,為了進(jìn)行DFT,就必須將其離散(抽樣)周期化(周期延拓)。
在信號(hào)的采樣的時(shí)候要遵循奈奎斯特準(zhǔn)則,奈奎斯特抽樣頻率fS=1/T=2fm(即不失真的最低采樣頻率);奈奎斯特抽樣間隔T=1/2fm(即不失真的最大采樣間隔),由于理想低通濾波器是不可實(shí)現(xiàn)的,所以實(shí)際上的低通濾波器都有上升時(shí)間和下降時(shí)間,因此工程上往往采用fS›2.5~3 fm.采樣后的信號(hào),時(shí)間上是離散的,但幅度仍然是連續(xù)的,還不是真正的數(shù)字信號(hào),必須對其幅度做量化,即將離散時(shí)間點(diǎn)上的幅度歸入有限數(shù)目的等級(jí)。
關(guān)于微機(jī)原理的知識(shí)自己學(xué)的不是太好,也不知道怎么說起就不說了。我想還是多看看書會(huì)有幫助的。
前面(一)說了截至到現(xiàn)在我的大概學(xué)習(xí)過程,(二)說了信號(hào)與系統(tǒng),數(shù)字信號(hào)處理的知識(shí)。這個(gè)篇章我想說說DSP的硬件結(jié)構(gòu)。DSP的硬件和軟件以及系統(tǒng)設(shè)計(jì)稱為DSP的三大部分,我覺得這部分內(nèi)容還是比較有用的。
說DSP的硬件結(jié)構(gòu)不得不說起它的CPU結(jié)構(gòu),世界上的CPU結(jié)構(gòu)從上個(gè)世紀(jì)四十年代起CPU發(fā)展的時(shí)候就分為兩大種類,一種是馮•••諾依曼結(jié)構(gòu)(Von Neuman);另一種是哈佛結(jié)構(gòu)(Harvard);馮•••諾依曼結(jié)構(gòu)主要用于通用的處理器中,而哈佛結(jié)構(gòu)主要用于DSP處理器中。兩個(gè)結(jié)構(gòu)的構(gòu)成見下圖(1):
從上圖可以顯而易見的看出哈佛結(jié)構(gòu)可以做并行處理,可以減少處理時(shí)間。
有兩中指標(biāo)可以表示處理器的處理速度:MIPS與MFLOPS。
MIPS--(million instruction per second),每秒百萬次運(yùn)算
MFLOPS――(million floating operation per second),浮點(diǎn)運(yùn)算多少次每秒
現(xiàn)在市面上32的處理器可以達(dá)到90億次浮點(diǎn)運(yùn)算/秒(9000MFLOPS)
DSP的處理器可以進(jìn)行流水作業(yè)(pipeline),一個(gè)數(shù)據(jù)從取指到存儲(chǔ)需要經(jīng)過取指,譯碼,尋址,取數(shù),運(yùn)算,存儲(chǔ)這六個(gè)步驟,流水作業(yè)可以讓他們在單周內(nèi)完成,怎么講呢?舉個(gè)例子就是說DSP處理器進(jìn)行的是并行的處理,可以在一個(gè)周期內(nèi)同時(shí)進(jìn)行第一條數(shù)據(jù)的尋址,第二條數(shù)據(jù)的譯碼,第三條數(shù)據(jù)的取指,依次類推理解這個(gè)概念就不難了。這里需要理解的是單周期,不說說一個(gè)數(shù)據(jù)可以在一個(gè)周期內(nèi)進(jìn)行完所有的步驟而是一個(gè)相對概念,可以一個(gè)周期內(nèi)同時(shí)處理不同數(shù)據(jù)的不同步驟。
DSP處理器中用兩個(gè)通用處理器沒有的東西,是什么呢?1,獨(dú)立的硬件乘法器:在卷積,數(shù)字濾波,F(xiàn)FT,相關(guān),矩陣運(yùn)算等算法中都有ΣA(k)B(n-k)一類的運(yùn)算大量的重復(fù)乘法和累加。通用計(jì)算機(jī)的乘法是用軟件實(shí)現(xiàn)的,當(dāng)然需要若干個(gè)周期;DSP用硬件乘法器,用MAC指令(取數(shù),乘法,累加)在單周期內(nèi)完成。2,獨(dú)立的DMA總線與控制器:當(dāng)然通用的計(jì)算機(jī)中也有DMA也不占用CPU資源但它是公用的不是獨(dú)立的。取數(shù)是從總線上取的是從存儲(chǔ)器中取的,雖然現(xiàn)在的時(shí)鐘頻率很高,但你要從總線上取數(shù)就要占用總線的時(shí)間,CPU的數(shù)據(jù)也是從總線上收發(fā)的,總線的時(shí)間占用了CPU只能暫時(shí)的掛起,等于變相的占用了CPU的資源。運(yùn)算速度的快滿取決于數(shù)據(jù)的吞吐量,有了硬件乘法器和獨(dú)立的DMA總線與控制器,可想了DSP的處理速度會(huì)加快很多。有一組或多組獨(dú)立的DMA總線與CPU的程序,數(shù)據(jù)總線并行處理,在不影響CPU工作的條件下,DMA目前已達(dá)到800Mbyte/s。
在CPU方面DSP的CPU與通用的CPU也有著不同的方面,通用的CPU由ALU(算術(shù)邏輯單元)與CU(控制邏輯單元)組成,通過軟件實(shí)現(xiàn);DSP的CPU設(shè)有獨(dú)立的硬件乘法器,可在單周期內(nèi)完成乘法運(yùn)算。
硬件電路圖中的MUX是多路器,可以理解為一個(gè)選擇開關(guān),選取多路中的一個(gè)數(shù)據(jù)輸出。
我們在說DSP的硬件結(jié)構(gòu),關(guān)于浮點(diǎn)與定點(diǎn)是不得不說的。DSP分為定點(diǎn)和浮點(diǎn)兩種,那種更好無法說,因?yàn)榭茨阍趺从茫迷谑裁捶矫妫m合的永遠(yuǎn)是最好的。浮點(diǎn)格式是用指數(shù)形式表示的,其動(dòng)態(tài)范圍要比定點(diǎn)的要大的多,定點(diǎn)的DSP經(jīng)常需要考慮溢出的問題,浮點(diǎn)DSP中基本上可以不考慮這個(gè)問題。為了保證底數(shù)的精度,假如浮點(diǎn)DSP做成32BIT的那么總線,寄存器,存儲(chǔ)器等的寬度也相應(yīng)的是32BIT的。在處理數(shù)據(jù)方面浮點(diǎn)的DSP速度更快一些,尤其在做浮點(diǎn)運(yùn)算的時(shí)候,為什么呢?因?yàn)樗褪菫楦↑c(diǎn)運(yùn)算所做的,當(dāng)然了浮點(diǎn)的DSP價(jià)格也高一些,開發(fā)難度也大一些。
DSP將來發(fā)展的趨勢,更高的運(yùn)行速度和信號(hào)處理速度,多DSP協(xié)同工作,更方便的開發(fā)環(huán)境,更多的專用DSP,價(jià)格更低,性能更高,應(yīng)用更廣泛。
|
評(píng)分
-
查看全部評(píng)分
|