QPSK.zip

  • sw1995
    了解作者
  • matlab
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 3
    下载次数
  • 2018-04-17 15:06
    上传日期
QPSK调制的matlab仿真,信道为高斯白噪声信道。
QPSK.zip
  • QPSK高斯
  • qpsk.m
    5.2KB
  • qpsk_awgn.m
    2.2KB
内容介绍
%%%初始化参数%%% T=1; %基带信号宽度,也就是频率 fc=10/T; %载波频率 m1=2; %调制信号类型的一个标志位 nb=100; %传输的比特数 delta_T=T/200; %采样间隔 fs=1/delta_T; %采样频率 SNR=0; %信噪比 t=0:delta_T:nb*T-delta_T; %限定t的取值范围 N=length(t); %采样数 %%%调制部分%%% %基带信号的产生% data=randn(1,nb)>0.5; %调用一个随机函数(0 or 1),输出到一个1*100的矩阵 datanrz=data.*2-1; %变成极性码 data1=zeros(1,nb/delta_T); %创建一个1*nb/delta_T的零矩阵 for q=1:nb datal((q-1)/delta_T+1:q/delta_T)=datanrz(q); %将极性码变成对应的波形信号 end %将基带信号变换成对应波形信号% data0=zeros(1,nb/delta_T); %创建一个1*nb/delta_T的零矩阵 for q=1:nb data0((q-1)/delta_T+1:q/delta_T)=data(q);%将极性码变成对应的波形信号 end %发射的信号% data2=abs(fft(data0)); %串并转换,将奇偶位数据分开% idata=datanrz(1:m1:(nb-1));%将奇偶位分开,因此间隔ml为2 qdata=datanrz(2:m1:nb); %QPSK信号的调制 ich=zeros(1,nb/delta_T/2);%创建一个1*nb/delta_T/2的零矩阵,以便后面存放奇偶位数据 for i=1:nb/2 ich((i-1)/delta_T+1:i/delta_T)=idata(i); end for ii=1:N/2 a(ii)=sqrt(2/T)*cos(2*pi*fc*t(ii)); end idata1=ich.*a; %奇数位数据与余弦函数相乘,得到一路的调制信号 qch=zeros(1,nb/2/delta_T); for j1=1:nb/2 qch((j1-1)/delta_T+1:j1/delta_T)=qdata(j1); end for jj=1:N/2 b(jj)=sqrt(2/T)*sin(2*pi*fc*t(jj)); end qdata1=qch.*b; %偶数位数据与余弦函数相乘,得到另一路的调制信号 s=idata1+qdata1; %将奇偶位数据合并,s即为QPSK调制信号 ss=abs(fft(s)); %快速傅里叶变换得到频谱 %%%高斯信道%%% s1=awgn(s,SNR); %通过高斯信道之后的信号 s11=abs(fft(s1)); %快速傅里叶变换得到频谱 s111=s1-s; %高斯噪声曲线 %%%解调部分(高斯信道)%%% idata2=s1.*a; qdata2=s1.*b; %对应的信号与正余弦信号相乘 %经低通滤波器% [c,d]=butter(2,2*fc/fs); for i=1:2/2 idata21(i,:)=filtfilt(c,d,idata2(i,:)); %idata2是经过低通滤波器之后出现的信号 qdata21(i,:)=filtfilt(c,d,qdata2(i,:)); %qdata2是经过低通滤波器之后出现的信号 end idata3=zeros(1,nb/2); %建立1*nb数组,以存放解调之后的信号 qdata3=zeros(1,nb/2); %抽样判决的过程,与0作比较,data>=0,则置1,否则置0% for n=1:nb/2 A1(n)=sum(idata2((n-1)/delta_T+1:n/delta_T)); if sum(idata2((n-1)/delta_T+1:n/delta_T))>=0 idata3(n)=1; else idata3(n)=0; end A2(n)=sum(qdata2((n-1)/delta_T+1:n/delta_T)); if sum(qdata2((n-1)/delta_T+1:n/delta_T))>=0 qdata3(n)=1; else qdata3(n)=0; end end %为了显示星座图,将信号进行处理% idata4=zeros(1,nb/2); qdata4=zeros(1,nb/2); for n=1:nb/2 Awgn_ichsum(n)=sum(idata2((n-1)/delta_T+1:n/delta_T))*delta_T; if Awgn_ichsum(n)>=0 idata4(n)=1; else idata4(n)=0; end Awgn_qchsum(n)=sum(qdata2((n-1)/delta_T+1:n/delta_T))*delta_T; if Awgn_qchsum(n)>=0 qdata4(n)=1; else qdata4(n)=0; end end %将判决之后的数据存放进数组% demodata=zeros(1,nb); demodata(1:m1:(nb-1))=idata3; %存放奇数位 demodata(2:m1:nb)=qdata3; %存放偶数位 %为了显示,将它变成波形信号(即传输一个1代表单位宽度的高电平)% demodata1=zeros(1,nb/delta_T); %创建一个1*nb/delta_T的零矩阵 for q=1:nb demodata1((q-1)/delta_T+1:q/delta_T)=demodata(q); %将极性码变成对应的波形信号 end %%%累计误码数%%% %abs(demodata-data)求接收端和发射端数据差的绝对值,累计之后就是误码个数% Awgn_num_BER=sum(abs(demodata-data)) %%%误码率计算%%% SNRindB1=0:1:6; SNRindB2=0:0.1:6; %高斯信道% echo on; for i=1:length(SNRindB1) [pb,ps]=qpsk_awgn(SNRindB1(i)); bit_awgn_err_prb(i)=pb; symbol_awgn_err_prb(i)=ps; disp([ps,pb]); echo off; end; %理论曲线% echo on; for i=1:length(SNRindB2), SNR=exp(SNRindB2(i)*log(10)/10); %信噪比 theo_err_awgn_prb(i)=0.5*erfc(sqrt(SNR)); %高斯噪声理论误码率 echo off; end; %%%画图%%% h =spectrum.welch; %宏定义,方便以下的调用 %通过高斯信道% figure(1); subplot(4,2,1);plot(idata1);title('a信号调制后的波形');axis([0 500 -3 3]); subplot(4,2,2);plot(qdata1);title('b信号调制后的波形');axis([0 500 -3 3]); subplot(4,2,3);plot(s);title('调制后的波形');axis([0 500 -3 3]); subplot(4,2,4);plot(s1);title('经高斯信道后的波形');axis([0 500 -3 3]); subplot(4,2,5);plot(idata2);title('a路经乘法器的输出波形');axis([0 200 -6 6]); subplot(4,2,6);plot(qdata2);title('b路经乘法器的输出波形');axis([0 200 -6 6]); subplot(4,2,7);plot(idata21);title('a路经低通滤波器的输出波形'); subplot(4,2,8);plot(qdata21);title('b路经低通滤波器的输出波形'); figure(2); subplot(2,2,1);plot(data0);title('基带信号');axis([0 20000 -2 2]); subplot(2,2,2);plot(data2);title('基带信号功率谱密度'); subplot(2,2,3);plot(demodata1);title('解调输出');axis([0 20000 -2 2]); subplot(2,2,4);plot(abs(fft(demodata1)));title('解调输出功率谱密度'); figure(3); subplot(2,2,1);plot(s);title('调制信号');axis([0 500 -3 3]); subplot(2,2,2);plot(ss);title('调制信号功率谱密度'); subplot(2,2,3);plot(s1);title('调制信号(Awgn)');axis([0 500 -5 5]); subplot(2,2,4);plot(s11);title('调制信号功率谱密度(Awgn)'); figure(4); semilogy(SNRindB2,theo_err_awgn_prb,'r',SNRindB1,bit_awgn_err_prb,'r*');title('AWGN误码率曲线'); xlabel('信噪比');ylabel('误码率'); legend('AWGN理论','AWGN仿真'); figure(5); for i=1:nb/2 plot(idata(i),qdata(i),'r+'),title('QPSK信号星座图(Awgn)');hold on; axis([-2 2 -2 2]); plot(Awgn_ichsum(i),Awgn_qchsum(i),'*');hold on; legend('理论值(发射端)','实际值(接收端)'); end
评论
    相关推荐
    • DFE for QPSK MATLAB.zip
      DFE for QPSK simulation in MATLAB.
    • QPSK MATLAB
      QPSKMATLAB仿真代码,其中QPSK的调制解调器是自己编的。
    • 蒙特卡洛QPSK仿真 matlab
      QPSK数字通信中的调制解调的原理和MATLAB软件实现QPSK调制系统的过程,以及利用蒙特卡罗进行的在相应的信噪比的情况下的性能仿真分析,通过用Matlab对这一过程的编程,并用蒙特卡罗方法,仿真QPSK在高斯信道影响下的...
    • MATLABQPSK
      基于MATLABQPSK调制与解调,亲测可用,可以计算BER,输出波形。
    • BPSK,QPSK Matlab仿真代码
      matlab BPSK 2PSK QPSK 4PSK,误码率,星座图
    • matlab qpsk
      qpsk matlab代码,介绍了qpsk从信号产生调制传输解调的全过程,并提供了误码率测试等内容。
    • matlab qpsk代码
      qpsk调制代码与解调代码,可直接当成function来使用
    • QPSK matlab 代码
      QPSK调制解调
    • BPSK QPSK matlab通信仿真
      matlab写的关于BPSK QPSK的通信仿真程序,带详细的文档说明,带详细的代码注释,希望各位有识之士下载交流
    • QPSK matlab 调制解调代码
      国外比较经典的MATLAB 关于QPSK调制、解调代码,每一模块都非常详细,程序书写较为规范,可作为初学者学习范例。对于想了解DQPSK工作原理的技术开发人员,也有一定帮助。