任意波形編輯軟件中手動任意繪制功能的設計
(4)波形的處理也是手動繪制功能的一個亮點,其中包括剪切、插入、翻轉、粘貼等,用到的原理是一樣的,即是對波形處理前和處理后的數據都進行存儲,然后進行一對一的更新。在設計過程中,使用鏈表完成。這樣既保證了數據的實時更新,也可以不浪費內存來管理數據。圖2即為手動繪制的一個任意波形。本文引用地址:http://www.j9360.com/article/195839.htm
3.2 任意波形編輯軟件中拖動放大功能的實現
在波形顯示區域內移動鼠標,當放到了合適的位置,然后按下鼠標左鍵,開始拖動鼠標。拖動過程中按住鼠標左鍵不放,這時會出現一個矩形,矩形的左上角即是鼠標開始按下的位置,矩形的右下角是當前鼠標的位置。
因此,矩形的大小隨鼠標的移動而更新。直到拖動到需要的位置,放開左鍵,至此放大操作完成。可以看到被矩形包圍的的波形部分被全屏顯示。
此功能的設計中,需用到函數SetAxisRange()改變顯示區的橫縱向范圍,還用到“手動繪制波形”設計中使用的時鐘控件。于是在整個軟件的設計中用到兩個時鐘控件:
第一個時鐘在手動繪制波形時用來采集離散的波形點.另外還負責實時顯示鼠標坐標的功能;
第二個時鐘就是現在為了繪制不斷更新的矩形而設的。需要注意的是:兩個時鐘控件不能同時處于激活狀態,即時鐘1初始為非激活狀態(unenable),當選中了“鼠標拖動放大波形”菜單項時,先停止時鐘1,再將時鐘2激活(enable)。除了控件時鐘控件的使用,在鼠標拖動過程中還需執行不斷刷新波形的操作。
因為,當生成矩形時,該矩形有填充色,會覆蓋顯示區的波形,為了使矩形看起來是只有邊框而沒有填充色的效果,需要不斷地刷新波形。因此,操作過程中會看到波形有輕微的抖動現象。其實現的原理和波形擴展的原理是一致的,將當前區域內的波形參數存儲,并將其復制一份,然后對其進行插值處理。如果需要也可以對波形進行平滑處理,平滑處理的方法是求平均值。
先選定一個要進行平滑處理的波形點,然后將它左面幾個點和右面幾個點的幅度值相加,再除以相加的總波形點數。這樣平滑處理后的波形將有一定程度的失真,因每個點的幅值是其左邊和右邊各8個點的幅值的平均值,因此更新后的幅值將有所減小。但平滑效果較好,對于比較不規則的波形,連續進行多次平滑處理之后,波形將變得較為光滑平坦。圖2即為鼠標拖動放大波形操作過程示意圖。
4 結 語
基于LabWindows,/CVI的任意波形編輯軟件中手動任意繪制軟件成本低、效率高、移植性好,無論是采用何種發送數據的方式,都比較容易進行接口操作,在虛擬儀器的圖形界面編程領域有著良好的發展前景。與此同時,手動任意繪制波形軟件不必受到具體儀器的功能限制,這給設計帶來了很大的靈活性。目前,筆者開發的任意波形發生器手動任意繪制軟件可以選用串口和USB接口發送數據,也可以實現和VXI通信。已經應用到100 MSPS任意波形發生器上。經過各種測試,性能穩定,操作簡單,使用方便。以后還可以根據不同的儀器要求,進一步增加具有其他功能的虛擬儀器,做進一步的擴展,使得系統更加完善。
評論