QPSK调制与解调通信仿真MATLAB源码(含GUI)

一、简介

1 调制模型

  与QPSK相比,OQPSk调制方式在复数通道Q通道中,插入了一个比特的时延Tb。

在这里插入图片描述




  2.优点

  OQPSK能够把180度的相移变化变成两个π /2的相位变化,因此相轨道远离了原点

在这里插入图片描述




  3 解调

  因为调制时Q路进行了延时,所以解调时I路进行延时

在这里插入图片描述



二、源代码

function varargout = GUI_QPSK(varargin) % GUI_QPSK MATLAB code for GUI_QPSK.fig %      GUI_QPSK, by itself, creates a new GUI_QPSK or raises the existing %      singleton*. % %      H = GUI_QPSK returns the handle to a new GUI_QPSK or the handle to %      the existing singleton*. % %      GUI_QPSK('CALLBACK',hObject,eventData,handles,...) calls the local %      function named CALLBACK in GUI_QPSK.M with the given input arguments. % %      GUI_QPSK('Property','Value',...) creates a new GUI_QPSK or raises the %      existing singleton*.  Starting from the left, property value pairs are %      applied to the GUI before GUI_QPSK_OpeningFcn gets called.  An %      unrecognized property name or invalid value makes property application %      stop.  All inputs are passed to GUI_QPSK_OpeningFcn via varargin. % %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one %      instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help GUI_QPSK % Last Modified by GUIDE v2.5 03-Dec-2018 20:37:56 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name',       mfilename, ...                   'gui_Singleton',  gui_Singleton, ...                   'gui_OpeningFcn', @GUI_QPSK_OpeningFcn, ...                   'gui_OutputFcn',  @GUI_QPSK_OutputFcn, ...                   'gui_LayoutFcn',  [] , ...                   'gui_Callback',   []); if nargin && ischar(varargin{1})    gui_State.gui_Callback = str2func(varargin{1}); end if nargout    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else    gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before GUI_QPSK is made visible. function GUI_QPSK_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject    handle to figure % eventdata  reserved - to be defined in a future version of MATLAB % handles    structure with handles and user data (see GUIDATA) % varargin   command line arguments to GUI_QPSK (see VARARGIN) % Choose default command line output for GUI_QPSK handles.output = hObject; s=round(rand(1,100));  %生成二进制基带数据并画出基带信号图 N=1:100; %figure(1);subplot(311);stem(N,s);title('基带信号');grid on; Ps=1; M=4;        %QPSK星座图 d=sqrt(Ps)*sin(pi/M); A=[1+1*i,-1+1*i,-1-1*i,1-1*i]*d; %subplot(312);scatter(real(A),imag(A),'filled');title('QPSK星座图');hold on; theta=0:pi/100:2*pi; x=cos(theta); y=sin(theta); %plot(x,y);grid on;   Maptable=[0 0;0 1;1 1;1 0];        %QPSK格雷码比特映射 for j=1:2:100    for m=1:M         if isequal(s(j:j+1),Maptable(m,:))            Qu((j+1)/2)= (2*m-1)*pi/4;            x((j+1)/2)=A(m);         break         end    end end               %基带数据s携带的信息映射到X[n] Am=1;             %载波调制 T=0.0001;            fc=6/T; Smpl=1000; deltaT=T/Smpl;    %连续时间离散化间隔 Ns=5;            %画出Ns个符号的波形 t=deltaT:deltaT:Ns*T;  %离散时间序列 for j=1:Ns    index=(j-1)*Smpl+1:j*Smpl; %第i个符号对应的离散时间序号    g(index)=1;              %矩形脉冲成型    X(index)=Am*g(index).*cos(2*pi*fc*t(index)+Qu(ceil(index/100.01))); %载波调制信号 end %subplot(313);plot(t,X);title('QPSK调制信号波形'); SNR_dB=15;    %定义信噪比     SNR=10^(SNR_dB/10); %定义线性信噪比 Ps=1;     %发射功率 Pn=Ps/SNR;  %噪声方差 x=x(1:50); z=sqrt(Pn/2)*(randn(size(x))+randn(size(x))*i); %生成白噪声 h=1;  %AWGN信道下,信道增益h=1 y=h*x+z;   %基带接受信号 %figure(2);subplot(211);scatter(real(y(1:10)),imag(y(1:10)),'filled'); %y的星座图title('QPSK接收星座图'); for j=1:length(y)      Dist=abs(y(j)-A);                  %第j个接受信号与各星座图点的距离    [~,Index]=min(Dist);               %找到距离最近的点    x_est(j)=A(Index);                 %得到发射调制信号的估计    s_est(2*j-1:2*j)=Maptable(Index,:);   %得到比特数据的估计 end W=1:100; %subplot(212);stem(W,s_est);title('QPSK解调后信号'); for n=1:25  Pe_t(n)=2*sqrt(2)/4*erfc(sqrt(2*n)*sin(pi/M))-sqrt(2)/4*erfc(sqrt(2*n)*sin(pi/M))* sqrt(2)/4*erfc(sqrt(2*n)*sin(pi/M));  Pb_t(n)=0.5*Pe_t(n); end PESUM=0; PBSUM=0 for n=1:25 for m=1:1000        SNR=n;        Ps=1;          Pn=Ps/SNR;        z=sqrt(Pn/2)*(randn(size(x))+randn(size(x))*i);        h=1;        y=h*x+z;        for j=1:length(y)            Dist=abs(y(j)-A);            [~,Index]=min(Dist);            x_est(j)=A(Index);            s_est(2*j-1:2*j)=Maptable(Index,:);        end for  k=1:100 if(s(k)+s_est(k)==1)         PBSUM=PBSUM+1; end        end for k1=1:50 if isequal(x(k1),x_est(k1))               PESUM=PESUM+0;           else               PESUM=PESUM+1; end end end Pb(n)=PBSUM/1000/100; Pe(n)=PESUM/1000/50; PBSUM=0; PESUM=0; end SNRX=1:25; %figure(3);plot(SNRX,Pb); hold on;plot(SNRX,Pe);scatter(SNRX,Pe_t);scatter(SNRX,Pb_t, 'filled'); %xlabel('信噪比 SNR(r/dB)');title('AWGN信道下误码率与误符号率曲线'); axis([1 25 0 1]);grid on;hold off; H=sqrt(1/2)*(randn+i*randn); Y=H*x+z; %figure(4);subplot(211);scatter(real(Y(1:10)),imag(Y(1:10)),'filled');title('4PSK信道均衡前星座图'); Y1=Y/H; %subplot(212);scatter(real(Y1(1:10)),imag(Y1(1:10)),'filled');title('4PSK信道均衡后星座图'); PESUM1=0; PBSUM1=0 for n=1:25  for m=1:1000         SNR=n;        Ps=1;              Pn=Ps/SNR;        z=sqrt(Pn/2)*(randn(size(x))+randn(size(x))*i); Y1=(H*x+z)/H;        for j=1:length(Y1)            Dist=abs(Y1(j)-A);            [~,Index]=min(Dist);            x_est1(j)=A(Index);            s_est1(2*j-1:2*j)=Maptable(Index,:);        end for  k=1:100 if(s(k)+s_est1(k)==1)       PBSUM1=PBSUM1+1; end end for k1=1:50 if isequal(x(k1),x_est1(k1))               PESUM1=PESUM1+0;           else               PESUM1=PESUM1+1; end


三、运行结果

在这里插入图片描述



在这里插入图片描述



在这里插入图片描述


在这里插入图片描述



在这里插入图片描述




免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空