首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

QPSK数字调制解调的FPGA实现,包括源程序(3)

QPSK数字调制解调的FPGA实现,包括源程序(3)

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数据变成串行二进制输出数据。

        卡斯特环法提取载波的一个方法入下图所示:

       

        卡斯特环法提取载波原理图


        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:40N_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)

        其中的滤波器的选择不同会直接影响到相同信噪比下的误码率参数。
继承事业,薪火相传
返回列表