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) 其中的滤波器的选择不同会直接影响到相同信噪比下的误码率参数。 |