在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 手機與無線通信 > 設計應用 > QPSK數字調制解調的FPGA實現,包括源程序

            QPSK數字調制解調的FPGA實現,包括源程序

            作者: 時間:2017-06-08 來源:網絡 收藏

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

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

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

            1.QPSK調制的基本原理

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

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

            數據與相位的對照關系

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

            圖1 QPSK調制框圖

            2.QPSK調制的MATLAB仿真

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

            clear all;

            clc

            M=4;

            Ts=1;

            fc=5;

            N_sample=8;%每個正弦波采樣點數

            N_num=300;%I Q路分別100個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%加入噪聲強度加大

            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);%此為符號位擴展函數,相關函數在原代碼中可見

            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;%定點量化后的數據

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

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

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

            3.QPSK調制的FPGA實現

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

            輸出的信號經過AD變換,轉換成模擬信號,此時的信號可以輸出到后續(xù)相關芯片進行處理,本文不再做介紹。

            圖2 系統(tǒng)框圖

            調制代碼文件之間的邏輯關系入下圖所示:

            各個文件的邏輯關系

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

            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;

            本設計用到3種時鐘,他們之間的關系如下所示,時鐘在具體的硬件實現是要有2個DCM單元組成。

            數字時鐘管理單元

            各時鐘之間的關系圖

            下圖所作的仿真是假設有14bit的數據輸入到改調制模塊,最后經過調制器后的輸出結果如下所示:

            經過調制后的QPSK信號波形圖(未加濾波器前的輸出)

            改設計的其他相關模塊的設計上層邏輯模塊如下所示:

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

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

            4.QPSK解調的基本原理

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

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

            圖2 QPSK解調框圖

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

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

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

            5.QPSK解調的MATLAB仿真

            此代碼上接QPSK調制代碼,

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

            % 信道傳輸

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

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

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

            % 解調 將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));

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

            % 定點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);

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

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

            6.QPSK解調的FPGA實現

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

            系統(tǒng)框圖

            Verilog代碼各個文件的邏輯關系入下圖所示:

            各個文件的邏輯關系

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

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

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

            );

            input clk;

            input en;

            input [15:0]DIN;

            output [1:0]dout;

            output ready;

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

            輸入的數據與已經鎖定的正交載波相乘后的輸出結果如下圖所示,圖中只列出了一路信號的輸出結果。

            未濾波前的輸出數據

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

            經過定點量化后得到0,23170,32767,23170,0,42366,32769,42366;將其寫入到coe文件中作為濾波器的抽頭系數。

            FDATOOL工具輸出結果

            經過FIR低通濾波器后的輸出結果如下圖所示:

            FIR濾波器輸出的兩路信號

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

            經過濾波器后的信號頻譜

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

            兩路解調后的數據輸出

            總上所述,當頂層模塊檢測到有有效數據到達時,en信號被置為高電平,此時信號輸入到后解調模塊,在輸出端口,當ready信號有效時,在dout端口會有有效的數據輸出。輸出的數據如下所示:

            上層模塊中包含了如下個模塊

            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是乘法器單元,實現有符號數乘法;ROM_SIN模塊存放的正弦波數據,此模塊最后可用DDS模塊代替,最后是濾波器模塊。本設計中最重要的一個模塊CASTA載波提取還在編寫中,暫時還不能提交相關代碼。

            濾波器模塊是本設計的關鍵,如果提高相同信噪比條件下的誤碼率可以提高濾波器的階數,但會相應的提高器件實現的復雜度,也即提高FPGA器件的面積。

            7.結語

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



            評論


            相關推薦

            技術專區(qū)

            關閉