<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > QPSK數(shù)字調(diào)制解調(diào)的FPGA實(shí)現(xiàn),包括源程序

          QPSK數(shù)字調(diào)制解調(diào)的FPGA實(shí)現(xiàn),包括源程序

          作者: 時(shí)間:2017-06-08 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201706/352633.htm

          摘要:隨著FPGA技術(shù)的發(fā)展,數(shù)字通信技術(shù)與FPGA的結(jié)合體現(xiàn)了現(xiàn)代數(shù)字通信系統(tǒng)發(fā)展的一個(gè)趨勢。為了使高速通信系統(tǒng)更加緊湊、成本更低、減小功耗,特別是提高設(shè)備的可靠性,可采用Q P S K數(shù)字調(diào)制技術(shù)來實(shí)現(xiàn),其具有頻譜利用率高、頻譜特性好、抗干擾性能強(qiáng)、傳輸速率快等特點(diǎn)。運(yùn)用verilog編寫在調(diào)制解調(diào)代碼以及ISE自帶的IP CORE在Xilinx公司的FPGA平臺上測試,結(jié)果表明系統(tǒng)可完全實(shí)現(xiàn)調(diào)制解調(diào)功能,并具有集成度高和可軟件升級等優(yōu)點(diǎn)。

          引言:四相絕對移相鍵控()技術(shù)以其抗干擾性能強(qiáng)、誤碼性能好、頻譜利用率高等優(yōu)點(diǎn),廣泛應(yīng)用于數(shù)字通信系統(tǒng)。隨著超大規(guī)模集成電路的出現(xiàn),FPGA在數(shù)字通信系統(tǒng)中的應(yīng)用日益廣泛,目前已提出了多種基于FPGA實(shí)現(xiàn)的方法。本文基于FPGA實(shí)現(xiàn)直接數(shù)字頻率合成(DDS),通過對DDS信號(載波信號)輸出相位的控制實(shí)現(xiàn)調(diào)相,除DA轉(zhuǎn)換外,其它過程均可以FPGA實(shí)現(xiàn)。QPSK調(diào)制信號是抑制載波的信號,無法用常規(guī)的鎖相環(huán)或窄帶濾波器直接提取參考載波,但它又不同于一些連續(xù)相位調(diào)制信號,其載波相位變化只能取有限的幾個(gè)離散值,這就隱含了參考載波的相位信息。所以,可以通過非線性處理,消除信號中的調(diào)制信息,產(chǎn)生與原載波相位有一定關(guān)系的分量,然后再提純該信號,恢復(fù)已被抑制的載波信號,進(jìn)而完成信號的相干解調(diào)。本文所設(shè)計(jì)的QPSK調(diào)制解調(diào)器由于具有較好的頻帶利用率,具有體積小、功耗低、集成度高、軟件可移植性強(qiáng)、擾干擾能力強(qiáng)的特點(diǎn),符合未來通信技術(shù)設(shè)計(jì)的方向。

          1.QPSK調(diào)制的基本原理

          四相絕對移相鍵控QPSK是MPSK的一種特殊情況,它利用載波的四種不同相位來表征數(shù)字信息。由于每一種載波相位代表兩個(gè)比特信息,故每個(gè)四進(jìn)制碼元又被稱為雙比特碼元。我們把組成雙比特碼元的前一信息比特用a表示,后一比特信息用b表示。雙比特碼元中兩個(gè)信息比特ab通常是按格雷碼(即反射碼)排列的,當(dāng)ab為00時(shí),載波相位為0°,當(dāng)ab為01時(shí),載波相位為90°,當(dāng)ab為11時(shí),載波相位為180°,當(dāng)ab為10時(shí),載波相位為270°。

          QPSK信號的產(chǎn)生分為調(diào)相法和相位選擇法。由于調(diào)相法比較常用,且實(shí)際操作性更強(qiáng),故在本文中,選擇調(diào)相法。用調(diào)相法產(chǎn)生QPSK信號的組成方框圖如圖1所示。圖中,串/并變換器將輸入的二進(jìn)制序列依次分為兩個(gè)并行的雙極性序列。設(shè)兩個(gè)序列中的二進(jìn)制數(shù)字分別為a和b,每一對ab稱為一個(gè)雙比特碼元。雙極性的a和b脈沖通過兩個(gè)平衡調(diào)制器分別對同相載波及正交載波進(jìn)行二相調(diào)制。將ab兩路輸出疊加,得到四相移相信號,其相位編碼邏輯關(guān)系為:當(dāng)雙比特碼元ab為11時(shí),輸出相位為315°的載波;ab為01時(shí),輸出相位為225°的載波;ab為00時(shí),輸出相位為135°的載波;ab為10時(shí),輸出相位為45°的載波,相應(yīng)的對照關(guān)系如下表所示。

          數(shù)據(jù)與相位的對照關(guān)系

          傳統(tǒng)的QPSK模擬調(diào)制器結(jié)構(gòu),一般采用正交調(diào)制方法。全數(shù)字調(diào)制器的實(shí)現(xiàn)仍采用正交調(diào)制方法,只是將模擬處理單元采用數(shù)字信號處理的算法實(shí)。QPSK采用四種不同的載波相位來表示數(shù)字信息,每個(gè)載波相位代表2比特信息,其實(shí)現(xiàn)有兩種方法,相位選擇法與正交調(diào)制法,相位選擇法又分為A、B兩種方式。本文采用相位選擇法B方式來實(shí)現(xiàn)QPSK信號,如圖1所示。

          圖1 QPSK調(diào)制框圖

          2.QPSK調(diào)制的MATLAB仿真

          QPSK調(diào)制的相關(guān)的代碼網(wǎng)上有很多,本文作者自己編寫了一段代碼,可以簡單的表示調(diào)制的原理,在此僅將代碼羅列如下,相的注釋已經(jīng)很清楚,不再贅述。代碼要綜合解調(diào)部分一起研讀。

          clear all;

          clc

          M=4;

          Ts=1;

          fc=5;

          N_sample=8;%每個(gè)正弦波采樣點(diǎn)數(shù)

          N_num=300;%I Q路分別100個(gè)bit

          dt=1/fc/N_sample;

          t=0:dt:N_num*Ts-dt;

          T=dt*length(t);

          Noise=(1/500)*randn(1,length(t))*32767;%加入噪聲

          py1f=zeros(1,length(t));

          py2f=zeros(1,length(t));

          for PL=1:1:700%加入噪聲強(qiáng)度加大

          d1=sign(randn(1,N_num));

          d2=sign(randn(1,N_num));

          d=[d1;d2];

          D=reshape(d,1,[]);%D是輸入的信息序列

          gt=ones(1,fc*N_sample);

          s1=sigexpand(d1,fc*N_sample);%此為符號位擴(kuò)展函數(shù),相關(guān)函數(shù)在原代碼中可見

          s2=sigexpand(d2,fc*N_sample);

          b1=conv(s1,gt);

          b2=conv(s2,gt);

          s1=b1(1:length(s1));

          s2=b2(1:length(s2));

          st_qpsk_1=s1.*round(cos(2*pi*fc*t)*32767);

          st_qpsk_2=s2.*round(sin(2*pi*fc*t)*32767);

          st_qpsk=st_qpsk_1+st_qpsk_2;%定點(diǎn)量化后的數(shù)據(jù)

          %-----------------------------------------------------------

          % 發(fā)射信號的功率譜

          %plot((abs(fft(st_qpsk,2048))).^2);

          3.QPSK調(diào)制的FPGA實(shí)現(xiàn)

          QPSK的FPGA設(shè)計(jì)內(nèi)部邏輯關(guān)系如下圖2所示,設(shè)計(jì)最高發(fā)送信息速率為2.5Mbit/s,首先經(jīng)過一個(gè)串并變換模塊將信息速率減半至1.25Mbit/s,然后經(jīng)過相位選擇模塊分別選擇45 135 225 315度相角中的一個(gè)作為正弦波的初始相位,每個(gè)碼片持續(xù)5個(gè)正弦波周期,由于在每個(gè)碼片的開始和結(jié)束會(huì)跟其相鄰的碼片的相位存在差異,導(dǎo)致輸出的信號頻譜發(fā)生嚴(yán)重的混跌,不便于后續(xù)處理,所以在輸出端口加入FIR型帶通濾波器,讓帶外信號盡快的衰減至最小。

          輸出的信號經(jīng)過AD變換,轉(zhuǎn)換成模擬信號,此時(shí)的信號可以輸出到后續(xù)相關(guān)芯片進(jìn)行處理,本文不再做介紹。

          圖2 系統(tǒng)框圖

          調(diào)制代碼文件之間的邏輯關(guān)系入下圖所示:

          各個(gè)文件的邏輯關(guān)系

          其中QPSK_CODING.V文件是調(diào)制的最上層文件,其對外端口如下所示,

          module QPSK_CODING(clk_2_5M,clk_50M,clk_1_25M,EN,din,ready,dataout,count);

          input clk_2_5M,clk_50M,clk_1_25M,EN,din;

          output ready;

          output [15:0]dataout;

          output [5:0]count;

          本設(shè)計(jì)用到3種時(shí)鐘,他們之間的關(guān)系如下所示,時(shí)鐘在具體的硬件實(shí)現(xiàn)是要有2個(gè)DCM單元組成。

          數(shù)字時(shí)鐘管理單元

          各時(shí)鐘之間的關(guān)系圖

          下圖所作的仿真是假設(shè)有14bit的數(shù)據(jù)輸入到改調(diào)制模塊,最后經(jīng)過調(diào)制器后的輸出結(jié)果如下所示:

          經(jīng)過調(diào)制后的QPSK信號波形圖(未加濾波器前的輸出)

          改設(shè)計(jì)的其他相關(guān)模塊的設(shè)計(jì)上層邏輯模塊如下所示:

          數(shù)據(jù)經(jīng)過串并變換模塊module serial_to_parallel(clk_2_5M,EN,din,ready,dataout);

          然后再經(jīng)過產(chǎn)生正弦波模塊module Produce_Sin(EN,clk_2_5M,clk_50M,datain,ready,addr,count);

          4.QPSK解調(diào)的基本原理

          在全數(shù)字實(shí)現(xiàn)Q P S K解調(diào)的過程中,與AD接口的前端需要很高的處理速度,但是這些處理的算法又比較簡單,FPGA器件獨(dú)特的并行實(shí)時(shí)處理的特點(diǎn)剛好可以在這里得到體現(xiàn),因此,A D C以后的數(shù)字信號處理全部由FPGA來實(shí)現(xiàn)。考慮到QPSK相干檢測比差分檢測有2.3dB功率增益,選擇用相干解調(diào)算法實(shí)現(xiàn)解調(diào)。解調(diào)方框圖如下圖2:

          本文采用的解調(diào)方案是將A/D量化得到的數(shù)字信號x(n)與NCO產(chǎn)生的一對相互正交的本地載波相乘,然后分別經(jīng)過低通濾波器濾波得到基帶信號,從中提取為同步信息,并通過載波同步模塊對NCO的輸出進(jìn)行調(diào)整,最后經(jīng)過解差分與并串轉(zhuǎn)換得到調(diào)制信息。

          圖2 QPSK解調(diào)框圖

          如上圖所示,載波恢復(fù)電路從接收到的Q P S K信號中,恢復(fù)出與原傳輸載波頻率和相位相干的載波振蕩信號,同時(shí)將接收的Q P S K信號分成兩路,一路與恢復(fù)的載波直接相乘;另一路與移相9 0°的恢復(fù)載波相乘,乘積項(xiàng)分別積分,恢復(fù)的位時(shí)鐘對結(jié)果進(jìn)行抽樣,經(jīng)判決再生出原I、Q數(shù)據(jù)比特,并、串變換器將并行的I、Q數(shù)據(jù)變成串行二進(jìn)制輸出數(shù)據(jù)。

          卡斯特環(huán)法提取載波的一個(gè)方法入下圖所示:

          卡斯特環(huán)法提取載波原理圖

          5.QPSK解調(diào)的MATLAB仿真

          此代碼上接QPSK調(diào)制代碼,

          %----------------------------------------------------

          % 信道傳輸

          st_qpsk=st_qpsk+Noise*(PL-1);%加入噪聲

          st_qpsk=round(st_qpsk/max(abs(st_qpsk))*32767);%AD采樣后的數(shù)據(jù) 16比特

          %----------------------------------------------------

          % 解調(diào) 將32位寬截取到16位

          decode_qpsk_s1=round((st_qpsk.*round(cos(2*pi*fc*t)*32767))/(2^16));

          decode_qpsk_s2=round(st_qpsk.*round((sin(2*pi*fc*t))*32767)/(2^16));

          %--------------------------------------------------------

          % 定點(diǎn)FIR濾波器

          Num_fix=[106,372,745,1024,1024,745,372,106;];

          Num_fix_2=[1,8,23,55,109,189,298,431,581,732,867,969,1024,1024,969,867,732,581,431,298,189,109,55,23,8,1;];

          fir_output_s1=filter(Num_fix,1,decode_qpsk_s1);

          fir_output_s1=round(fir_output_s1/(2^10));%截取

          subplot(2,1,1); plot(t,fir_output_s1);

          fir_output_s2=filter(Num_fix_2,1,decode_qpsk_s2);

          fir_output_s2=round(fir_output_s2/(2^10));%截取

          subplot(2,1,2); plot(t,fir_output_s2);

          %-------------------------------------------------------------

          % 判決decode_s1 decode_s2

          for(k=20:40:(N_num*N_sample*fc))

          if(fir_output_s1(k)>0)

          decode_s1(round((k)/40))=1;

          else

          decode_s1(round((k)/40))=-1;

          end

          if(fir_output_s2(k)>0)

          decode_s2(round((k)/40))=1;

          else

          decode_s2(round((k)/40))=-1;

          end

          end

          %---------------------------------------------------------------

          % 分析

          c=[decode_s1;decode_s2];

          C=reshape(c,1,[]);

          compare=C>D;

          Error=find(compare);

          E(PL)=length(Error)/N_num;%E(PL)中存放

          end

          figure(2);

          plot(E);

          完整的調(diào)制解調(diào)及分析可見本文附帶MATLAB代碼文件(QPSK_fir_compare.m)

          其中的濾波器的選擇不同會(huì)直接影響到相同信噪比下的誤碼率參數(shù)。

          6.QPSK解調(diào)的FPGA實(shí)現(xiàn)

          經(jīng)過調(diào)制后的數(shù)據(jù)具有50Mbit/s的信息速率,經(jīng)過有符號數(shù)乘法模塊,數(shù)據(jù)分別與相互正交的兩正弦波相乘,相乘后的數(shù)據(jù)再經(jīng)過FIR低通濾波器模塊,濾除掉高頻信號,經(jīng)定時(shí)抽判模塊生成碼率為1.25Mbit/s的兩列數(shù)據(jù),最后經(jīng)過并串變換模塊合并為原先的2.5Mbit/s的符號速率。

          系統(tǒng)框圖

          Verilog代碼各個(gè)文件的邏輯關(guān)系入下圖所示:

          各個(gè)文件的邏輯關(guān)系

          其中TEST_QPSK.V文件是測試文件,用來測試編寫的Verilog代碼是否正確,其中ROM文件中存放的經(jīng)過MATLAB定點(diǎn)數(shù)仿真生成的QPSK調(diào)制數(shù)據(jù),共有1K字節(jié)的數(shù)據(jù)量。測試文件通過沒個(gè)時(shí)鐘周期將ROM中存放的調(diào)制數(shù)據(jù)輸出到編寫的QPSKR文件中,實(shí)現(xiàn)解調(diào)測試。

          QPSK.V文件是用到的解調(diào)文件的最上層文件,其對外端口如下:

          module QPSKR(clk, en, DIN, dout, ready

          );

          input clk;

          input en;

          input [15:0]DIN;

          output [1:0]dout;

          output ready;

          用兩路正交的相干載波去解調(diào),可以很容易地分離這兩路正交的2PSK信號。相干解調(diào)后兩路并行碼元a和b,經(jīng)過并/串變換后,成為串行數(shù)據(jù)輸出。

          輸入的數(shù)據(jù)與已經(jīng)鎖定的正交載波相乘后的輸出結(jié)果如下圖所示,圖中只列出了一路信號的輸出結(jié)果。

          未濾波前的輸出數(shù)據(jù)

          本文的一個(gè)設(shè)計(jì)重點(diǎn)在于濾波器的設(shè)計(jì),使用MATLAB中濾波器協(xié)同設(shè)計(jì)單元,如下圖所示,可以生成7階濾波器,其系數(shù)為[0.0195568849377802 0.0684534436681266 0.136904053813160 0.188242810004127 0.188242810004127 0.136904053813160 0.0684534436681266 0.0195568849377802];

          經(jīng)過定點(diǎn)量化后得到0,23170,32767,23170,0,42366,32769,42366;將其寫入到coe文件中作為濾波器的抽頭系數(shù)。

          FDATOOL工具輸出結(jié)果

          經(jīng)過FIR低通濾波器后的輸出結(jié)果如下圖所示:

          FIR濾波器輸出的兩路信號

          經(jīng)過濾波器后的頻譜如下所示,從圖中可以看出帶外信號已經(jīng)衰減到很小值。

          經(jīng)過濾波器后的信號頻譜

          經(jīng)過定時(shí)提取模塊的抽判最后兩路信號的輸出結(jié)果如下,從圖中我們可以看到dout輸出的數(shù)據(jù)速率為1.25Mbit/s。

          兩路解調(diào)后的數(shù)據(jù)輸出

          總上所述,當(dāng)頂層模塊檢測到有有效數(shù)據(jù)到達(dá)時(shí),en信號被置為高電平,此時(shí)信號輸入到后解調(diào)模塊,在輸出端口,當(dāng)ready信號有效時(shí),在dout端口會(huì)有有效的數(shù)據(jù)輸出。輸出的數(shù)據(jù)如下所示:

          上層模塊中包含了如下個(gè)模塊

          MUL_QPSKR mul1(clk, p1, data_out1, DIN, ce, ready1);

          MUL_QPSKR mul2(clk, p2, data_out2, DIN, ce, ready2);

          ROM_SIN sin0(clk,addr,en,ready0,data_out1, data_out2);

          FIR fir1(rfd1, rdy1, ~ready1, clk, dout1, p1[31:16]);

          FIR fir2(rfd2, rdy2, ~ready2, clk, dout2, p2[31:16]);

          judgebit judge0(clk, dout1[34], dout2[34], rdy1, rdy2, dout, ready);

          其中MUL_QPSKR是乘法器單元,實(shí)現(xiàn)有符號數(shù)乘法;ROM_SIN模塊存放的正弦波數(shù)據(jù),此模塊最后可用DDS模塊代替,最后是濾波器模塊。本設(shè)計(jì)中最重要的一個(gè)模塊CASTA載波提取還在編寫中,暫時(shí)還不能提交相關(guān)代碼。

          濾波器模塊是本設(shè)計(jì)的關(guān)鍵,如果提高相同信噪比條件下的誤碼率可以提高濾波器的階數(shù),但會(huì)相應(yīng)的提高器件實(shí)現(xiàn)的復(fù)雜度,也即提高FPGA器件的面積。

          7.結(jié)語

          目前,全數(shù)字調(diào)制解調(diào)器使得通信設(shè)備緊湊、成本低、功耗小,且可靠性高。高速數(shù)字通信系統(tǒng)多采用Q P S K調(diào)制方式,可獲得較高的信噪比,又有較高的頻帶效率。但專用Q P S K芯片的通用性較差,價(jià)格較貴。通用Q P S K芯片大多基于D S P芯片,運(yùn)算量較大和受硬件的限制。用FPGA是實(shí)現(xiàn)通用Q P S K的最佳途徑,所有參數(shù)均由用戶設(shè)置,提高了通信設(shè)備的靈活性和通用性。



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();