基于stm32f4的高速信號(hào)頻譜分析儀
系統(tǒng)設(shè)計(jì)任務(wù)
本文引用地址:http://m.butianyuan.cn/article/201611/316133.htm一、任務(wù)
設(shè)計(jì)并制作一個(gè)高速頻譜分析儀。
1系統(tǒng)方案
本系統(tǒng)由前置匹配放大電路,AD采樣電路,高速FIFO緩存電路,以及液晶顯示電路組成。其中高速數(shù)據(jù)緩存電路,以及高精度的顯示數(shù)據(jù)是本次設(shè)計(jì)的難點(diǎn)!下面分別論證這幾個(gè)模塊的選擇。
系統(tǒng)框圖
1.1測(cè)量方法的論證與選擇
1.1.1 MCU處理器的比較與選擇
做DSP處理主要是要考慮到運(yùn)算速度。
在處理器的選擇上通??梢圆捎?位,16位或者32位的MCU,但由于在處理信號(hào)的過(guò)程中,通常會(huì)遇到快速傅里葉FFT算法,所以會(huì)遇到大量的浮點(diǎn)運(yùn)算,而且一個(gè)浮點(diǎn)數(shù)要占用四個(gè)字節(jié),故在處理過(guò)程中要占用大量的內(nèi)存,同時(shí)浮點(diǎn)運(yùn)算速度比較慢,所以采用普通的MCU在一定時(shí)間內(nèi)難以完成,所以綜合考慮運(yùn)算速度和內(nèi)存大小等因素。
本系統(tǒng)采用32位的STM32F407做為核心DSP處理器件,該芯片具有1MB的Flash閃存空間,196KB的SRAM空間,并且時(shí)鐘頻率達(dá)到了168MHz。程序運(yùn)行于168MHz主頻時(shí),通過(guò)Flash取指令(不是內(nèi)部SRAM),通過(guò)Dhrysone測(cè)試得到210DMIPS,主要采用ART加速器,可以最大限度的消除Flash存儲(chǔ)器較慢從而限制MCU性能的發(fā)揮,這可以使CPU可以在所有工作頻率下近乎零等待的方式,從Flash中運(yùn)行程序。還有就是STM32F407帶有硬件FPU處理單元,這樣可以不用軟件算法實(shí)現(xiàn)浮點(diǎn)運(yùn)算,而直接采用硬件來(lái)實(shí)現(xiàn)浮點(diǎn)運(yùn)算,這樣就減小了編譯器生成的代碼量,并且使用更方便,浮點(diǎn)數(shù)只占用四個(gè)字節(jié)就可以表示的數(shù)據(jù)范圍很大,因此不用擔(dān)心計(jì)算后的數(shù)據(jù)溢出問(wèn)題!進(jìn)一步提高運(yùn)算速度。
1.1.2 采樣方法比較與選擇
方案一 通過(guò)DDS集成芯片產(chǎn)生一個(gè)頻率穩(wěn)定度和精度相當(dāng)高的方波信號(hào)作為時(shí)鐘信號(hào)。
可選用直接數(shù)字頻率合成(DDS)芯片AD9851,AD9851為ADI公司生產(chǎn)的高性能器件,可與單片機(jī)通過(guò)簡(jiǎn)單的接口完成串行或者并行通信??赏瓿赏獠枯斎腩l率控制字與芯片內(nèi)部頻率相位控制字之間的轉(zhuǎn)換,可以非常容易的通過(guò)頻率控制字調(diào)整輸出頻率,以及精確的調(diào)整輸出信號(hào)的相位,輸出信號(hào)幅值穩(wěn)定,但是由于DDS控制也需要占用一部分MCU的IO口資源,并且DDS在價(jià)格上成本有點(diǎn)高。
方案二 直接由MCU產(chǎn)生PWM波做為采樣時(shí)鐘信號(hào)。
可直接由STM32F407產(chǎn)生的PWM波,可實(shí)現(xiàn)頻率,占空比可調(diào)的方波。最快IO口翻轉(zhuǎn)速度可以達(dá)到84MHz,可以輕松實(shí)現(xiàn)想要的采樣頻率。由于輸出的是3.3V的幅值的電壓,與外圍芯片相連,需要經(jīng)過(guò)電平轉(zhuǎn)換芯片轉(zhuǎn)成5V,才能作為外圍芯片的時(shí)鐘信號(hào)。
方案三 采樣時(shí)鐘信號(hào)選用Linear公司生產(chǎn)的LTC1799提供。
LTC1799是一款精準(zhǔn)型振蕩器,使用方便。它采用2.7V到5.5V單電源工作,并提供了軌至軌、占空比為50%的方波輸出。CMOS輸出驅(qū)動(dòng)器確保了快速上升/下降時(shí)間和軌至軌開(kāi)關(guān)操作。頻率設(shè)定通過(guò)電阻器調(diào)節(jié),電阻阻值在 的范圍內(nèi)變化,以選擇處于100KHz到33MHz之間的任何一個(gè)頻率。三態(tài)DIV輸入負(fù)責(zé)決定驅(qū)動(dòng)輸出之前對(duì)主時(shí)鐘進(jìn)行1、10或100分頻。
綜合上述方案,選擇方案三,采用一片LTC1799來(lái)產(chǎn)生15MHz的采樣時(shí)鐘信號(hào)。
1.1.3 AD采樣芯片的論證與選擇
方案一 采用MCU內(nèi)部ADC對(duì)采樣信號(hào)進(jìn)行采樣。
STM32F407內(nèi)部最大轉(zhuǎn)換速率為7.2MSPS,而且被采樣信號(hào)的幅值只能在0V到3.3V之間,能測(cè)得動(dòng)態(tài)范圍小,難以滿足要求。
方案二 采用TI公司的8位TLC5510A作為AD采樣芯片。
TLC5510A是采用高速CMOS技術(shù),8位的,最大轉(zhuǎn)換速率為20MSPS的AD轉(zhuǎn)換芯片。支持+5V電源供電,內(nèi)部包含采樣保持電路,輸出帶有高阻態(tài)模式,以及帶有內(nèi)部參考電阻。輸出數(shù)據(jù)在時(shí)鐘的下降沿有效,數(shù)據(jù)流水線結(jié)構(gòu)導(dǎo)致了2.5個(gè)時(shí)鐘的延時(shí)。而且高速AD普遍價(jià)格比較昂貴,在滿足輸入信號(hào)在2V以上動(dòng)態(tài)范圍,TI公司可供申請(qǐng)的高速AD芯片只有TLC5510A這一種。
綜合上述方案,選擇方案二,在精度要求不高場(chǎng)合,采用TLC5510A作為高速采樣芯片。
1.1.4 高速數(shù)據(jù)緩存芯片的論證與選擇
由于15MHz的高速數(shù)據(jù)流,如果中斷來(lái)標(biāo)記數(shù)據(jù)流的地址,由于MCU的中斷響應(yīng)時(shí)間有限,有12個(gè)時(shí)鐘周期的中斷延時(shí),因此就需要外部存儲(chǔ)器做高速數(shù)據(jù)緩存。
方案一 采用SRAM芯片作為外部高速數(shù)據(jù)緩存芯片。
采用IDT71024來(lái)做高速緩存,由于SRAM提供了地址線端口和數(shù)據(jù)輸入和輸出端口,如果用MCU來(lái)控制的SRAM的地址線,中斷響應(yīng)不過(guò)來(lái)是反應(yīng)不過(guò)來(lái),如果用計(jì)數(shù)器作為地址計(jì)數(shù)器,原理是可以,但是實(shí)際操作效果不佳。
方案二 采用FIFO芯片作為外部高速數(shù)據(jù)緩存芯片。
IDT7205是單向異步FIFO的典型芯片,由IDT公司生產(chǎn)的,是一種高速、低功耗的先進(jìn)先出雙端口存儲(chǔ)緩沖器。這種FIFO芯片內(nèi)部的雙端口RAM具有2套數(shù)據(jù)線,分別執(zhí)行輸入和輸出功能,各自獨(dú)立的寫(xiě)讀指針?lè)謩e在寫(xiě)、讀時(shí)鐘的控制下順序地從RAM中寫(xiě)、讀數(shù)據(jù)。
綜合上述方案,選擇方案二,它無(wú)地址線,布線簡(jiǎn)單,只能是順序存取。
系統(tǒng)理論分析與計(jì)算
2.1快速傅里葉變換(FFT)
DFT(離散傅里葉變換)是數(shù)字信號(hào)分析與處理中的一種重要變換,它可以使數(shù)字信號(hào)處理可以在頻域內(nèi)采用數(shù)值運(yùn)算的方法進(jìn)行,大大增加了數(shù)字信號(hào)處理的靈活性,但直接計(jì)算DFT的計(jì)算量與變換區(qū)間長(zhǎng)度N的平方成正比,當(dāng)N較大時(shí),計(jì)算量太大,所以在快速傅里葉變換(FFT)出現(xiàn)以前,直接用DFT算法進(jìn)行譜分析和信號(hào)的實(shí)時(shí)處理是不切實(shí)際的。
DFT的定義:設(shè) 是一個(gè)長(zhǎng)度為N的有限長(zhǎng)序列,定義 的N點(diǎn)離散傅里葉變換為
能提高DFT速度的唯一可利用的是因子 。 稱為旋轉(zhuǎn)因子,可表示為具有以下兩個(gè)重要性質(zhì)。
①對(duì)稱性
②周期性
利用 的周期性和對(duì)稱性可把DFT的計(jì)算次數(shù)大大減小。
DFT分解法基本上分為兩類:一類是將時(shí)間序列X(n) (n 為時(shí)間標(biāo)號(hào))進(jìn)行逐次分解,由此得到的FFT算法稱為按時(shí)間抽取算法,另一類是將傅里葉交換序列X(k) ( k為頻率標(biāo)號(hào))進(jìn)行分解,叫做按頻率抽取算法。對(duì)每一算法,按基本的蝶形運(yùn)算的構(gòu)成又可分為基2、基4、基8以及任意因子等的FFT算法。不同基的FFT算法所需的計(jì)算量略有差異。之所以說(shuō)略有差異是指并無(wú)數(shù)量級(jí)上的差異,甚至無(wú)成倍的差別。只是某種基的算法比另一種省幾分之幾而已。
而本方案采用的就是ST公司官方固件庫(kù)里DSP庫(kù)中已經(jīng)寫(xiě)好的關(guān)于FFT的庫(kù)函數(shù),調(diào)用的是基4復(fù)數(shù)序列1024個(gè)點(diǎn)的FFT函數(shù)庫(kù)。
假設(shè)FFT之后某點(diǎn)n用復(fù)數(shù)表示,那么這個(gè)復(fù)數(shù)的模就是,相位就是,頻率就是,(其中N表示FFT要做的點(diǎn)數(shù),n表示排序的點(diǎn),F(xiàn)s為采樣頻率)。根據(jù)以上的結(jié)果,就可以計(jì)算出n點(diǎn),
所對(duì)應(yīng)信號(hào)的表達(dá)式為:
而對(duì)于n=1的點(diǎn)信號(hào),是直流分量,幅度即為:
因此對(duì)于直流量要特殊考慮,一是幅值是其它頻率點(diǎn)的2倍,二是直流量不含有相位信息。
但是由于所做的點(diǎn)數(shù)有限,其會(huì)造成頻譜泄露是必然的。因此并非要計(jì)算所有點(diǎn)的幅值,相位以及頻率信息,而只需要計(jì)算出各個(gè)峰值點(diǎn)的幅值,相位以及頻率即可表示采樣信號(hào)各諧波分量的全部信息。
因此算法模塊要實(shí)現(xiàn)的功能:保存FFT之后峰值點(diǎn)的實(shí)部和虛部,以及峰值點(diǎn)所處的位置這幾組點(diǎn)即可。
2.2窗函數(shù)的分析與計(jì)算
在頻譜分析過(guò)程中,加窗是提高信號(hào)分析精度的一個(gè)重要措施,對(duì)加窗函數(shù)的基本要求:時(shí)域為改善截?cái)嗵幍牟贿B續(xù)狀態(tài)(由于吉布斯現(xiàn)象造成的振蕩);頻域?yàn)榇白V的主瓣窄而高,以提高分辨率,旁瓣幅值應(yīng)小,正負(fù)交替接近相等,以減小泄露和假頻。因此在選擇窗函數(shù)的時(shí)候,應(yīng)考慮被分析信號(hào)的性質(zhì)和處理要求,如果僅要求精確求出主瓣頻率,而不考慮幅值精度,則可選擇用主瓣寬度比較窄而便于分辨的矩形窗,例如測(cè)量物體的自振頻率等;如果分析窄帶信號(hào),且有較強(qiáng)的干擾噪聲,則應(yīng)選用旁瓣幅度較小的窗函數(shù),如漢寧窗(Hanning)等。
為了使加窗函數(shù)后的功率譜和幅值譜不受窗函數(shù)的影響,必須根據(jù)一定的原則推導(dǎo)出恢復(fù)系數(shù)。加窗后的恢復(fù)系數(shù)一般遵守兩個(gè)原則之一:幅值相等或能量相等的原則。
因此加窗模塊要實(shí)現(xiàn)的功能:提高采樣信號(hào)分析的幅值精度。
頻譜分析中恢復(fù)系數(shù)的使用原則
在頻譜分析中,根據(jù)不同用途采用不同恢復(fù)系數(shù),在進(jìn)行倍頻程和三分之一倍頻程分析時(shí),為了使頻帶內(nèi)總能量不變,一定要采用能量相等的恢復(fù)系數(shù);而進(jìn)行譜分析時(shí),更關(guān)心的是各峰值頻率對(duì)應(yīng)的幅值,此時(shí)只能采用幅值相等的恢復(fù)系數(shù)。
常用的各種窗函數(shù)的恢復(fù)系數(shù)
2.3 A/D采樣的分析與計(jì)算
本系統(tǒng)采用的AD轉(zhuǎn)換芯片為T(mén)LC5510A,TLC5510A是采用高速CMOS技術(shù),8位的,最大轉(zhuǎn)換速率為20MSPS的AD轉(zhuǎn)換芯片。支持+5V電源供電,內(nèi)部包含采樣保持電路,輸出帶有高阻態(tài)模式,以及帶有內(nèi)部參考電阻。輸出數(shù)據(jù)在時(shí)鐘的下降沿有效,數(shù)據(jù)流水線結(jié)構(gòu)導(dǎo)致了2.5個(gè)時(shí)鐘的延時(shí)。雖然AD轉(zhuǎn)換數(shù)據(jù)輸出有2.5個(gè)時(shí)鐘延時(shí),但是只要量化的結(jié)果是正確的和數(shù)據(jù)是順序輸出,這個(gè)數(shù)據(jù)輸出延時(shí)我們可以不用關(guān)心。外部還需要接一個(gè)4V的參考電壓,這樣才能量化到0V~4V的輸入信號(hào)。TLC5510A引腳圖和時(shí)序圖如下:
圖2.3.1 TLC5510A的引腳圖
引腳功能描述:
由于TLC
在arm_math的開(kāi)頭部分是有這些編譯控制信息:
#ifndef _ARM_MATH_H
#define _ARM_MATH_H
#define __CMSIS_GENERIC /* disable NVIC and Systick functions */
#if defined (ARM_MATH_CM4)
#include "core_cm4.h"
#elif defined (ARM_MATH_CM3)
#include "core_cm3.h"
#elif defined (ARM_MATH_CM0)
#include "core_cm0.h"
#else
#include "ARMCM4.h"
#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....."
#endif
#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */
#include "string.h"
#include "math.h"
就是說(shuō)如果不使用CMSIS的,就會(huì)調(diào)用keil自帶的標(biāo)準(zhǔn)庫(kù)函數(shù)。否則就用CMSIS的定義。這里因?yàn)槭怯玫腟TM
3.有時(shí)候常會(huì)出現(xiàn)編譯錯(cuò)誤,會(huì)出現(xiàn)硬件錯(cuò)誤,導(dǎo)致MCU鎖住了,下不了程序。
解決方法就是硬件引導(dǎo)程序恢復(fù)
STM32F407雖然芯片資料說(shuō)明端口可以忍受+5V的電壓,但這不代表其可以識(shí)別+5的高電平,因此在讀+5V的輸入端口電平,需要用電平轉(zhuǎn)換芯片將+5V轉(zhuǎn)換成+3.3V的,否則讀出的數(shù)據(jù)時(shí)一個(gè)錯(cuò)的。但是3.3V屬于高電平,因此其可以驅(qū)動(dòng)+5V工作的芯片。
參考文獻(xiàn)
[1] 萬(wàn)永革編著. 數(shù)字信號(hào)處理的MATLAB實(shí)現(xiàn)(第2版) 北京:科學(xué)出版社,2012.5.
[2] A.V.奧本海姆著. 離散時(shí)間信號(hào)處理(第2版) 西安:西安交通大學(xué)出版社,2011.9.
[3] 李群芳著. 單片微型計(jì)算機(jī)與接口技術(shù)(第3版) 北京:電子工業(yè)出版社,2008.5.
[4] DSP常用算法的C語(yǔ)言實(shí)現(xiàn)
[5] Andrew Koenig著. C陷阱與缺陷. 北京:人民郵電出版社,2002.9.
評(píng)論