以MCS51為內(nèi)核構(gòu)造的單片集成系統(tǒng)
2.1 數(shù)據(jù)截取
根據(jù)抽樣速率和DTMG占空比及持續(xù)時(shí)間,可以對(duì)接收的數(shù)據(jù)進(jìn)行截?cái)唷8鶕?jù)FFT的要求,前后兩段數(shù)據(jù)之間應(yīng)該有一定長(zhǎng)度的公共部分。計(jì)算出截新的數(shù)據(jù)幀的長(zhǎng)度為128字。為了減少面積,我們比較了幾個(gè)方案。在不會(huì)出現(xiàn)溢出的情況下,最后采取了圖4所示的設(shè)計(jì)方案。 數(shù)據(jù)讀取時(shí),為了保證每次數(shù)據(jù)讀取時(shí)與前后兩段都有32字的公共部分,第一次從讀數(shù)據(jù)段1中讀出160字的數(shù)據(jù),其前32字的數(shù)據(jù)為上一幀數(shù)據(jù)的最后32字的數(shù)據(jù);下一次在讀數(shù)據(jù)段2中讀出160字的數(shù)據(jù),然后兩個(gè)數(shù)據(jù)段讀出數(shù)據(jù)前后之間都有32字的共有數(shù)據(jù)。 2.2 DTMF解碼 對(duì)于DTMF解碼中用到的FFT,我們采用經(jīng)典的Goertzel算法。其思想是利用簡(jiǎn)單的遞歸運(yùn)算代替復(fù)雜的FFT運(yùn)算,且只需要計(jì)算幾個(gè)頻率占上的值,大大簡(jiǎn)化了計(jì)算量,通過比較幾個(gè)頻率點(diǎn)上數(shù)值的大小和判斷占空時(shí)間,就可確定發(fā)送的DTMG頻率組合。為了減少設(shè)計(jì)中用到的乘法驗(yàn)證,在滿足通信標(biāo)準(zhǔn)的前提下,將寬度降到12位。Goertzel算法的計(jì)算公式如下: 結(jié)語 該系統(tǒng)是一個(gè)典型的以MCS51為核心。加、DTMG以及門控時(shí)鐘等外圍電路組成的控制系統(tǒng)。我們采用自頂向下的設(shè)計(jì)方法。系統(tǒng)中所有功能模塊均采用VHDL語言進(jìn)行描述;用FPGA實(shí)現(xiàn)的集成系統(tǒng)替換原來的系統(tǒng)通過了功能測(cè)試。不但在可靠性上得到了提高,而且滿足芯片面積的要求,達(dá)到降低成本的目的。
數(shù)據(jù)截取由一個(gè)256字的雙口RAM完成。復(fù)位時(shí),對(duì)前32字清零。A/D采樣的數(shù)據(jù)幀先放到寫數(shù)據(jù)段1中,再放到寫數(shù)據(jù)段2中,按照寫數(shù)據(jù)段1和寫數(shù)據(jù)段2交替寫入數(shù)據(jù)。在每次寫完一個(gè)數(shù)據(jù)段之后,產(chǎn)生一個(gè)數(shù)據(jù)改變脈沖。用來表明已完成1幀數(shù)據(jù),可以進(jìn)行數(shù)據(jù)讀取,從而啟動(dòng)數(shù)據(jù)讀取操作。
評(píng)論