一 、 实 验 目 的
( 1 ) 熟 悉2QPSK 调制解调原理。
(2)掌握编写2QPSK 调制解调程序的要点。
(3)掌握使用MATLAB 调制解调仿真的要点。
二 、 实 验 内 容
( 1 ) 根 据2QPSK 调制解调原理,设计源程序代码。
( 2 ) 通 过MATLAB软件仿真给定信号的调制波形。
(3)对比给定信号的理论调制波形和仿真解调波形。
三 、 实 验 原 理
QPSK即四进制移向键控(quaternary phase shift keying),它利用载波的4 种不同相 位来表示数字信息,由于每一种载波相位代表两个比特信息,因此每个四进制码元可以 用两个二进制码元的组合来表示。两个二进制码元中的前一个码元用a 表示,后一个码 元用b 表示。
图2-18-1 QPSK 调制原理
由 QPSK 信号的调制原理可知,对它的解调可以采用与2PSK 信号类似的解调方法 进行解调。解调原理图如图2-18-2 所示,同相支路和正交支路分别采用相干解调方 式解调,得到I ( t )和 Q(t),经过抽样判决和并/串交换器,将上下支路得到的并行数 据恢复成串行数据。
图2-18-2 QPSK 解调原理
四 、 程 序 设 计
(1 )利用QPSK 正交调制器,用调相法产生QPSK信号 。
( 2 ) 画 出 QPSK 信 号 的 波 形 。
( 3 ) 利 用 相 干 解 调 法 , 画 出QPSK解 调 后 的 信 号 。
五 、 设 计 流 程
( 1 ) 首 先 ,用 调 相 法 产 生QPSK 信 号 。
( 2 ) 使 用 MATLAB 画 出 QPSK 信 号 的 波 形 。
(3)根据相干解调法,画出解调后的波形,与原始信号波形进行比较。
六 、 源 程 序 代 码
clear all;clc;
N=20;%比特数
T=1;%比特周期
fc=2;%载波频率
Fs=100;%抽样频率
bitstream=randi([0,1],1,N);%随机产生的比特数0、1
bitstream=2*bitstream-1;%单极性变为双极性(0到-1;1到1)
I=[];Q=[];
%奇数进I路,偶数进Q路
for i=1:N
if mod(i,2)~=0
I=[I,bitstream(i)];
else
Q=[Q,bitstream(i)];
end
end
%采用绘图比较I、Q比特流
bit_data=[];
for i=1:N
bit_data=[bit_data,bitstream(i)*ones(1,T*Fs)];%在一个比特周期里面有T*Fs个1和采样点一模一样
end
I_data=[];Q_data=[];
for i=1:N/2
%I路和Q路是原来比特周期的两倍,2Tb=Ts(码元周期),因此采样点个数为T*Fs*2
I_data=[I_data,I(i)*ones(1,T*Fs*2)];
Q_data=[Q_data,Q(i)*ones(1,T*Fs*2)];
end
%绘图
figure();
%时间轴
t=0:1/Fs:N*T-1/Fs;
subplot(3,1,1)
plot(t,bit_data);legend('Bitstream')%比特信息
subplot(3,1,2)
plot(t,I_data);legend('I Bitstream')%I路信息
subplot(3,1,3)
plot(t,Q_data);legend('Q Bitstream')%Q路信息
%载波信号
bit_t=0:1/Fs:2*T-1/Fs;%载波周期为2倍比特周期,定义时间轴
%定义I路和Q路的载波
I_carrier=[];Q_carrier=[];
for i=1:N/2
I_carrier=[I_carrier,I(i)*cos(2*pi*fc*bit_t)];%I路载波信号
Q_carrier=[Q_carrier,Q(i)*cos(2*pi*fc*bit_t+pi/2)];%Q路载波信号
end
%传输信号
QPSK_signal=I_carrier+Q_carrier;
%绘图
figure();%产生一个新图
subplot(3,1,1)
plot(t,I_carrier);legend('I signal')%I路信号
subplot(3,1,2)
plot(t,Q_carrier);legend('Q signal')%Q路信号
subplot(3,1,3)
plot(t,QPSK_signal);legend('QPSK signal')%I路、Q路和的信号
snr=1;%信躁比
%接收信号
QPSK_receive=awgn(QPSK_signal,snr);%awgn()添加噪声
%解调
for i=1:N/2
I_output=QPSK_receive(1,(i-1)*length(bit_t)+1:i*length(bit_t)).*cos(2*pi*fc*bit_t);
if sum(I_output)>0 %积分器求和,大于0为1,否则为-1
I_recover(i)=1;
else
I_recover(i)=-1;
end
Q_output=QPSK_receive(1,(i-1)*length(bit_t)+1:i*length(bit_t)).*cos(2*pi*fc*bit_t+ pi/2);
if sum(Q_output)>0
Q_recover(i)=1;
else
Q_recover(i)=-1;
end
end
%并/串变换
bit_recover=[];
for i=1:N
if mod(i,2)~=0
bit_recover=[bit_recover,I_recover((i-1)/2+1)];%奇数取I路信息
else
bit_recover=[bit_recover,Q_recover(i/2)];%偶数取Q路信息
end
end
%适用绘图比较I、Q比特流
recover_data=[];
for i=1:N
recover_data=[recover_data,bit_recover(i)*ones(1,T*Fs)];
end
I_recover_data=[];Q_recover_data=[];
for i=1:N/2
I_recover_data=[I_recover_data,I_recover(i)*ones(1,T*Fs*2)];
Q_recover_data=[Q_recover_data,Q_recover(i)*ones(1,T*Fs*2)];
end
%绘图
figure();
t=0:1/Fs:N*T-1/Fs;
subplot(3,1,1)
plot(t,recover_data);legend('Bitstream')%恢复的比特信息
subplot(3,1,2)
plot(t,I_recover_data);legend('I Bitstream')%恢复的I路信息
subplot(3,1,3)
plot(t,Q_recover_data);legend('Q Bitstream')%恢复的Q路信息
七、实验波形
1、发送端产生的比特流…[ax,bg]…,奇数进I路、偶数进Q路对应的比特数和波形图如下所示
2、QPSK调制乘以载波信号后传输的I路和Q路、IQ路和信号(QPSK)对应波
形图如图所示
3、QPSK经过解调产生的二进制信息比特流、I路和Q路信息波形图如图所示
八、实验总结和心得
在本次实验中,我根据QPSK 调制解调仿真原理,写出了源程序代码,了解到了很多东西,其中通过Matlab软件根据相干解调法,画出解调后的波形,与原始信号波形进行仿真比较。我熟悉掌握了QPSK 调制解调原理和更深一步掌握如何使用MATLAB调制仿真。