電源模塊為整個系統提供供電。系統還能響應用戶按鍵事件,并進行相應的處理。串口模塊為系統的擴展預留。
3.2 音頻頻譜分析儀的系統軟件設計
系統上電后首先進行系統初始化System_Init(),對看門狗、系統時鐘、定時器、I/O端口、ADC等各模塊進行初始化。接下來ADC12對連續的模擬信號進行采樣,得到離散化的數字信號,由處理器讀取該數字信號并進行相應的處理。采樣頻率過高,采樣點數過多,會占用大量寶貴的處理器內存,降低數據處理速度;采樣頻率過低,又會使采樣數據失真而無法恢復原始連續信號。因此,必須根據信號的頻率范圍來設置采樣頻率,同時要滿足采樣定理的要求。
當采樣頻率一定時,增加采樣點數可以提高頻率分辨率,但數據存儲空間和計算量也相應增大。一般可根據實際需要進行采樣點數的選取,通常設置為2的整數次冪,以便于進行后續的FFT譜分析,本系統采樣點數為N=16.ADC12采樣流程圖如圖4所示。
采樣后的FFT數據處理是系統的又一個重點和難點,一方面,為了得到正序FFT,需要對原始自然序列進行碼位倒序排列;另一方面,為了減少處理器的浮點運算時間,旋轉因子kN W 計算采用查表實現。圖5為FFT運算的倒序流程圖。
如果提前將余弦和正弦計算出來作為全局變量,計算kN W 就可以直接調用進行加減計算,減少了大量的浮點運算時間,會以犧牲一點存儲器的代價獲得快速的系統響應。表1是編制的N=16時的余弦和正弦表。
圖6表示的是FFT運算的流程圖,整個FFT程序包含在一個迭代的過程中,最后一層計算總是2-FFT蝶形運算,下面是蝶形運算和FFT計算的主程序段: