一種高效DSO波形顯示算法的實(shí)現
首先,聲明一個(gè)wavebuff類(lèi)型的指針pdl,pdl指向封裝采樣數據的鏈表。如果示波器僅有一個(gè)通道處于工作狀態(tài),則pdl→next指向NULL;如果雙通道同時(shí)工作,則將激活狀態(tài)的通道數據封裝于鏈表的頭結點(diǎn),next指向封裝另一通道數據的結點(diǎn)。以鏈表的方式封裝數據,靈活方便,節省內存,擴展性強,如果有其他功能需求可以自由擴展鏈表長(cháng)度。波形需要由經(jīng)過(guò)處理的采樣值構造系列直線(xiàn)段逼近得到。直線(xiàn)段的參數由CLINE類(lèi)型的數據結構封裝。遮蔽分析主要是為了在兩通道同時(shí)工作的情況下,盡量減少畫(huà)點(diǎn)。清屏和繪圖分析是為了將待擦除線(xiàn)段與待繪制線(xiàn)段進(jìn)行比較,重復線(xiàn)段保留,多余線(xiàn)段擦除,進(jìn)一步達到減少畫(huà)點(diǎn)的目的。

2.1 構造繪圖線(xiàn)段
畫(huà)波形函數是由畫(huà)點(diǎn)函數按照一定的算法寫(xiě)出的,不同的算法繪制波形在速度和效果上會(huì )有所不同。波形顯示算法要求達到波形粗細均勻,連續,繪制的速度快。示波器每屏顯示600個(gè)離散數據。如果僅是將經(jīng)處理后的采樣離散數據在LCD對應的位置畫(huà)出點(diǎn)來(lái),波形不是連續的,而是離散的點(diǎn),且看起來(lái)不清晰。構造繪圖線(xiàn)段的作用就是根據相鄰離散數據的大小關(guān)系得到繪制連續波形的一系列直線(xiàn)段的上下端點(diǎn)數值,流程圖如圖3所示。其方法如下:定義一個(gè)wavebuff類(lèi)型的指針pdl。如果當前點(diǎn)的值大于與之相鄰的下一點(diǎn)的值即pdl→buff[i]>pdl→buff[i+1],那么當前點(diǎn)所對應的直線(xiàn)段的上端點(diǎn)值hi=pdl→buff[i],下端點(diǎn)值lo=pdl→buff[i+1]+1;如果pdl→buff[i]pdl→buff[i+1],則hi=pdl→buff[i+1]-1,lo=pdl→buff[i];如果pdl→buff[i]=pdl→buff[i+1],則hi=lo=buff[i]。這樣,離散的點(diǎn)就被一系列直線(xiàn)段所代替,構成連續的波形。波形的顯示區域有一定范圍,d_limit是顯示區域的下邊界值;u_limit是上邊界值;如果整個(gè)直線(xiàn)段都超出上下界的范圍,整個(gè)直線(xiàn)段將被舍去,不顯示。如果直線(xiàn)段僅是下端超出下邊界,那么直線(xiàn)段的下端值就被賦為下邊界的值;同理,相反情況下,直線(xiàn)段的上端值就被賦為上邊界的值。本文引用地址:http://dyxdggzs.com/article/161750.htm
評論