DM642已實(shí)現(xiàn)使用5/3提升小波來進(jìn)行優(yōu)化
出處:電子應(yīng)用技術(shù) 發(fā)布于:2011-06-13 11:25:31
與傳統(tǒng)小波相比較而言,提升小波變換不僅具有多分辨率的優(yōu)點(diǎn),而且簡化了運(yùn)算,便于硬件實(shí)現(xiàn),因此在數(shù)字圖像編碼領(lǐng)域中得到了廣泛的應(yīng)用。在新的圖像壓縮標(biāo)準(zhǔn)JPEG2000中(J0int Photographic Experts Group,它是一個(gè)在國際標(biāo)準(zhǔn)組織(ISO)下從事靜態(tài)圖像壓縮標(biāo)準(zhǔn)制定的委員會),采用9/7、5/3提升小波變換作為編碼算法,其中5/3小波變換是一種可逆的整數(shù)變換,可以實(shí)現(xiàn)無損或有損的圖像壓縮。在通用的DSP芯片上實(shí)現(xiàn)該算法具有很好的可擴(kuò)展性、可升級性與易維護(hù)性。用這種方式靈活性強(qiáng),并且完滿足各種處理需求。
1 提升算法
提升算法[1]是由Sweldens等在Mallat算法的基礎(chǔ)上提出的,也稱為第二代小波變換。與Mallat算法相比,提升算法不依賴傅立葉變換,降低了計(jì)算量和復(fù)雜度,運(yùn)行效率相應(yīng)提高。由于具有整數(shù)變換及耗費(fèi)存儲單元少的特點(diǎn),提升算法很適合于在定點(diǎn)DSP上實(shí)現(xiàn)。提升算法的主要特征是把高通和低通小波濾波器分解成一列小型濾波器,進(jìn)而轉(zhuǎn)化為一列上下三角矩陣。
小波提升算法的基本思想是通過基本小波逐步構(gòu)建出一個(gè)具有更加良好性質(zhì)的新小波,其分為三個(gè)主要階段:分解(split)、預(yù)測(predict)和更新(update)。
首先按照對原信號進(jìn)行對稱延拓得到新的x(n)。
分解是將數(shù)據(jù)列分成為兩個(gè)小的子集,按照數(shù)據(jù)的奇偶序號分為為偶數(shù)序列x(2n)和奇數(shù)序列x(2n+1)二個(gè)部分,奇偶分量被認(rèn)為是惰性小波,因?yàn)檫@個(gè)過程沒有去掉數(shù)據(jù)的相關(guān)性;
在預(yù)測階段,主要是消除步分解留下的冗余,給出更緊湊的數(shù)據(jù)表示,保持偶數(shù)序列不變,利用偶數(shù)序列來預(yù)測奇數(shù)序列,得到的預(yù)測誤差為變換的高頻分量:H(n)=x(2n+1)-{[x(2n)+x(2n+2)]》1};
更新是由預(yù)測誤差更新偶數(shù)序列,得到變換的低頻分量: L(n)=x(2n)+{[H(n)+H(n-1)+2]》2},更新的目的在于保持信號的某些全局特性不變,如均值。
計(jì)算過程如圖1所示。

2 基于DM642的優(yōu)化策略
2.1 DM642的兩級CACHE結(jié)構(gòu)
DM642是一款專門面向多媒體處理領(lǐng)域應(yīng)用的處理器,是構(gòu)建多媒體通信系統(tǒng)的良好平臺,已被國內(nèi)外視頻應(yīng)用從業(yè)者廣泛接受和采用。它采用C64xDSP內(nèi)核,片內(nèi)RAM采用兩級CACHE結(jié)構(gòu)[4][5],分為L1P、L1D和L2。L1距離DSP核近,數(shù)據(jù)訪問速度快,只能作為不能尋址的CACHE被CPU訪問,由相互獨(dú)立的LIP和LID組成,LIPCache大小為16kB,直接映射,每行大小為32B;LID Cache大小16kB,2路映射,每行大小為64B,訪問周期與CPU周期一致;L2可作為SRAM映射到存儲空間使用,也可整體作為第二級Cache,或是作為二者按比例的一種組合混合使用。L2作為SRAM使用時(shí),即是DM642的片內(nèi)內(nèi)存,從整個(gè)系統(tǒng)地址空間的起始地址0x00000000開始編址,當(dāng)作為Cache使用時(shí),4路映射,每行大小為128B,容量在32-56kB 之間。
DM642有256kbit/s的片內(nèi)內(nèi)存,對于直接處理圖像數(shù)據(jù)還是很有限的。如MPEG-4算法一般至少要存儲當(dāng)前待編碼幀數(shù)據(jù)和上一幀的重建幀數(shù)據(jù),一幀YUV4∶2∶0格式CIF圖像的數(shù)據(jù)約有150kB,256kB,內(nèi)存對于CIF 圖像就不夠了。對于DM642,數(shù)據(jù)如果放在板卡上的片外內(nèi)存中, 數(shù)據(jù)的處理速度會大大降低,這是因?yàn)镈SP對于片外數(shù)據(jù)的運(yùn)算要慢得多。我們一般采取的方案是對圖像以宏塊為單位處理,只將運(yùn)算時(shí)該宏塊需要的數(shù)據(jù)導(dǎo)入片內(nèi), 其他數(shù)據(jù)留在片外,這樣的數(shù)據(jù)量就足夠放在片內(nèi)了。
2.2 改進(jìn)的算法結(jié)構(gòu)
傳統(tǒng)的小波變換都是對整幅圖像作變換,首先對每一行作變換,然后再對每一列作變換。若采用這種方式在DSP上實(shí)現(xiàn)該算法時(shí)效率是很低的。這是因?yàn)镈SP的L1D很小,只有16KB,并不能完整的緩存整幅圖像,因此原始圖像數(shù)據(jù)通常保存在速度較低的外部存儲器上。這樣CPU從L1D每讀取一行數(shù)據(jù)時(shí)將必然會產(chǎn)生缺失,而大量缺失則會嚴(yán)重阻塞CPU的運(yùn)行速度,從而延長程序的執(zhí)行時(shí)間。為了解決這一難題,減少缺失的發(fā)生,我們必須改進(jìn)傳統(tǒng)的變換方式。將原來對整幅圖像的變換改為分塊的變換,即每次從圖像中取出一小塊,先后進(jìn)行行、列變換后再按照一定的規(guī)則保存到系數(shù)緩存中,如圖2所示。

在這種方法中,SDRAM中的一個(gè)數(shù)據(jù)塊首先傳輸?shù)絃2中,然后取到L1D中進(jìn)行水平方向的提升,再對該塊進(jìn)行垂直方向的提升。這樣,由于垂直提升所需的數(shù)據(jù)都在L1D中,因此避免了此處數(shù)據(jù)緩存缺失的產(chǎn)生,從而使總的缺失數(shù)大大降低。
2.3 數(shù)據(jù)傳輸
(1)SDRAM與L2間的數(shù)據(jù)傳輸
由于EDMA[6][7]數(shù)據(jù)傳輸與CPU運(yùn)行相互獨(dú)立,因此在L2中開辟兩塊緩存:EDMA在CPU處理InBuffA的同時(shí)將下一塊數(shù)據(jù)傳輸?shù)絀nBuffB,解決了CPU讀取低速設(shè)備SDRAM引起的時(shí)延,如圖3所示。

?。?)L2與L1D間的數(shù)據(jù)傳輸
CPU首先訪問級CACHE中的程序和數(shù)據(jù),如果沒有命中則訪問第二級CACHE(如果配置L2的一部分為CACHE),若還沒有命中就要訪問外部存儲空間。在這個(gè)過程中,CPU一直處于阻塞狀態(tài),直至讀取的數(shù)據(jù)有效。所以,在對L2中的數(shù)據(jù)塊進(jìn)行水平提升時(shí),CPU讀取每一行都會產(chǎn)生缺失。針對這種情況,TMS320C64x系列DSP為L1D提供了一種高速緩存缺失處理的流水處理機(jī)制。若連續(xù)多次未命中,CPU等待時(shí)間就會重疊,總體上減少了平均缺失造成的CPU阻塞時(shí)間。
因此,在CPU對數(shù)據(jù)進(jìn)行水平提升前,利用缺失流水技術(shù),將當(dāng)前數(shù)據(jù)塊全部讀取到L1D中,隨后再對該數(shù)據(jù)塊進(jìn)行水平提升,則不會再發(fā)生缺失,并可提高運(yùn)算速度。
CPU和程序高速緩存L1P、數(shù)據(jù)高速緩存L1D直接相連,第二級緩存由程序空間和數(shù)據(jù)空間共享,可以設(shè)置成L2 Cache和片內(nèi)SRAM。EDMA控制器負(fù)責(zé)片內(nèi)L2存儲器與外設(shè)之間的數(shù)據(jù)傳輸,可以提供超過2GB/s的數(shù)據(jù)傳輸寬帶。兩級緩存結(jié)構(gòu)和EDMA基本決定了H264視頻編碼器內(nèi)圖像數(shù)據(jù)傳輸?shù)募軜?gòu)。
(3)圖像數(shù)據(jù)傳輸流程
兩級Cache結(jié)構(gòu)顯著提高了DSP的基本性能,解決了低速片外數(shù)據(jù)存取和高速CPU數(shù)據(jù)處理之間的矛盾。當(dāng)CPU中編碼程序要訪問圖像數(shù)據(jù)時(shí),查看片內(nèi)內(nèi)存L1D和L2;若片內(nèi)內(nèi)存沒有緩存該數(shù)據(jù),則通過EDMA訪問外部SDRAM,把數(shù)據(jù)從外部SDRAM拷貝到L2緩存區(qū),再從L2緩存區(qū)拷貝到L1D,由CPU取得。
如果CPU當(dāng)前訪問的圖像數(shù)據(jù)位于低速SDRAM,則EDMA把其后面地址的幾個(gè)相鄰數(shù)據(jù)也一并取到Cache中。當(dāng)CPU接著訪問相鄰數(shù)據(jù)時(shí),可直接從Cache中讀取,而不需再次訪問片外SDRAM,從而提高Cache的命中率。
大量的圖像數(shù)據(jù)傳輸和復(fù)雜的算法處理一直是實(shí)時(shí)視頻編碼系統(tǒng)的速度瓶頸問題。結(jié)合DM642處理器的Cache結(jié)構(gòu)和EDMA功能,有效設(shè)置和利用EDMA控制器,可以解決H.264視頻編碼器中存儲器和外設(shè)之間的圖像數(shù)據(jù)純屬速度問題,從而能夠大大減輕CPU的負(fù)擔(dān),并提高H.264編碼系統(tǒng)的實(shí)時(shí)性。實(shí)驗(yàn)證明,靈活使用EDMA不僅能夠提高圖像數(shù)據(jù)傳輸效率,而且可以充分發(fā)揮DM642的高速性能。
2.4 L1P與L1D性能優(yōu)化
L1D是兩路成組相關(guān),每組容量大小8KB,總?cè)萘看笮?6KB。CPU處理的數(shù)據(jù)容量大小不應(yīng)超過8KB,并且所有的原始數(shù)據(jù)都是連續(xù)存儲在同一CACHE組中的;程序的中間過程數(shù)據(jù)保留在預(yù)分配的另一個(gè)CACHE組中。
數(shù)據(jù)讀取到L1D之后,首先由8位擴(kuò)展成16位,然后對這些數(shù)據(jù)進(jìn)行水平提升,只要這些數(shù)據(jù)能保留在L1D中,隨后進(jìn)行的垂直提升就可以完全避免缺失。因此,數(shù)據(jù)塊的大小是由中間過程數(shù)據(jù)決定的,所有中間過程數(shù)據(jù)加起來不能超過8KB,選取數(shù)據(jù)塊是32×32。
當(dāng)多個(gè)函數(shù)映射到L1P的同一個(gè)CACHE行時(shí)就會引起沖突缺失,所以必須合理的放置這些函數(shù)。由上面我們得知實(shí)現(xiàn)提升的全部函數(shù)加起來總?cè)萘看笮〔怀^16KB,因此,如果能將這些函數(shù)安排在一個(gè)連續(xù)的存儲空間內(nèi),就可以完全的避免由于沖突而引起的L1P缺失。我們可以在cmd[8]文件的SECTIONS中添加一個(gè)GROUP,然后將頻繁調(diào)用的函數(shù)全部放到GROUP中(以下為代碼示例):
SECTIONS
{
GROUP > ISRAM
{
.text:_horz
.text:_vert
.text:_IMG_pix_pand
…
}…}
2.5 程序優(yōu)化
由前面的分析可知,對圖像進(jìn)行提升小波變換時(shí),需要對其四個(gè)邊界進(jìn)行延拓。延拓方式采用圖1所示的對稱延拓(對稱延拓有兩種方式,方式1是令在支撐區(qū)以外,以邊界點(diǎn)為中心對稱重復(fù),方式2是令在支撐區(qū)以外,以邊界為中心對稱重復(fù)),其中左邊與上邊需要多延拓一個(gè)點(diǎn)。而對圖像中的一個(gè)塊進(jìn)行提升變換時(shí),其延拓的應(yīng)該是與該塊相鄰的四個(gè)塊數(shù)據(jù)的邊界數(shù)據(jù),如圖4所示。

邊界延拓的主要用途是計(jì)算高頻系數(shù)。數(shù)據(jù)分析發(fā)現(xiàn),水平提升時(shí),當(dāng)前數(shù)據(jù)庫塊每一行的一個(gè)高頻系數(shù)與下一塊在該行的個(gè)高頻系數(shù)是相同的,所以只要把當(dāng)前塊的這些系數(shù)全部保存起來,在對下一塊進(jìn)行水平提升時(shí)個(gè)高頻系數(shù)就不需要再進(jìn)行計(jì)算,因此也就不需要再對其左邊界進(jìn)行延拓了。實(shí)驗(yàn)證明,垂直提升也是同樣的。在程序設(shè)計(jì)中添加兩個(gè)數(shù)組,一個(gè)數(shù)組存放當(dāng)前塊的每一行的一個(gè)高頻系數(shù),另一個(gè)數(shù)組存放當(dāng)前塊的每一列的一個(gè)高頻系數(shù)。采用這種方法就可以大大的降低程序的復(fù)雜度,從而提高程序執(zhí)行效率,進(jìn)一步的減少缺失的發(fā)生。
像素?cái)U(kuò)展函數(shù)pix_pand[9]是采用TI的IMGLIB算法庫。水平提升與垂直提升函數(shù)均由作者用線性匯編語言編寫,充分利用64x系列DSP的半字處理指令,并采用半字打包技術(shù),限度地提高程序的執(zhí)行效率。
水平提升時(shí),將每行的數(shù)據(jù)重新排序,變成如圖5所示的結(jié)構(gòu)。

使用C64x的ADD2、SHR2和SUB2等半字處理指令,將如下的兩個(gè)運(yùn)算并行執(zhí)行:
H(1)=B-[(A+C)》1]
H(2)=D-[(C+E)》1]
垂直提升時(shí)則可以安排多列的計(jì)算并行執(zhí)行,如圖6所示。

H1(1)=B1-[(A1+C1)》1]
H2(1)=B2-[(A2+C2)》1]
3 仿真結(jié)果
表1列出了CPU讀取L1D時(shí)所產(chǎn)生的缺失數(shù)。其中,水平方向的缺失不可避免。由于要對數(shù)據(jù)塊的右側(cè)和底部進(jìn)行邊界延拓,所以在水平方向的缺失數(shù)比傳統(tǒng)方法略高;而在垂直方向上,該算法完全避免了缺失的發(fā)生。

表2列出了幾種方法的性能計(jì)算。由于本文采用了多種優(yōu)化技術(shù),運(yùn)算速度因此而提高了4~10倍。
本文介紹了5/3提升小波變換及其在DM642上的實(shí)現(xiàn)。為了提高其性能而提出了多項(xiàng)優(yōu)化技術(shù),試驗(yàn)證明優(yōu)化方法比常規(guī)方法有著更高的效率。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 掌握 DSP:原理剖析與應(yīng)用實(shí)踐2025/5/8 14:03:24
- 模糊邏輯在 DSP 上實(shí)時(shí)執(zhí)行2023/7/25 17:13:30
- 多速率DSP及其在數(shù)模轉(zhuǎn)換中的應(yīng)用2023/6/12 15:28:52
- 使用 DSP 加速 CORDIC 算法2023/3/29 15:46:30
- 高速DSP系統(tǒng)的信號完整性2022/9/26 16:45:38









