新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > TD-SCDMA中CRC的DSP實(shí)現(xiàn)

        TD-SCDMA中CRC的DSP實(shí)現(xiàn)

        ——
        作者:徐蘭天 時(shí)間:2013-07-24 來(lái)源:電子產(chǎn)品世界 收藏

          移位算法

        本文引用地址:http://www.104case.com/article/147854.htm

          直接實(shí)現(xiàn)方法采用移位,運(yùn)算速度很低,不能滿足系統(tǒng)對(duì)實(shí)時(shí)性要求。本文對(duì)直接法進(jìn)行了改進(jìn),提出新的、易于實(shí)現(xiàn)的方法。該方法是由標(biāo)志位與移位算法組成。標(biāo)志位確定模二運(yùn)算的起始點(diǎn),運(yùn)算長(zhǎng)度為長(zhǎng)度加1。移位算法是根據(jù)運(yùn)算結(jié)果確定標(biāo)志位的位置。下面利用生成多項(xiàng)式進(jìn)行說(shuō)明,并給出實(shí)現(xiàn)代碼。

        根據(jù)高層信令,選用生成多項(xiàng)式,其中CRC的長(zhǎng)度M。設(shè)輸入信號(hào)為長(zhǎng)度A的比特流為,其中 。輸入信號(hào)對(duì)應(yīng)的多項(xiàng)式為
             (5)

          把輸入比特按順序存儲(chǔ)在中,并在其尾部多加M個(gè)零,如圖2所示。

          圖中的倒三角作為標(biāo)志位,用于指示與CRC生成多項(xiàng)式做模二運(yùn)算的起始位置,運(yùn)算的結(jié)果存儲(chǔ)在對(duì)應(yīng)輸入信號(hào)中。移位算法是標(biāo)志位根據(jù)本位寄存器的值是否為零進(jìn)行移位。如果值為零就向后移一位,否則,不移位,并繼續(xù)與CRC生成多項(xiàng)式做模二運(yùn)算。如果移位后本位寄存器依然為零,則要連續(xù)移位,但是,連續(xù)移位的總位數(shù)要小于等于M+1。當(dāng)標(biāo)志位移到倒數(shù)第M位,此時(shí),最后M位寄存器存儲(chǔ)的序列,是所求的CRC序列,具體步驟如下:

          (1)建立移位寄存器,長(zhǎng)度等于輸入數(shù)據(jù)長(zhǎng)度和CRC長(zhǎng)度之和;
          (2)給輸入數(shù)據(jù)后補(bǔ)零,補(bǔ)零長(zhǎng)度等于CRC長(zhǎng)度;
          (3)把數(shù)據(jù)寫(xiě)入移位寄存器中;
          (4)標(biāo)志位放在寄存器最高位;
          (5)以標(biāo)志位為起始位置,把寄存器值與生成多項(xiàng)式值做模二運(yùn)算,結(jié)果存儲(chǔ)在寄存器中;
          (6)如果標(biāo)志位的寄存器值為零,則標(biāo)志位向后移位一次,重新執(zhí)行本步驟,重復(fù)次數(shù)等于CRC長(zhǎng)度時(shí)跳轉(zhuǎn)到步驟5;如果標(biāo)志位的寄存器值不為零,則跳轉(zhuǎn)到步驟5。
          (7)當(dāng)標(biāo)志位移出輸入數(shù)據(jù)(不包括補(bǔ)的零),此時(shí)最后補(bǔ)零寄存器的值就是CRC值。

          編程計(jì)算CRC的關(guān)鍵是標(biāo)志位的移位判斷,根據(jù)本位寄存器的值進(jìn)行判斷是否移位,以及連續(xù)移位不能超過(guò)CRC長(zhǎng)度加1。下面給出了CRC生成的主要代碼。data_2為存儲(chǔ)輸入序列的寄存器,且尾部補(bǔ)了M個(gè)零。CrcPoly存儲(chǔ)生成多項(xiàng)式的逆序列。這里要特別說(shuō)明的是,由于高位存儲(chǔ)寄存器的低位,生成多項(xiàng)式的序列應(yīng)逆序儲(chǔ)存。例如,生成多項(xiàng)式(4)其序列為110011011,但是CrcPoly存儲(chǔ)值為其逆序,即為110110011。

          i=1;
          while(i<=A) % A為輸入比特長(zhǎng)度
          for m=1:M+1 % M+1次模二運(yùn)算
            if data_2(1,i)==CrcPoly(1,m)
                   data_2(1,i)=0;
                else data_2(1,i)=1;
                end
                 i=i+1;
            end
            i=i-1;
           %重新定位倒三角的位置
                for j=i-M:i
                   if data_2(1,j)==0
                       j=j+1;
                   else break;
                   end
               end
                i=j;
           end
           %取最后M位為CRC
           CRCout=[data_2(end-M-1:end)]



        關(guān)鍵詞: TD-SCDMA CRC DSP 寄存器 FPGA 201308

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 贺兰县| 青海省| 铜梁县| 碌曲县| 眉山市| 昆山市| 张家川| 太白县| 黄龙县| 罗定市| 昌宁县| 保定市| 和田县| 克什克腾旗| 偏关县| 阳曲县| 谷城县| 黑水县| 和静县| 柘荣县| 巴东县| 竹山县| 惠来县| 南部县| 乌鲁木齐市| 长子县| 浏阳市| 双牌县| 分宜县| 绥中县| 托克逊县| 塔河县| 疏勒县| 临安市| 瑞昌市| 罗甸县| 九台市| 浠水县| 凤翔县| 汾西县| 绵竹市|