利用MATLAB实现QPSK调制及解调
通信原理的MATLAB实验 QPSK的调制解调报告

通信原理实验项目名称:QPSK的调制解调一、实验任务任意输入长度为64比特的二进制信息,采用QPSK系统传输。
码元速率为1Bps,载波频率为10Hz,采样频率为40 Hz,利用Matlab画出:(1)调制后的信号波形;(2)经信道传输后的信号波形(假设加性高斯白噪声,其功率为信号功率1/10);(3)(3)任意解调方法解调后的信号波形。
二、流程图三、完整程序Fd=1; %码元速率Fc=10; %载波频率Fs=40; %采样频率N=Fs/Fd;df=10;x=[ 1 1 0 1 1 0];%任意输入64比特的二进制信息M=2; %进制数SNRpBit=10;%加性高斯白噪声,其功率为信号功率的1/10,即信噪比为10 SNR=SNRpBit/log2(M); %转换为码元速率seed=[12345 54321];numPlot=length(x);figure(1)%画出输入二进制序列subplot(211);stem([0:numPlot-1],x(1:numPlot),'bx');title('输入波形’)%调制y=dmod(x,Fc,Fd,Fs,'fsk',M,df);numModPlot=numPlot*Fs;t=[0:numModPlot-1]./Fs;subplot(212);%画出调制后的信号plot(t,y(1:length(t)),'b-');axis([min(t) max(t) -1.5 1.5]);title('调制后的信号')%在已调信号中加入高斯白噪声randn('state',seed(2));y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%相干解调figure(2)subplot(211);plot(t,y(1:length(t)),'b-');%画出经过信道的实际信号axis([min(t) max(t) -1.5 1.5]);title('加入高斯白噪声后的已调信号')%带输出波形的相干M元频移键控解调subplot(212);stem([0:numPlot-1],x(1:numPlot),'bx');hold on;stem([0:numPlot-1],z1(1:numPlot),'ro');hold off;axis([0 numPlot -0.5 1.5]);title('相干解调后的信号')四、波形。
qpsk调制 matlab代码

qpsk调制 matlab代码我们需要了解QPSK调制的基本原理。
QPSK调制是一种相位调制技术,它将数字信号分为两个部分,分别表示为I路和Q路。
I路和Q 路分别是正交的,即它们的相位差为90度。
通过调整I路和Q路信号的幅度和相位,可以实现不同的调制方式。
QPSK调制使用两个比特来表示一个符号,因此可以表示四个不同的相位状态。
这四个相位状态分别为0度、90度、180度和270度。
我们可以将这四个相位状态分别表示为00、01、10和11。
在QPSK 调制中,将这四个相位状态映射到一个星座图上,星座图的每个点表示一个相位状态。
接下来,我们使用Matlab来实现QPSK调制。
首先,我们需要生成一组二进制数据,这些数据将被映射到星座图上。
我们可以使用randi函数生成一组随机的二进制数据。
然后,我们将这组二进制数据分为两个部分,分别表示为I路和Q路。
```matlabdata = randi([0, 1], 1, N); % 生成随机二进制数据data_I = data(1:2:end); % 提取I路数据data_Q = data(2:2:end); % 提取Q路数据```接下来,我们需要将I路和Q路数据映射到星座图上。
我们可以使用qammod函数来实现这个过程。
qammod函数将I路和Q路数据作为输入,输出对应的星座图点的复数值。
```matlabM = 4; % 星座图中的点的数量symbols = qammod(data_I * 2 + data_Q, M); % 将I路和Q路数据映射到星座图上```然后,我们可以通过添加高斯白噪声来模拟无线信道的影响。
我们可以使用awgn函数来实现这个过程。
awgn函数将星座图点的复数值作为输入,输出经过信道影响后的复数值。
```matlabSNR = 10; % 信噪比symbols_noisy = awgn(symbols, SNR); % 添加高斯白噪声```我们可以使用qamdemod函数将经过信道影响后的复数值解调为二进制数据。
基于Matlab的QPSK调制解调仿真设计与研究设计说明书

天津理工大学计算机与通信工程学院通信工程专业设计说明书基于Matlab/Simulink的QPSK调制解调仿真设计与研究目录摘要 (2)第一章前言 (2)1.1 专业设计任务及要求 (2)1.2 Matlab简介 (2)1.3 Matlab下的simulink简介 (3)1.4 通信系统模型 (3)第二章QPSK调制 (4)2.1 QPSK介绍 (4)2.2 QPSK调制原理 (4)2.2.1 相乘法 (4)2.2.2 选择法 (5)2.3 QPSK调制原理框图 (6)2.4 QPSK调制方式的Matlab仿真 (6)2.5 QPSK调制方式Matlab-simulink仿真 (7)2.5.1 simulink调制建模 (7)2.5.2 simulink调制仿真结果 (8)第三章QPSK解调 (14)3.1 QPSK解调原理 (14)3.2 QPSK解调原理框图 (14)3.3 QPSK解调方式Matlab仿真 (14)3.4 QPSK解调方式的Matlab-simulink仿真 (15)3.4.1 QPSK解调建模 (15)3.4.2 传输信道 (17)3.4.3仿真结果 (17)3.5 仿真结果分析 (20)第四章QPSK通信系统性能分析 (20)第五章结论 (20)参考文献 (21)附录 (21)摘要正交相移键控(QPSK),是一种数字调制方式。
QPSK技术具有抗干扰能力好、误码率低、频谱利用效率高等一系列优点。
论文主要介绍了正交相移键控(QPSK)的概况,以及正交相移键控QPSK的调制解调概念和原理,利用Matlab中M文件和Simulink模块对QPSK的调制解调系统进行了仿真,对QPSK在高斯白噪声信道中的性能进行了,分析了解Simulink中涉及到QPSK的各种模块的功能。
【关键词】Matlab QPSK Simulnk 仿真第一章前言1.1专业设计任务及要求1了解并掌握QPSK调制与解调的基本原理;2在通信原理课程的基础上设计与分析简单的通信系统;3学会利用MATLAB7.0编写程序进行仿真,根据实验结果能分析所设计系统的性能。
基于Matlab的QPSK调制解调仿真设计与研究设计说明书

理工大学计算机与通信工程学院通信工程专业设计说明书基于Matlab/Simulink的QPSK调制解调仿真设计与研究目录摘要 (2)第一章前言 (2)1.1 专业设计任务及要求 (2)1.2 Matlab简介 (2)1.3 Matlab下的simulink简介 (3)1.4 通信系统模型 (3)第二章 QPSK调制 (4)2.1 QPSK介绍 (4)2.2 QPSK调制原理 (4)2.2.1 相乘法 (4)2.2.2 选择法 (5)2.3 QPSK调制原理框图 (6)2.4 QPSK调制方式的Matlab仿真 (6)2.5 QPSK调制方式Matlab-simulink仿真 (7)2.5.1 simulink调制建模 (7)2.5.2 simulink调制仿真结果 (8)第三章 QPSK解调 (13)3.1QPSK解调原理 (13)3.2 QPSK解调原理框图 (13)3.3QPSK解调方式Matlab仿真 (13)3.4QPSK解调方式的Matlab-simulink仿真 (14)3.4.1 QPSK解调建模 (14)3.4.2 传输信道 (16)3.4.3 仿真结果 (16)3.5 仿真结果分析 (18)第四章 QPSK通信系统性能分析 (19)第五章结论 (19)参考文献 (20)附录 (20)摘要正交相移键控(QPSK),是一种数字调制方式。
QPSK技术具有抗干扰能力好、误码率低、频谱利用效率高等一系列优点。
论文主要介绍了正交相移键控(QPSK)的概况,以及正交相移键控QPSK的调制解调概念和原理,利用Matlab中M文件和Simulink模块对QPSK的调制解调系统进行了仿真,对QPSK在高斯白噪声信道中的性能进行了,分析了解Simulink中涉及到QPSK的各种模块的功能。
【关键词】Matlab QPSK Simulnk 仿真第一章前言1.1 专业设计任务及要求1了解并掌握QPSK调制与解调的基本原理;2在通信原理课程的基础上设计与分析简单的通信系统;3学会利用MATLAB7.0编写程序进行仿真,根据实验结果能分析所设计系统的性能。
QPSK调制与解调在MATLAB平台上的实现(word文档良心出品)

QPSK调制与解调在MATLAB平台上的实现QPSK即四进制移向键控(Quaternary Phase Shift Keying),它利用载波的四种不同相位来表示数字信息,由于每一种载波相位代表两个比特信息,因此每个四进制码元可以用两个二进制码元的组合来表示。
两个二进制码元中的前一个码元用a表示,后一个码元用b表示。
QPSK信号可以看作两个载波正交2PSK信号的合成,下图表示QPSK正交调制器。
由QPSK信号的调制可知,对它的解调可以采用与2PSK信号类似的解调方法进行解调。
解调原理图如下所示,同相支路和正交支路分别采用相干解调方式解调,得到()Q t,经过抽样判决和并/串交换器,将上下支路得到的并行I t和()数据恢复成串行数据。
% 调相法clear allclose allt=[-1:0.01:7-0.01];tt=length(t);x1=ones(1,800);for i=1:ttif (t(i)>=-1 & t(i)<=1) | (t(i)>=5& t(i)<=7);x1(i)=1;else x1(i)=-1;endendt1=[0:0.01:8-0.01];t2=0:0.01:7-0.01;t3=-1:0.01:7.1-0.01;t4=0:0.01:8.1-0.01;tt1=length(t1);x2=ones(1,800);for i=1:tt1if (t1(i)>=0 & t1(i)<=2) | (t1(i)>=4& t1(i)<=8);x2(i)=1;else x2(i)=-1;endendf=0:0.1:1;xrc=0.5+0.5*cos(pi*f);y1=conv(x1,xrc)/5.5;y2=conv(x2,xrc)/5.5;n0=randn(size(t2));f1=1;i=x1.*cos(2*pi*f1*t);q=x2.*sin(2*pi*f1*t1);I=i(101:800);Q=q(1:700);QPSK=sqrt(1/2).*I+sqrt(1/2).*Q;QPSK_n=(sqrt(1/2).*I+sqrt(1/2).*Q)+n0;n1=randn(size(t2));i_rc=y1.*cos(2*pi*f1*t3);q_rc=y2.*sin(2*pi*f1*t4);I_rc=i_rc(101:800);Q_rc=q_rc(1:700);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n1=QPSK_rc+n1;figure(1)subplot(4,1,1);plot(t3,i_rc);axis([-1 8 -1 1]);ylabel('a序列');subplot(4,1,2);plot(t4,q_rc);axis([-1 8 -1 1]);ylabel('b序列');subplot(4,1,3);plot(t2,QPSK_rc);axis([-1 8 -1 1]);ylabel('合成序列'); subplot(4,1,4);plot(t2,QPSK_rc_n1);axis([-1 8 -1 1]);ylabel('加入噪声');效果图:% 设定T=1,加入高斯噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1);data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i);end;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;n0=rand(size(t1));I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1); QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc); QPSK_rc_n0=QPSK_rc+n0;% 解调I_demo=QPSK_rc_n0.*cos(2*pi*f1*t1);Q_demo=QPSK_rc_n0.*sin(2*pi*f1*t1);% 低通滤波I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;% 抽样判决data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)];end;bit_recover=[];for i=1:20:20000if sum(data_recover(i:i+19))>0data_recover_a(i:i+19)=1;bit_recover=[bit_recover 1];elsedata_recover_a(i:i+19)=-1;bit_recover=[bit_recover -1];endenderror=0;dd = -2*bit_in+1;ddd=[dd'];ddd1=repmat(ddd,20,1);for i=1:2e4ddd2(i)=ddd1(i);endfor i=1:1e3if bit_recover(i)~=ddd(i)error=error+1;endendp=error/1000;figure(1)subplot(2,1,1);plot(t2,ddd2);axis([0 100 -2 2]);title('原序列');subplot(2,1,2);plot(t2,data_recover_a);axis([0 100 -2 2]);title('解调后序列'); 效果图:% 设定T=1, 不加噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1);data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i);end;t=0:0.1:1e3-0.1;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1); QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);% 解调I_demo=QPSK_rc.*cos(2*pi*f1*t1);Q_demo=QPSK_rc.*sin(2*pi*f1*t1);I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;ddd = -2*bit_in+1;ddd1=repmat(ddd',10,1);for i=1:1e4ddd2(i)=ddd1(i);endfigure(1)subplot(4,1,1);plot(t3,I);axis([0 20 -6 6]);subplot(4,1,2);plot(t3,Q);axis([0 20 -6 6]);subplot(4,1,3);plot(t2,data_recover);axis([0 20 -6 6]); subplot(4,1,4);plot(t,ddd2);axis([0 20 -6 6]);效果图:% QPSK误码率分析SNRindB1=0:2:10;SNRindB2=0:0.1:10;for i=1:length(SNRindB1)[pb,ps]=cm_sm32(SNRindB1(i));smld_bit_err_prb(i)=pb;smld_symbol_err_prb(i)=ps;end;for i=1:length(SNRindB2)SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(2*SNR)); end;title('QPSK误码率分析');semilogy(SNRindB1,smld_bit_err_prb,'*');axis([0 10 10e-8 1]);hold on;% semilogy(SNRindB1,smld_symbol_err_prb,'o'); semilogy(SNRindB2,theo_err_prb);legend('仿真比特误码率','理论比特误码率'); hold off;function[y]=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));function[pb,ps]=cm_sm32(SNRindB)N=10000;E=1;SNR=10^(SNRindB/10);sgma=sqrt(E/SNR)/2;s00=[1 0];s01=[0 1];s11=[-1 0];s10=[0 -1];for i=1:Ntemp=rand;if (temp<0.25)dsource1(i)=0;dsource2(i)=0;elseif (temp<0.5)dsource1(i)=0;dsource2(i)=1;elseif (temp<0.75)dsource1(i)=1;dsource2(i)=0;elsedsource1(i)=1;dsource2(i)=1;end;end;numofsymbolerror=0;numofbiterror=0;for i=1:Nn=sgma*randn(size(s00));if((dsource1(i)==0)&(dsource2(i)==0))r=s00+n;elseif((dsource1(i)==0)&(dsource2(i)==1)) r=s01+n;elseif((dsource1(i)==1)&(dsource2(i)==0)) r=s10+n;elser=s11+n;end;c00=dot(r,s00);c01=dot(r,s01);c10=dot(r,s10);c11=dot(r,s11);c_max=max([c00 c01 c10 c11]);if (c00==c_max)decis1=0;decis2=0;elseif(c01==c_max)decis1=0;decis2=1;elseif(c10==c_max)decis1=1;decis2=0;elsedecis1=1;decis2=1;end;symbolerror=0;if(decis1~=dsource1(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(decis2~=dsource2(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(symbolerror==1)numofsymbolerror=numofsymbolerror+1;end;end;ps=numofsymbolerror/N;pb=numofbiterror/(2*N);效果图:11。
通信原理课程设计――QPSK信号的调制解调.

一、QPSK信号的调制解调一、题目要求利用matlab软件设计并仿真下面的无线通信系统要求:1、输入信号为比特流形式,比特速率通常为100kbps数量级。
2、载波频率自定。
通常为MHz数量级。
3、信道为多径信道(仿真中2径即可,信道中噪声为加性高斯白噪声。
4、信噪比自行设定。
5、画出图中各点波形。
6、画出系统误码率与接收端信噪比SNR的关系(蒙特卡洛仿真。
7、在给定信噪比的情况下,分析多径延时大小对系统性能有没有影响?画出系统误码率与多径时延大小之间的关系。
二、设计思路1、利用matlab随机函数产生随机0、1的数字信号,频率为100kbps,变成极性码,把得到的数字信号分成两路进行正交调制。
2、载波频率选择为1Mhz,进行调制,即每个码元由10个正弦波调制,每个码元选取100个点表示,即抽样频率为10Mhz。
3、相乘调制后得到的两路信号相加得到的信号,通过天线发送出去。
4、在无线信道中会有高斯白噪声和信号的多径(仿真中2径时延产生影响。
5、接收端接收到信号后,进行带通滤波,采用巴特沃斯滤波器,将带外噪声滤掉。
6、对信号进行解调,分别乘以cos和sin两路本地载波,得到的结果用低通滤波器滤波,得到解调的信号。
7、对解调得到的信号判决,大于零为+1,小于零为-1,传给信宿。
8、对比判决后的信号和原始极性码,求出误码率。
9、改变在无线信道中加入的高斯白噪声和信号的信噪比,从-19dB到10Db,分别对应的误码率,画出曲线。
10、改变多径(二径时延,从一个dt到20dt,分别对应的误码率,画出曲线。
三、模块设计1、发送端产生1000个随机0、1数字信号,并按照奇偶分成两路,a 点波形%%%%%%%%%%%%%%%%%% 朱尤祥 09通信三班090610131 %%%%%%%%%%%%%%%%%%%%f=100000,信号频率100kbps;fc=1000000 ;载频1Mhzclear allnum=1000 ;%取num个抽样点n=100 ;%每个间隔取n个点,来恢复波形和延时f=100000 ;fc=1000000 ;dt=1/f/n ;%时间间隔即为每个码元宽度除以n t=0 :dt (1/f*num-dt ;%总码元时间N=length(t ;%长度t1=0 :dt (1/f*num/2-dt ;%串并转换,时间减半m=1 ;%延时t2=0 :dt (1/f*num/2+(m-1*dt ;%串并之后,延时m for recycle=1 :10data=randint(1,num,2 ;%num个抽样点datanrz=data.*2-1 ;%变成极性码%串并转换,将奇偶位分开idata=datanrz(1:2(num-1;%奇qdata=datanrz(2:2:num;%偶ich=zeros(1,num*n/2; %初始化波形信号for i=1:num/2ich((i-1*n+1:i*n=idata(i;endfigure(1subplot(121plot(t1,ich;axis([0,1/f*num/2,-1.5,1.5];title(‘数字信源的一路信号,奇数’;for ii=1:N/2a(ii=cos(2*pi*fc*t(ii;endidata1=ich.*a; %奇数位的抽样值与cos函数相乘得到其中的一路信号qch=zeros(1,num*n/2; for j=1:num/2qch((j-1*n+1:j*n=qdata(j; endsubplot(122plot(t1,qch;axis([0,1/f*num/2,-1.5,1.5];title(‘数字信源的另一路信号,偶数’; for jj=1:N/2b(jj=sin(2*pi*fc*t(jj ; endqdata1=qch.*b ;%偶数位的抽样值与sin 函数相乘得到其中的另一路信号1012345x 10-3数字信源的一路信号,奇数012345x 10-3数字信源的另一路信号,偶数2、载波频率为1Mhz ,为b 点的波形(放大后figure(2carrier=cos(2*pi*fc*t1 ;plo t(t1,carrier ;title(‘fc=1Mhz 的载波’ ;2fc=1Mhz的载波x 10-43、将两路信号相加,得到发送端发送的信号,即c点波形(放大后s=idata1+qdata1 ;%将奇偶相加figure(3plot(t1,s,title(‘调制信号,即是两路合并发送的信号’3调制信号,即是两路合并发送的信号x 10-44、在信道中加入了高斯白噪声和由于二径时延信号的合成,直射波的幅度取0.7,反射波的幅度取0.3。
MATLAB实现QPSK信号的调制解调以及计算误码率BER

MATLAB实现QPSK信号的调制解调以及计算误码率BER QPSK(Quadrature Phase Shift Keying)是一种基于调制的数字通信方法,它能够提高频谱利用率并减小误码率。
在QPSK调制中,每个符号由两个正交的载波信号之一进行相位调制,共有四种可能的相位状态。
本文将介绍如何使用MATLAB实现QPSK信号的调制、解调,并计算误码率BER(Bit Error Rate)。
首先,我们将使用MATLAB生成一个随机的二进制数列作为待传输的数字数据。
假设数据位数为N。
```matlabN=1000;%数据位数data = randi([0, 1], 1, N); % 生成随机二进制数据```接下来,我们将二进制数据转换为QPSK调制所需的两个IQ通道数据。
其中,I通道代表实部,Q通道代表虚部。
我们将0和1分别映射为QPSK调制的四个相位状态(例如:00映射为相位0°,01映射为相位90°,10映射为相位180°,11映射为相位270°)。
```matlabqpsk_data = reshape(data, 2, N/2); % 转换为2*N/2矩阵qpsk_data = 2*qpsk_data - 1; % 转换为-1和1之间的数值I = qpsk_data(1, :);Q = qpsk_data(2, :);```现在,我们得到了I和Q两个IQ通道的数据。
接下来,我们将对这两个通道的数据进行调制。
在QPSK调制中,我们使用两个不同相位的正弦信号。
```matlabfs = 1000; % 采样率fc = 10; % 载波频率t = 0:1/fs:N/fc-1/fs; % 时间序列I_modulated = real(sqrt(2/T).*I.*cos(2*pi*t*fc)); % I通道调制Q_modulated = real(sqrt(2/T).*Q.*sin(2*pi*t*fc)); % Q通道调制QPSK_signal = I_modulated + Q_modulated; % QPSK信号```现在,我们得到了QPSK信号。
QPSK调制与解调在MATLAB平台上的实现

QPSK调制与解调在MATLAB平台上的实现QPSK(Quadrature Phase Shift Keying)是一种常用的调制解调技术,常用于数字通信中。
在QPSK调制中,每个符号代表两个比特,通过将这两个比特与正交信号载波进行调制,实现高效的数据传输。
在这篇文章中,我们将介绍如何在MATLAB平台上实现QPSK调制和解调。
1.QPSK调制首先,我们需要生成待发送的二进制比特序列。
我们可以使用randi 函数生成0和1之间的随机整数序列。
```matlabbits = randi([0,1],1,N);```N表示待发送的比特数。
接下来,我们需要将这个二进制序列转换为QPSK调制符号。
在QPSK 调制中,我们将每两个比特映射到一个复数符号。
将0映射为1+j,将1映射为1-j。
```matlabfor i = 1:2:Nif bits(i) == 0 && bits(i+1) == 0symbols((i+1)/2) = 1 + 1i;elseif bits(i) == 0 && bits(i+1) == 1symbols((i+1)/2) = 1 - 1i;elseif bits(i) == 1 && bits(i+1) == 0symbols((i+1)/2) = -1 + 1i;elseif bits(i) == 1 && bits(i+1) == 1symbols((i+1)/2) = -1 - 1i;endend```最终得到的symbols变量即为QPSK调制后的复数符号序列。
2.QPSK解调首先,我们需要接收到的QPSK信号进行解调,得到复数符号序列。
```matlabsymbols_received = received_signal./carrier; % 将接收到的信号除以载波得到复数符号序列```其中received_signal为接收到的QPSK信号,carrier为发送端使用的载波。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郑州轻工业学院课程设计说明书题目:利用MATLAB实现QPSK调制及解调姓名:院系:电气信息工程学院专业班级:电子信息工程09-1学号: 540901030154指导教师:赵红梅成绩:时间: 2012 年 6 月 18 日至 2012 年 6 月 22 日郑州轻工业学院课程设计任务书题目利用MATLAB实现QPSK调制及解调专业班级电子信息工程09级 1班学号 54 姓名主要内容、基本要求、主要参考资料等:主要内容:已知数字信号1011000101101011,码元速率为2400波特,载波频率为1200Hz,利用MATLAB画出QPSK调制波形,并画出调制信号经过高斯信道传输后解调波形及接收误码率,将其与理论值进行比较。
基本要求:1、通过本课程设计,巩固通信原理QPSK调制的有关知识;2、熟悉QPSK产生原理;3、熟悉高斯信道的建模及QPSK解调原理;4、熟悉误码率的蒙特卡罗仿真;5、学会用MATLAB来进行通信系统仿真。
主要参考资料:主要参考资料:1、王秉钧等. 通信原理[M].北京:清华大学出版社,2006.112、陈怀琛.数字信号处理教程----MATLAB释义与实现[M].北京:电子工业出版社,2004.完成期限:2012.6.18—2012.6.23指导教师签名:课程负责人签名:2012年6月16日目录一前言 (4)1.1QPSK系统的应用背景简介 (4)1.2 QPSK实验仿真的意义 (4)1.3 实验平台和实验内容 (5)1.3.1实验平台 (5)1.3.2实验内容 (5)二、系统实现框图和分析 (5)2.1、QPSK调制部分, (5)2.2、QPSK解调部分 (7)三、实验结果及分析 (7)3.1、理想信道下的仿真 (7)3.2、高斯信道下的仿真 (8)3.3、先通过瑞利衰落信道再通过高斯信道的仿真 (9)参考文献: (11)附录 (12)基于MATLAB的QPSK仿真设计与实现一前言1.1QPSK系统的应用背景简介QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式。
在19世纪80年代初期,人们选用恒定包络数字调制。
这类数字调制技术的优点是已调信号具有相对窄的功率谱和对放大设备没有线性要求,不足之处是其频谱利用率低于线性调制技术。
19世纪80年代中期以后,四相绝对移相键控(QPSK)技术以其抗干扰性能强、误码性能好、频谱利用率高等优点,广泛应用于数字微波通信系统、数字卫星通信系统、宽带接入、移动通信及有线电视系统之中。
1.2 QPSK实验仿真的意义通过完成设计内容,复习QPSK调制解调的基本原理,同时也要复习通信系统的主要组成部分,了解调制解调方式中最基础的方法。
了解QPSK的实现方法及数学原理。
并对“通信”这个概念有个整体的理解,学习数字调制中误码率测试的标准及计算方法。
同时还要复习随机信号中时域用自相关函数,频域用功率谱密度来描述平稳随机过程的特性等基础知识,来理解高斯信道中噪声的表示方法,以便在编程中使用。
理解QPSK调制解调的基本原理,并使用MATLAB编程实现QPSK信号在高斯信道和瑞利衰落信道下传输,以及该方式的误码率测试。
复习MATLAB编程的基础知识和编程的常用算法以及使用MATLAB仿真系统的注意事项,并锻炼自己的编程能力,通过编程完成QPSK调制解调系统的仿真,以及误码率测试,并得出响应波形。
在完成要求任务的条件下,尝试优化程序。
通过本次实验,除了和队友培养了默契学到了知识之外,还可以将次实验作为一种推广,让更多的学生来深入一层的了解QPSK以至其他调制方式的原理和实现方法。
可以方便学生进行测试和对比。
足不出户便可以做实验。
1.3 实验平台和实验内容1.3.1实验平台本实验是基于Matlab的软件仿真,只需PC机上安装MATLAB 6.0或者以上版本即可。
(本实验附带基于Matlab Simulink (模块化)仿真,如需使用必须安装simulink 模块)1.3.2实验内容1.构建一个理想信道基本QPSK仿真系统,要求仿真结果有a.基带输入波形及其功率谱b.QPSK信号及其功率谱c.QPSK信号星座图2.构建一个在AWGN(高斯白噪声)信道条件下的QPSK仿真系统,要求仿真结果有a.QPSK信号及其功率谱b.QPSK信号星座图c.高斯白噪声信道条件下的误码性能以及高斯白噪声的理论曲线,要求所有误码性能曲线在同一坐标比例下绘制3验可选做扩展内容要求:构建一个先经过Rayleigh(瑞利衰落信道),再通过AWGN(高斯白噪声)信道条件下的条件下的QPSK仿真系统,要求仿真结果有a.QPSK信号及其功率谱b.通过瑞利衰落信道之前和之后的信号星座图,前后进行比较c.在瑞利衰落信道和在高斯白噪声条件下的误码性能曲线,并和二.2.c中所要求的误码性能曲线在同一坐标比例下绘制二、系统实现框图和分析2.1、QPSK调制部分,原理框图如图1所示πφ1(t)c f tφ2(t )c f t π 图1原理分析:基本原理及系统结构QPSK 与二进制PSK 一样,传输信号包含的信息都存在于相位中。
的别的载波相位取四个等间隔值之一,如л/4, 3л/4,5л/4,和7л/4。
相应的,可将发射信号定义为(21)/4]ft i ππ+- 0≤t ≤TSi (t ) =0。
, 其他其中,i =1,2,2,4;E 为发射信号的每个符号的能量,T 为符号持续时间,载波频率f 等于nc/T ,nc 为固定整数。
每一个可能的相位值对应于一个特定的二位组。
例如,可用前述的一组相位值来表示格雷码的一组二位组:10,00,01,11。
下面介绍QPSK 信号的产生和检测。
如果a 为典型的QPSK 发射机框图。
输入的二进制数据序列首先被不归零(NRZ )电平编码转换器转换为极性形式,即负号1和0接着,该二进制波形被分接器分成两个分别由输入序列的奇数位偶数位组成的彼此独立的二进制波形,这两个二进制波形分别用a1(t ),和a2(t )表示。
容易注意到,在任何一信号时间间隔内a1(t ),和a2(t )的幅度恰好分别等于Si1和 Si2,即由发送的二位组决定。
这两个二进制波形a1(t ),和a2(t )被用来调制一对正交载波或者说正交基本函数:φ1(t ))c f t π,φ2(t )=)c f t π。
这样就得到一对二进制PSK 信号。
φ1(t )和φ2(t )的正交性使这两个信号可以被独立地检测。
最后,将这两个二进制PSK信号相加,从而得期望的QPSK。
2.2、QPSK解调部分,原理框图如图2所示:φ2(t)正交信道门限=0图2原理分析:QPSK接收机由一对共输入地相关器组成。
这两个相关器分别提供本地产生地相干参考信号φ1(t)和φ2(t)。
相关器接收信号x(t),相关器输出地x1和x2被用来与门限值0进行比较。
如果x1>0,则判决同相信道地输出为符号1;如果x1<0 ,则判决同相信道的输出为符号0。
;类似地。
如果正交通道也是如此判决输出。
最后同相信道和正交信道输出这两个二进制数据序列被复加器合并,重新得到原始的二进制序列。
在AWGN信道中,判决结果具有最小的负号差错概率。
三、实验结果及分析根据图1和图2的流程框图设计仿真程序,得出结果并且分析如下:3.1、理想信道下的仿真,实验结果如图3所示图3实验结果分析:如图上结果显示,完成了QPSK信号在理想信道上的调制,传输,解调的过程,由于调制过程中加进了载波,因此调制信号的功率谱密度会发生变化。
并且可以看出调制解调的结果没有误码。
3.2、高斯信道下的仿真,结果如图4所示:图4实验结果分析:由图4可以得到高斯信道下的调制信号,高斯噪声,调制输出功率谱密度曲线和QPSK信号的星座图。
在高斯噪声的影响下,调制信号的波形发生了明显的变化,其功率谱密度函数相对于图1中的调制信号的功率谱密度只发生了微小的变化,原因在于高斯噪声是一个均值为0的白噪声,在各个频率上其功率是均匀的,因此此结果是真确的。
星座图反映可接收信号早高斯噪声的影响下发生了误码,但是大部分还是保持了原来的特性。
3.3、先通过瑞利衰落信道再通过高斯信道的仿真。
实验结果如图5所示:图5实验结果分析:由图5可以得到瑞利衰落信道前后的星座图,调制信号的曲线图及其功率谱密度。
最后显示的是高斯信道和瑞利衰落信道的误码率对比。
由图可知瑞利衰落信道下的误码率比高斯信道下的误码率高。
至此,仿真实验就全部完成。
参考文献:1、《MATLAB 宝典》陈杰等编著电子工业出版社2、《MATLAB信号处理》刘波, 文忠, 曾涯编著北京电子工业出版社3、《数字信号处理的MATLAB实现》万永革编著北京科学出版社4、网上资料附录MATLAB程序% 调相法clear allclose allt=[-1:0.01:7-0.01];tt=length(t);x1=ones(1,800);for i=1:ttif (t(i)>=-1 & t(i)<=1) | (t(i)>=5& t(i)<=7);x1(i)=1;else x1(i)=-1;endendt1=[0:0.01:8-0.01];t2=0:0.01:7-0.01;t3=-1:0.01:7.1-0.01;t4=0:0.01:8.1-0.01;tt1=length(t1);x2=ones(1,800);for i=1:tt1if (t1(i)>=0 & t1(i)<=2) | (t1(i)>=4& t1(i)<=8);x2(i)=1;else x2(i)=-1;endendf=0:0.1:1;xrc=0.5+0.5*cos(pi*f);y1=conv(x1,xrc)/5.5;y2=conv(x2,xrc)/5.5;n0=randn(size(t2));f1=1;i=x1.*cos(2*pi*f1*t);q=x2.*sin(2*pi*f1*t1);I=i(101:800);Q=q(1:700);QPSK=sqrt(1/2).*I+sqrt(1/2).*Q;QPSK_n=(sqrt(1/2).*I+sqrt(1/2).*Q)+n0;n1=randn(size(t2));i_rc=y1.*cos(2*pi*f1*t3);q_rc=y2.*sin(2*pi*f1*t4);I_rc=i_rc(101:800);Q_rc=q_rc(1:700);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n1=QPSK_rc+n1;figure(1)subplot(4,1,1);plot(t3,i_rc);axis([-1 8 -1 1]);ylabel('a序列');subplot(4,1,2);plot(t4,q_rc);axis([-1 8 -1 1]);ylabel('b序列');subplot(4,1,3);plot(t2,QPSK_rc);axis([-1 8 -1 1]);ylabel('合成序列'); subplot(4,1,4);plot(t2,QPSK_rc_n1);axis([-1 8 -1 1]);ylabel('加入噪声');效果图:% 设定T=1,加入高斯噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1); data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i); end;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;n0=rand(size(t1));I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n0=QPSK_rc+n0;% 解调I_demo=QPSK_rc_n0.*cos(2*pi*f1*t1);Q_demo=QPSK_rc_n0.*sin(2*pi*f1*t1);% 低通滤波I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;% 抽样判决data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;bit_recover=[];for i=1:20:20000if sum(data_recover(i:i+19))>0data_recover_a(i:i+19)=1;bit_recover=[bit_recover 1];elsedata_recover_a(i:i+19)=-1;bit_recover=[bit_recover -1];endenderror=0;dd = -2*bit_in+1;ddd=[dd'];ddd1=repmat(ddd,20,1);for i=1:2e4ddd2(i)=ddd1(i);endfor i=1:1e3if bit_recover(i)~=ddd(i)error=error+1;endendp=error/1000;figure(1)subplot(2,1,1);plot(t2,ddd2);axis([0 100 -2 2]);title('原序列');subplot(2,1,2);plot(t2,data_recover_a);axis([0 100 -2 2]);title('解调后序列'); 效果图:% 设定T=1, 不加噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]); bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1); data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i); end;t=0:0.1:1e3-0.1;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);% 解调I_demo=QPSK_rc.*cos(2*pi*f1*t1);Q_demo=QPSK_rc.*sin(2*pi*f1*t1);I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;ddd = -2*bit_in+1;ddd1=repmat(ddd',10,1);for i=1:1e4ddd2(i)=ddd1(i);endfigure(1)subplot(4,1,1);plot(t3,I);axis([0 20 -6 6]);subplot(4,1,2);plot(t3,Q);axis([0 20 -6 6]);subplot(4,1,3);plot(t2,data_recover);axis([0 20 -6 6]); subplot(4,1,4);plot(t,ddd2);axis([0 20 -6 6]);效果图:% QPSK误码率分析SNRindB1=0:2:10;SNRindB2=0:0.1:10;for i=1:length(SNRindB1)[pb,ps]=cm_sm32(SNRindB1(i));smld_bit_err_prb(i)=pb;smld_symbol_err_prb(i)=ps;end;for i=1:length(SNRindB2)SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(2*SNR)); end;title('QPSK误码率分析');semilogy(SNRindB1,smld_bit_err_prb,'*');axis([0 10 10e-8 1]);hold on;% semilogy(SNRindB1,smld_symbol_err_prb,'o'); semilogy(SNRindB2,theo_err_prb);legend('仿真比特误码率','理论比特误码率'); hold off;function[y]=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));function[pb,ps]=cm_sm32(SNRindB)N=10000;E=1;SNR=10^(SNRindB/10);sgma=sqrt(E/SNR)/2;s00=[1 0];s01=[0 1];s11=[-1 0];s10=[0 -1];for i=1:Ndsource1(i)=[1 0 1 1 0 0 0 1 0 1 1 0 1 0 1 1];numofsymbolerror=0;numofbiterror=0;for i=1:Nn=sgma*randn(size(s00));if((dsource1(i)==0)&(dsource2(i)==0))r=s00+n;elseif((dsource1(i)==0)&(dsource2(i)==1))r=s01+n;elseif((dsource1(i)==1)&(dsource2(i)==0))r=s10+n;elser=s11+n;end;c00=dot(r,s00);c01=dot(r,s01);c10=dot(r,s10);c11=dot(r,s11);c_max=max([c00 c01 c10 c11]);if (c00==c_max)decis1=0;decis2=0;elseif(c01==c_max)decis1=0;decis2=1;elseif(c10==c_max)decis1=1;decis2=0;elsedecis1=1;decis2=1;end;symbolerror=0;if(decis1~=dsource1(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(decis2~=dsource2(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(symbolerror==1)numofsymbolerror=numofsymbolerror+1;end;end;ps=numofsymbolerror/N;pb=numofbiterror/(2*N);效果图:。