一種自適應(yīng)波特率的信號接收方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于通信技術(shù)領(lǐng)域,涉及串行數(shù)據(jù)通訊中信號的接收方法,特別涉及一種 自適應(yīng)波特率的信號接收方法。
【背景技術(shù)】
[0002] 串行通信廣泛應(yīng)用于工業(yè)、醫(yī)療、民生、航天等需要遠(yuǎn)程通訊的領(lǐng)域。串行總線上 各節(jié)點(diǎn)波特率正確匹配是系統(tǒng)正常通信的前提,在通常情況下,由于感抗的存在,當(dāng)傳輸距 離不同時(shí),傳輸時(shí)能使用的最高波特率也不一樣。隨著傳輸距離的增加,能夠使用的波特率 將不斷減少。并且,對于不同的從屬設(shè)備,由于其使用的時(shí)鐘頻率不一樣,傳輸?shù)牟ㄌ芈室?將不一樣。實(shí)際應(yīng)用中,波特率可以分為這兩種,一種等于a*2~n,另一種不等于a*2~n,其 中,前者為比較常用的傳輸波特率,如RS-232-C標(biāo)準(zhǔn)中:75波特、150波特、300波特、600波 特、1200波特、2400波特、4800波特、9600波特和19200波特。
[0003] 在分布式系統(tǒng)中,節(jié)點(diǎn)往往數(shù)量和種類龐大且位置分散,因此在同一總線上的各 個設(shè)備波特率也會不同,每次通訊時(shí),接收方都要預(yù)先知道該數(shù)據(jù)傳輸使用的波特率,才能 完成數(shù)據(jù)的接收。
[0004] 傳統(tǒng)的波特率自適應(yīng)接收方法大致可以分為三種:1、最小數(shù)法,該方法不斷檢測 脈寬(傳輸若干個bit的0或1的時(shí)間長度,下同)的最小數(shù),然后通過對最小數(shù)與單位脈 寬(傳輸lbit的0或者1的時(shí)間長度,下同)進(jìn)行對比得出波特率。2、差分排序法,這種 方法是前一方法的改進(jìn),該方法通過不斷的計(jì)算出每個脈寬,并且不斷重復(fù)進(jìn)行排序、相減 處理,直至得出最小數(shù),通過將該數(shù)與單位脈寬進(jìn)行對比得到波特率。3、固定數(shù)據(jù)傳輸法, 該方法在傳輸數(shù)據(jù)之前需要先傳輸一段固定的數(shù)據(jù),如發(fā)送的是0x00,則接收方收到的就 是一段低電平,通過計(jì)算這段低電平的時(shí)間長度,然后除以數(shù)據(jù)位數(shù)得出單位脈寬,從而得 出該傳輸使用的波特率。三種方法雖然不同,但均是在每次傳輸數(shù)據(jù)之前通過不同的數(shù)據(jù) 幀進(jìn)行握手,確認(rèn)發(fā)送方的波特率,然后才能正確接收數(shù)據(jù),因而使用時(shí)方便性和時(shí)效性較 差。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種自適應(yīng)波特率的信號接 收方法,本發(fā)明信號接收方法能夠在不需要預(yù)先知道發(fā)送波特率的情況下接收數(shù)據(jù),即能 夠自適應(yīng)波特率正確接收信號。
[0006] 本發(fā)明的目的通過下述技術(shù)方案實(shí)現(xiàn):一種自適應(yīng)波特率的信號接收方法,步驟 如下:
[0007] S1、根據(jù)接收方固定接收波特率在發(fā)送方各種發(fā)送波特率的情況下,發(fā)送方發(fā)送 各種比特?cái)?shù)的高電平/低電平信號時(shí),對應(yīng)接收方采集到的高電平/低電平脈沖個數(shù)建立 一個表;
[0008] S2、傳輸數(shù)據(jù)時(shí),發(fā)送方將發(fā)送的信號封裝成數(shù)據(jù)幀格式后發(fā)送;
[0009] S3、接收方以固定波特率接收信號,并檢測信號的電平跳轉(zhuǎn);根據(jù)接收到的每段高 電平/低電平的持續(xù)時(shí)間以及接收方固定接收波特率獲取對應(yīng)每段持續(xù)時(shí)間內(nèi)高電平/低 電平的脈沖個數(shù);同時(shí)接收方對已接收的數(shù)據(jù)幀長度進(jìn)行計(jì)數(shù);
[0010] S4、對步驟S3中接收方依次獲取的每段持續(xù)時(shí)間內(nèi)高電平/低電平的脈沖個數(shù)進(jìn) 行脈沖個數(shù)近似處理,得到脈沖個數(shù)近似處理后的結(jié)果Dr;然后查找步驟S1中建立的表, 通過該表依次查找到每段持續(xù)時(shí)間內(nèi)高電平/低電平脈沖個數(shù)Dr對應(yīng)的發(fā)送波特率可能 值的最小值,并比較這些最小值后選取其中的最大值,將該最大值定為發(fā)送方的暫時(shí)發(fā)送 波特率Bs;
[0011] S5、根據(jù)步驟S4得到的發(fā)送方的暫時(shí)發(fā)送波特率Bs和發(fā)送的數(shù)據(jù)幀格式,確定接 收方接收一個發(fā)送方發(fā)送的完整數(shù)據(jù)幀時(shí),接收方在自身固定接收波特率下所需要接收的 數(shù)據(jù)幀總長度L;
[0012] S6、判斷接收方接收的數(shù)據(jù)幀長度是否達(dá)到步驟S5中獲得的數(shù)據(jù)幀總長度L ;
[0013] 若是,則接收完成,將步驟S4中得到的暫時(shí)發(fā)送波特率作為發(fā)送方的發(fā)送波特 率,并且接收方根據(jù)最終接收到的數(shù)據(jù)幀中每段高電平/低電平對應(yīng)脈沖個數(shù)以及發(fā)送方 的發(fā)送波特率和接收方的固定接收波特率關(guān)系得出發(fā)送方所發(fā)送的數(shù)據(jù)幀;
[0014] 若否,則返回步驟S3。
[0015] 優(yōu)選的,所述步驟S2中,發(fā)送方將發(fā)送的信號封裝成的數(shù)據(jù)幀格式包括1比特的 起始位、5至8比特的數(shù)據(jù)位、1比特奇偶校驗(yàn)位和1至2比特停止位。
[0016] 優(yōu)選的,其特征在于,
[0017] 步驟S4中獲取的發(fā)送方的發(fā)送波特率滿足以下關(guān)系:發(fā)送方的發(fā)送波特率為 a*22波特,n = 0,1,2, ? ? ?,n max,a 為一個正數(shù);
[0018] 接收方的固定接收波特率為N倍的a*22max波特。
[0019] 更進(jìn)一步的,所述步驟S1建表過程如下:當(dāng)發(fā)送方的發(fā)送波特率為N倍的 a * 2波特時(shí),在發(fā)送方發(fā)送M比特的高電平/低電平時(shí),接收方采集到的對應(yīng)高電 平/低電平的脈沖個數(shù):/a*2H,在表中對應(yīng)M比特和a*2 n的表格處記入 -Af傘iV * a * 2,w / a * 。
[0020] 更進(jìn)一步的,在步驟SI建立的表中,當(dāng)脈沖個數(shù)二進(jìn)制數(shù)最低位的1所處位置為 右起第iogj+x位時(shí),則判斷出發(fā)送方發(fā)送波特率可能值的最小值為a*2 B_/2x4,其中X= 1,2, 3,? ? ?,nmax+l〇
[0021] 更進(jìn)一步的,所述步驟S4中脈沖個數(shù)的近似處理過程如下:
[0022] S4-1-1、首先將步驟S3接收方獲取到的每持續(xù)時(shí)間內(nèi)高電平/低電平的脈沖個數(shù) 轉(zhuǎn)換成二進(jìn)制數(shù),并且判斷該脈沖個數(shù)是否小于Q,若是,則輸出近似處理后的脈沖個數(shù)〇, 若否,則進(jìn)入S4-1-2;
[0023] S4-1-2、檢測脈沖個數(shù)二進(jìn)制數(shù)最高位1所在位置,然后檢測最高位1的右邊兩位 二進(jìn)制數(shù)是否為〇〇 ;
[0024] 若是,則檢測二進(jìn)制數(shù)最高位1(該位為第一位)開始右起第五位是否為1 ;若是, 則脈沖個數(shù)二進(jìn)制數(shù)最高位1開始右起的四位數(shù)加1,并且將最高位1右起第五位至最后一 位數(shù)置為零;若否,即二進(jìn)制數(shù)最高位1開始右起第五位為0,則將最高位1開始右起第五 位至最后一位數(shù)置為零;
[0025] 若否,則檢測二進(jìn)制數(shù)最高位1(該位為第一位)開始右起第四位是否為1 ;若是, 則脈沖個數(shù)二進(jìn)制數(shù)最高位1開始右起的三位數(shù)加1,并且將最高位1開始右起第四位至最 后一位數(shù)置為零;若否,即二進(jìn)制數(shù)最高位1開始右起第四位為〇,則將最高位1右起第四 位至最后一位置為零。
[0026] 更進(jìn)一步的,所述步驟S4-1-1中Q = N/2。
[0027] 更進(jìn)一步的,所述步驟S4-1-2中檢測脈沖個數(shù)二進(jìn)制數(shù)最高位1所在位置的具體 過程如下:
[0028] S4-1-2-1、判斷脈沖個數(shù)二進(jìn)制數(shù)左起第1位是否為1;若否,則進(jìn)入步驟 S4-1U,若是,則進(jìn)入步驟S4-1H;
[0029] S4-1-2-2、脈沖個數(shù)二進(jìn)制數(shù)左移一位,并且記錄當(dāng)前脈沖個數(shù)二進(jìn)制數(shù)左移的 次數(shù)yl,然后返回到步驟S4-1-2-1;
[0030] S4-1-2-3、將脈沖個數(shù)二進(jìn)制數(shù)最高位位數(shù)(該數(shù)等于log)+ + 5)減去yl后 的位數(shù)判定為脈沖個數(shù)二進(jìn)制數(shù)最高位的1所在位置。
[0031] 更進(jìn)一步的,所述步驟S4中根據(jù)每段持續(xù)時(shí)間內(nèi)高電平/低電平脈沖個數(shù)近似處 理結(jié)果查找對應(yīng)的發(fā)送方發(fā)送波特率過程如下:
[0032] S4-2-1、判斷每段持續(xù)時(shí)間內(nèi)高電平/低電平脈沖個數(shù)近似處理結(jié)果的右起第 log) + 1位是否為1 ;
[0033] 若是,則進(jìn)入步驟S4H,
[0034] 若否,則進(jìn)入步驟S4-2-3;
[0035] S4-2-2、將該段持續(xù)時(shí)間內(nèi)高電平/低電平脈沖個數(shù)對應(yīng)的發(fā)送方發(fā)送波特率判 定為 a*2n-/2-v ;
[0036] S4-2-3、脈沖近似處理結(jié)果的二進(jìn)制數(shù)右移1位,并且記入當(dāng)前脈沖近似處理結(jié) 果的二進(jìn)制數(shù)右移的次數(shù)y;然后再回到步驟S4-2-1。
[0037] 更進(jìn)一步的,所述步驟S5中接收方在自身固定接收波特率下所需要接收的數(shù)據(jù) 幀總長度L為:
[0038] L =Lj(B/Bs);
[0039] 其中U為其中發(fā)送方發(fā)送的每幀數(shù)據(jù)幀長度,B為接收方的固定接收波特率,Bs 為發(fā)送方的暫時(shí)發(fā)送波特率。
[0040] 本發(fā)明相對于現(xiàn)有技術(shù)具有如下的優(yōu)點(diǎn)及效果:
[0041] (1)本發(fā)明方法首先按照固定波特率接收以各種不同波特率發(fā)送的各種比特?cái)?shù)的 高電平/低電平信號時(shí),接收方采集到高電平/低電平的脈沖個數(shù)建立一張表,在接收方按 照固定波特率接收到信號時(shí),首先計(jì)算出其所接收到的每段高電平/低電平脈沖個數(shù),通 過查表得到每段高電平/低電平脈沖個數(shù)對應(yīng)發(fā)送方的發(fā)送波特率可能值中的最小值,并 比較這些最小值,保留最大值作為發(fā)送方暫時(shí)發(fā)送波特率;同時(shí)根據(jù)這個暫時(shí)發(fā)送波特率 確定接收方接收一個發(fā)送方發(fā)送的完整數(shù)據(jù)幀時(shí)接收方在自身接收波特率下所需要接收 的數(shù)據(jù)幀總長度,若未接收完,則繼續(xù)接收發(fā)送的數(shù)據(jù),并進(jìn)行求解比較保留最大波特率作 為發(fā)送方的暫時(shí)發(fā)送波特率。在接收到完整的數(shù)據(jù)幀長度后將暫時(shí)發(fā)送波特率作為發(fā)送方 的發(fā)送波特率輸出,并且根據(jù)發(fā)送方的發(fā)送波特率和接收方的固定接收波特率得出發(fā)送方 所發(fā)送的數(shù)據(jù)幀內(nèi)容。因此本發(fā)明方法可以在不需要預(yù)先知道接收時(shí)使用的波特率的情 況下接收