本發(fā)明涉及數(shù)字信息傳輸領(lǐng)域,特別是一種基于脈寬等長(zhǎng)機(jī)制的fsk解調(diào)方法。
背景技術(shù):
fsk(frequency-shiftkeying,頻移鍵控)是利用載波頻率變化來傳遞數(shù)字信息的一種數(shù)字調(diào)制技術(shù)。具有實(shí)現(xiàn)容易,抗噪聲與抗衰減的性能好等特點(diǎn)。在電力載波通訊中到了廣泛的應(yīng)用。如民用智能電表抄表系統(tǒng),電網(wǎng)中遠(yuǎn)動(dòng)信息收發(fā),礦井系統(tǒng)中的遙測(cè)遙控傳輸?shù)取?/p>
fsk最常用的方法是將二進(jìn)制數(shù)1和0,分別調(diào)制為f1與f2兩個(gè)頻率不同的雙頻fsk系統(tǒng)。被調(diào)制的頻率相對(duì)電網(wǎng)頻率高出許多。fsk系統(tǒng)中,“調(diào)制”相對(duì)簡(jiǎn)單,“解調(diào)”比較復(fù)雜。
fsk信號(hào)的解調(diào)方式有模擬解調(diào)方式與數(shù)字解調(diào)方式。模擬解調(diào)方式中,有參考差分fsk解調(diào)和全差分fsk解調(diào)。參考差分fsk解調(diào)是將fsk載波信號(hào)控制偏置電流對(duì)電容充電,根據(jù)電容上充電電壓與參考電壓通過比較器判決數(shù)據(jù)是1還是0。全差分fsk解調(diào)是利用不同偏置電流對(duì)不同的電容進(jìn)行充電,根據(jù)電容上充電電壓差值的大小通過比較器判決數(shù)據(jù)是1還是0。模擬解調(diào)電路容易漂移,是其主要缺點(diǎn)。數(shù)字解調(diào)方式通常有過零點(diǎn)檢測(cè)、正交相乘等,過零點(diǎn)檢測(cè)解調(diào)方式適用于非常低速率的應(yīng)用,通訊速率較低。正交相乘解調(diào)方式較為復(fù)雜的乘法器以與高階數(shù)字濾波器,成本較高,電路也較復(fù)雜。另外fsk解調(diào)電路還可以采用鎖相環(huán)pll的方式實(shí)現(xiàn),包括模擬pll和數(shù)字pll。這類解調(diào)電路同樣有諸多缺點(diǎn),功耗較大,電路復(fù)雜,成本較高。
隨著智能電網(wǎng)概念的普及,“智能”電器越來越多。智能電器的首要特點(diǎn)是可通訊。因fsk通訊方式無需增設(shè)額外的通訊線路,逐成為智能電器可通訊之首選。且智能電網(wǎng)、智能電器相互之間的通訊速率往往較低。
現(xiàn)有的fsk調(diào)制與解調(diào)方式有多種方法,其中解調(diào)方式有相干解調(diào)方式和非相干解調(diào)等方式,但多不限定對(duì)“0”與“1”的調(diào)制寬度。這給以高速單片機(jī)或dsp為主要控制器件的智能電器的fsk通訊,帶了極大的不便,或增加了電路的復(fù)雜性,或降低了解碼的成功率。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的問題,本發(fā)明的目的在于提供一種成本低、大幅度簡(jiǎn)化了fsk的“硬件調(diào)制發(fā)送耦合”電路、避免了數(shù)字解調(diào)電路的復(fù)雜性,克服了模擬解調(diào)電路時(shí)漂的影響、同時(shí)提高了解調(diào)的快速性、具有極高的抗干擾能力的基于脈寬等長(zhǎng)機(jī)制的fsk解調(diào)方法。
為了達(dá)到上述目的,本發(fā)明采用以下技術(shù)方案。
一種基于脈寬等長(zhǎng)機(jī)制的fsk解調(diào)方法,步驟包括:
1)設(shè)置碼元個(gè)體脈沖最大寬度限定值,設(shè)置一楨,即一個(gè)字節(jié)的最小寬度時(shí)限、最大寬度時(shí)限,之后執(zhí)行步驟2);
2)設(shè)置下降沿捕獲中斷開啟,設(shè)置并清空二個(gè)數(shù)據(jù)緩沖區(qū),設(shè)置指向第一數(shù)據(jù)緩沖區(qū)的指針為數(shù)據(jù)緩沖區(qū)首地址,清零累加時(shí)間數(shù)據(jù),之后執(zhí)行步驟3);
3)下降沿捕獲中斷后,將捕獲時(shí)間數(shù)據(jù)保存至指針指向的地址,指針加一,并累加時(shí)間數(shù)據(jù),之后執(zhí)行步驟4);
4)當(dāng)本次捕獲時(shí)間數(shù)據(jù)大于個(gè)體脈沖最大寬度限定值,則執(zhí)行步驟2),否則執(zhí)行步驟5);
5)當(dāng)累加時(shí)間數(shù)據(jù)在一楨最小寬度時(shí)限與最大寬度時(shí)限之間,則建立完成接收一楨標(biāo)志so,否則等待下一次中斷,之后執(zhí)行步驟6);
6)主程序檢測(cè)so標(biāo)志,當(dāng)so=1時(shí),將第一數(shù)據(jù)緩沖區(qū)里的數(shù)據(jù),轉(zhuǎn)移到二數(shù)據(jù)緩沖區(qū),并清空第一數(shù)據(jù)緩沖區(qū),之后執(zhí)行步驟7);
7)主程序?qū)Φ诙?shù)據(jù)緩沖區(qū)以逐個(gè)t為單位進(jìn)行計(jì)算,設(shè)置解碼字節(jié)ud=00h,解碼次數(shù)=8,設(shè)置指針指向從第二數(shù)據(jù)緩沖區(qū)首地址a0,之后執(zhí)行步驟8);
8)累加指針地址里的時(shí)間數(shù)據(jù),直到等于大于t,此時(shí)的地址記號(hào)為a1,之后執(zhí)行步驟9);
9)在a0到a1地址中,設(shè)符合“0”碼元時(shí)限的個(gè)數(shù)n,符合“1”碼元時(shí)限的個(gè)數(shù)m,當(dāng)n≥m,則解碼結(jié)果為“0”;否則,解碼結(jié)果為“1”,將解碼結(jié)果賦值ud的最高位后,ud循環(huán)右移一位,指針地址+1記號(hào)為a0,累加器清零,之后執(zhí)行步驟10);
10)當(dāng)解碼次數(shù)減1不為零時(shí),返回步驟8,當(dāng)解碼次數(shù)減1為零時(shí),完成一楨解碼。
采用上述技術(shù)方案后,本發(fā)明具有以下有益效果:
1、為了大幅度降低成本,在低速fsk通訊場(chǎng)合,常采用高速單片機(jī)、dsp為核心元件進(jìn)行調(diào)制與解調(diào),可大幅度簡(jiǎn)化fsk調(diào)制發(fā)送電路與fsk信號(hào)接收電路。
2、調(diào)制方,高速單片機(jī)或dsp,采用定時(shí)中斷、查表等方式,對(duì)待調(diào)制字節(jié)采用t0脈沖n個(gè)數(shù)或t1脈沖m個(gè)數(shù)或不同的組合形式進(jìn)行調(diào)制,直接通過端口發(fā)送,從而大幅度簡(jiǎn)化了fsk的“硬件調(diào)制發(fā)送耦合”電路。
3、接收方,高速單片機(jī)或dsp,采用邊沿捕獲、外部觸發(fā)中斷等方式,直接獲取碼元寬度時(shí)間值及個(gè)數(shù)。fsk信號(hào)由程序進(jìn)行解調(diào)還原,從而避免了數(shù)字解調(diào)電路的復(fù)雜性,克服了模擬解調(diào)電路時(shí)漂的影響。
4、fsk信號(hào)解調(diào)還原,依據(jù)脈寬等長(zhǎng)機(jī)制,查找總寬度內(nèi)最接近標(biāo)稱值的碼元序列,在該序列中,只要有1個(gè)碼元與標(biāo)稱值的碼元相吻合,即可解調(diào)出二進(jìn)制位值,從而大大降低了解調(diào)的復(fù)雜性,同時(shí)提高了解調(diào)的快速性。
5、本方法具有極高的抗干擾能力。
6、作為智能電器的主控制器,高速單片機(jī)或dsp在完成主要監(jiān)控任務(wù)的同時(shí),可兼顧fsk的調(diào)制與解調(diào)任務(wù),大幅度降低總體成本。
綜上所述,本發(fā)明基于脈寬等長(zhǎng)機(jī)制的的fsk調(diào)制與解調(diào)方法,調(diào)制方法簡(jiǎn)單,解調(diào)可靠性高,抗干擾能力強(qiáng),快速性好,可廣泛使用于智能電器等多種場(chǎng)合。
附圖說明
圖1是本發(fā)明基于脈寬等長(zhǎng)機(jī)制的fsk調(diào)制方法原理圖。
圖2是本發(fā)明基于脈寬等長(zhǎng)機(jī)制的fsk調(diào)制方法的流程圖。
圖3是本發(fā)明基于脈寬等長(zhǎng)機(jī)制的fsk解調(diào)方法的流程圖。
圖4是本發(fā)明基于脈寬等長(zhǎng)機(jī)制的fsk調(diào)制方法抗干擾原理圖解之一。
圖5是本發(fā)明基于脈寬等長(zhǎng)機(jī)制的fsk調(diào)制方法抗干擾原理圖解之二。
具體實(shí)施方式
下面根據(jù)說明書附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的解釋。
如圖1所示,對(duì)“0”進(jìn)行調(diào)制,采用的碼元寬度t0=11.25us,碼元個(gè)數(shù)n=9,調(diào)制頻率f0約等于88.88khz,總的調(diào)制時(shí)間t等于101.25us;對(duì)“1”進(jìn)行調(diào)制,采用的碼元寬度t0=10.125us,碼元個(gè)數(shù)m=10,調(diào)制頻率f0約等于98.76khz,總的調(diào)制時(shí)間t等于101.25us。調(diào)制中心頻率約為93.56khz。fsk有效數(shù)據(jù)速率可達(dá)9.8kbit/s。
一種基于脈寬等長(zhǎng)機(jī)制的fsk調(diào)制方法,步驟包括:
1、定時(shí)器初始化
1)取出一個(gè)待調(diào)制發(fā)送的字節(jié),設(shè)置“字節(jié)循環(huán)次數(shù)a”為8位(次);
2)判斷待調(diào)制發(fā)送字節(jié)的最低位,當(dāng)最低位為“0”時(shí),設(shè)置定時(shí)器中斷“位循環(huán)次數(shù)b”為9次,定時(shí)中斷常數(shù)為11.25us;當(dāng)最低位為“1”時(shí),設(shè)置定時(shí)器中斷“位循環(huán)次數(shù)b”為10次,定時(shí)中斷常數(shù)為10.125us;
3)開放定時(shí)器中斷,輸出端口置高電平,啟動(dòng)定時(shí)器定時(shí)。
2、定時(shí)中斷(如圖2所示)
1)將輸出端口取反,之后執(zhí)行步驟2);
2)位循環(huán)次數(shù)b減去1后判斷是否為零,如果不為零執(zhí)行步驟3);如果為零,建立ob標(biāo)志,執(zhí)行步驟4);
3)重置定時(shí)常數(shù),退出中斷;
4)字節(jié)循環(huán)次數(shù)a減去1后判斷是否為零,如果不為零執(zhí)行步驟5);如果為零執(zhí)行步驟6);
5)待調(diào)制的字節(jié)右移1位,之后執(zhí)行步驟7);
6)ov=1,建立調(diào)制字節(jié)發(fā)送完成標(biāo)志,供主程序查詢。
7)判斷最高位是否為1,如果不是1執(zhí)行步驟8);是1執(zhí)行步驟9);
8)設(shè)置位循環(huán)次數(shù)b=9,定時(shí)器時(shí)間常數(shù)t=11.25us,之后執(zhí)行步驟10);
9)設(shè)置位循環(huán)次數(shù)b=10,定時(shí)器時(shí)間常數(shù)t=10.125us,之后執(zhí)行步驟10);
10)退出中斷。
一種基于脈寬等長(zhǎng)機(jī)制的fsk解調(diào)方法,步驟包括:
1、數(shù)據(jù)捕獲
1)設(shè)置下降沿捕獲中斷開啟,設(shè)置向數(shù)據(jù)指針指向第一數(shù)據(jù)緩沖區(qū)的首地址,開啟一個(gè)定時(shí)器,清零累加時(shí)間數(shù)據(jù);
2)下降沿捕獲中斷后捕獲定時(shí)器的當(dāng)前時(shí)間值數(shù)據(jù),減去上次的捕獲數(shù)據(jù)得到本次捕獲的真值,保存至第一數(shù)據(jù)緩沖區(qū),數(shù)據(jù)指針加1,捕獲時(shí)間累加和加上本次捕獲的真值。
3)判斷捕獲時(shí)間累加和,是否大于等于一個(gè)字節(jié)的時(shí)間寬度(如101.25us×8位)。小于時(shí),等待下一次捕獲中斷,執(zhí)行步驟2);大于時(shí),清零捕獲時(shí)間累加和,建立完成接收一楨標(biāo)志so并進(jìn)行數(shù)據(jù)備份。
2、數(shù)據(jù)備份
將第一數(shù)據(jù)緩沖區(qū)里的數(shù)據(jù),備份至第二數(shù)據(jù)緩沖區(qū),同時(shí)清空第一數(shù)據(jù)緩沖區(qū)。
3、數(shù)據(jù)解調(diào)(如圖3所示,針對(duì)第二數(shù)據(jù)緩沖區(qū))
1)解調(diào)初始化包括:設(shè)置解碼次數(shù)q=8,默認(rèn)解碼字節(jié)ud=00,指針指向數(shù)組首地址a0,時(shí)間數(shù)據(jù)累加和t清零,設(shè)置碼元“0”的寬度值,設(shè)置碼元“1”的寬度值,設(shè)置位寬度時(shí)間值t=101.25us,之后執(zhí)行步驟2);
2)逐個(gè)累加指針地址里的時(shí)間數(shù)據(jù),直到等于大于t,此時(shí)的指針地址記號(hào)為a1,之后執(zhí)行步驟3);
3)令第二數(shù)據(jù)指針指向地址a0,在a0到a1地址段中,對(duì)碼元個(gè)體時(shí)間值進(jìn)行計(jì)算準(zhǔn)備,之后執(zhí)行步驟4);
4)計(jì)算碼元“0”的個(gè)數(shù)n,之后執(zhí)行步驟5);
5)計(jì)算碼元“1”的個(gè)數(shù)m,之后執(zhí)行步驟6);
6)判斷n是否大于等于m,大于等于是,執(zhí)行步驟8);否則執(zhí)行步驟7);
7)解碼結(jié)果為“1”,置位解碼字節(jié)最高位,之后執(zhí)行步驟8);
8)解碼字節(jié)左移1位,之后執(zhí)行步驟9);
9)將解碼次數(shù)q減去1后判斷是否為零。如果不為零,執(zhí)行步驟10);如果為零,執(zhí)行步驟11);
10)時(shí)間數(shù)據(jù)累加和t清零,數(shù)據(jù)指針地址更新a1為a0,執(zhí)行步驟2);
11)完成一楨解碼,解碼結(jié)束。
如圖4所示,盡管碼元個(gè)數(shù)不變,但碼元個(gè)體寬度時(shí)間值受到了嚴(yán)重干擾。在一個(gè)等長(zhǎng)調(diào)制脈t0(t0=t)的寬度內(nèi),只要碼元p1或p2符合標(biāo)稱值寬度,即可解調(diào)出“0”;在一個(gè)等長(zhǎng)調(diào)制脈t1(t1=t)的寬度內(nèi),只要碼元p1符合標(biāo)稱值寬度,即可解調(diào)出“1”。
如圖5所示,碼元個(gè)體寬度時(shí)間值受到嚴(yán)重干擾,碼元個(gè)數(shù)也方式了變化。但在t0(t0=t),的寬度內(nèi),碼元p1及p4符合“0”要求,故計(jì)數(shù)值n=2;碼元p5符合“1”要求,故計(jì)數(shù)值m=1。因n大于m,可解調(diào)出“0”。在t1(t1=t),的寬度內(nèi),碼元p1及p4符合“1”要求,故計(jì)數(shù)值m=2;碼元p5符合“0”要求,故計(jì)數(shù)值n=1。因n小于m,可解調(diào)出“1”。