基于廣播數(shù)據(jù)系統(tǒng)的城市公交廣告信息傳輸
在世界上已經(jīng)開(kāi)始運(yùn)營(yíng)的RDS系統(tǒng)中,沒(méi)有一個(gè)完全實(shí)現(xiàn)了RDS系統(tǒng)能夠擁有的所有功能,而是根據(jù)當(dāng)?shù)氐木唧w情況有選擇地加以實(shí)現(xiàn)。同樣,在RDS接收機(jī)的設(shè)計(jì)過(guò)程中,基于性價(jià)比以及實(shí)用性的考慮,也是有針對(duì)性地實(shí)現(xiàn)RDS的部分功能。本文引用地址:http://2s4d.com/article/158077.htm
3 RDS數(shù)據(jù)組同步的獲取
在RDS數(shù)據(jù)塊中,采用的是標(biāo)準(zhǔn)CRC校驗(yàn)的一種變形,其生成多項(xiàng)式為:
將16位的信息字對(duì)g(x)進(jìn)行模2除法,所得到的余式再使用模2加法加上數(shù)據(jù)塊的偏移量即構(gòu)成所發(fā)送的10位校驗(yàn)字。
由于RDS數(shù)據(jù)組、數(shù)據(jù)塊之間采用連續(xù)發(fā)送,沒(méi)有任何間隔,要完成RDS數(shù)據(jù)組的同步操作,必須要在每接收到一個(gè)新的數(shù)據(jù)位后,都對(duì)新組成的26位數(shù)據(jù)流進(jìn)行CRC校驗(yàn)運(yùn)算。為了保證數(shù)據(jù)處理的連續(xù)性,運(yùn)算必須在下一個(gè)數(shù)據(jù)位到來(lái)前完成,也就是說(shuō),必須要在842μs(即一個(gè)RDS碼元周期)內(nèi)完成運(yùn)算。
由于RDS中CRC校驗(yàn)的生成多項(xiàng)式G(x)在單片機(jī)運(yùn)算中占據(jù)兩個(gè)字節(jié),根據(jù)CRC校驗(yàn)的原理,其在8位單片機(jī)中的運(yùn)算其實(shí)就是一種三字節(jié)序列遞推運(yùn)算,每次運(yùn)算所得的余式加入下一個(gè)三字節(jié)序列進(jìn)行模二除法。依次類推,每一次遞推運(yùn)算都是對(duì)一個(gè)三字節(jié)序列的計(jì)算,因此,如何簡(jiǎn)單快捷地對(duì)三字節(jié)進(jìn)行運(yùn)算是算法的關(guān)鍵。
提到簡(jiǎn)單快捷,人們自然會(huì)想到查表法,即事先將三字節(jié)序列的所有余式計(jì)算出來(lái),置于一個(gè)稱之為余式表的表格中供隨時(shí)讀取。不過(guò)這樣的表格太大,需要224個(gè)16位單元,即占用225個(gè)字節(jié)的存儲(chǔ)空間,這對(duì)單片機(jī)來(lái)說(shuō)是無(wú)法接受的,因此,要設(shè)法盡量減少表格所占用的存儲(chǔ)空間。
設(shè)一個(gè)三字節(jié)序列Tabc=[a b c],一個(gè)三字節(jié)序列Ta00=[a O O]和一個(gè)二字節(jié)序列Tbc=[b c]??梢杂枚囗?xiàng)式的形式表示它們之間的關(guān)系為Tabc(x)=Ta00(x)+Tbc(x),因此,對(duì)Ta00來(lái)說(shuō):
其中,Qa00(x)是整數(shù),與余式無(wú)關(guān);而Ra00(x)和Tbc都是二字節(jié)序列,因而,它們的和(模2加法,即異或運(yùn)算)仍然是二字節(jié)序列,因此,它就是Tabc的余式Rabc,即:
這樣就可以把三字節(jié)序列Tabc=[a b c]的運(yùn)算分解成兩個(gè)步驟來(lái)完成:
(1)通過(guò)查余式表,讀取Ta00=[a O 0]的余式Ra00=[ha00 laO0];
(2)將Ra00與[b c]進(jìn)行異或運(yùn)算,從而得到[a b c]的余式Rabc=[habc labc]。
由于[a 0 0]只有一個(gè)字節(jié)不為零,因此,余式表只需要256個(gè)單元即512 B的存儲(chǔ)空間。
在RDS接收機(jī)的設(shè)計(jì)過(guò)程中采用的是PIC16F74單片機(jī),其ROM空間僅有16 KB,還要完成顯示控制、電子調(diào)諧控制等許多其他功能,存儲(chǔ)空間非常緊張,所以還需要對(duì)余式表進(jìn)行壓縮。
將Ta00=[a o o]分解為Ta00=[e O O]和Tf00=[f 0 O],并使字節(jié)e的上半字節(jié)內(nèi)容與a的上半字節(jié)相同但下半字節(jié)為零,同時(shí)使字節(jié)f的下半字節(jié)內(nèi)容與a的下半字節(jié)內(nèi)容相同但上半字節(jié)內(nèi)容為零,然后用Ta00和Tf00的生成余式表來(lái)代替Ta00的余式表。由于Ta00和Tf00中只有半個(gè)字節(jié)內(nèi)容不為零,所以每個(gè)余式表只需16個(gè)單元,即32個(gè)字節(jié),兩個(gè)余式表共占用64個(gè)字節(jié),可以滿足PIC16F74單片機(jī)對(duì)于存儲(chǔ)空間的要求。
實(shí)現(xiàn)CRC校驗(yàn)的快速算法只是獲取RDS數(shù)據(jù)信號(hào)同步的前提條件之一。由于RDS數(shù)據(jù)信號(hào)的同步信息是包含在每個(gè)26位數(shù)據(jù)塊的結(jié)尾處,必須采用先接收數(shù)據(jù),再進(jìn)行同步運(yùn)算的辦法。在PICl6F74單片機(jī)的通用寄存器中專門為接收數(shù)據(jù)設(shè)置了4個(gè)字節(jié)的緩沖區(qū),每接收到1位數(shù)據(jù),就按照先入先出(FIFO)的原則對(duì)數(shù)據(jù)緩沖區(qū)進(jìn)行移位操作,然后對(duì)最近接收到的26位數(shù)據(jù)進(jìn)行CRC校驗(yàn)運(yùn)算,將運(yùn)算結(jié)果與RDS數(shù)據(jù)塊偏移量A,B,C,D進(jìn)行比較,如果發(fā)現(xiàn)與其中之一相同,則認(rèn)為進(jìn)入準(zhǔn)同步狀態(tài)。由于接收數(shù)據(jù)的隨機(jī)性,在單獨(dú)一個(gè)26位數(shù)據(jù)流中運(yùn)算出數(shù)據(jù)塊偏移量的幾率是比較大的,所以必須進(jìn)行進(jìn)一步的檢測(cè)。
評(píng)論