⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qpskmain.asv

📁 QPSK调制以及误码率计算程序
💻 ASV
字号:
%QPSK_Rayleigh fading.m
%Simulation program to realize QPSK transmission system
%(Both the AWGN channel and  Rayleigh fading channel)
%徐亚冲 编写整理
%******************** 准备阶段 ************************************
clear all;
echo off;
sr=2000.0;   % 设码元速率为2000
ml=2;        % 调制阶数为2
br=sr .* ml; % 比特率
nd = 100;    % 每个循环的码元个数
samp=100;    %采样点数
ebn0=2.5;    % Eb/No为2.5dB
IPOINT=8;    % 过采样数
T=nd/sr;     %周期
%************************* 滤波器初始化 ***************************

irfn=21;                  % 阶数
alfs=0.5;                 % 滚降因子
[xh] = hrollfcoef(irfn,IPOINT,sr,alfs,1);   %发送滤波器系数
[xh2] = hrollfcoef(irfn,IPOINT,sr,alfs,0);  %接收滤波器系数 


%******************** 开始计算 *************************************

nloop=50;  % 仿真循环次数

noe = 0;    % 初始化错误数据
nod = 0;    % 初始化传输数据

for iii=1:nloop  %定义for循环
    
%*************************** 产生数据 ******************************  
	
    data1=rand(1,nd*ml)>0.5;  % 产生0,1随机数
   % data1=2*data_org-1;      %单/双极性变换
    %for i=1:nd
    %data2(samp*(i-1)+1:samp*i)=data1(i);%对data1进行采样
    %end
%*************************** QPSK 调制******************************  

    [ich,qch]=qpskmod(data1,1,nd,ml);
    [ich1,qch1]= compoversamp(ich,qch,length(ich),IPOINT); 
    [ich2,qch2]= compconv(ich1,qch1,xh); 
    
    mag=ich2+qch2;
    
    %ich20 = ich2(irfn*IPOINT/2+1:nd*IPOINT+irfn*IPOINT/2);
    %ICH2 = fftshift(fft(ich20));
   % P2 = ICH2.*conj(ICH2)/T;              %QPSK调制后的功率
  % r=ich2+j.*qch2;
   %mag=abs(r);
%**************************** 衰落计算 *****************************
%本节根据参考书P87页的公式计算噪声功率	
    spow=sum(ich2.*ich2+qch2.*qch2)/nd;           
    attn=0.5*spow*sr/br*10.^(-ebn0/10);
    attn=sqrt(attn);                              
     
%********************** 瑞利衰弱信道 *******************************
 [ifade,qfade]=RAY1(ich2,qch2);
 R=ifade+j.*qfade;
 Mag=abs(R);

%********************* AWGN 信道 ***********************************
	
    [ich3,qch3]= comb(ifade,qfade,attn);    %加入瑞利衰落后的噪声
    [ich4,qch4]= compconv(ich3,qch3,xh2);
    
    [ich31,qch31]= comb(ich2,qch2,attn);    % 加入高斯噪声
    [ich41,qch41]= compconv(ich31,qch31,xh2);
    
    %mag=ich31+qch31;
    
    syncpoint=irfn*IPOINT+1;
    ich5=ich4(syncpoint:IPOINT:length(ich4));
    qch5=qch4(syncpoint:IPOINT:length(qch4));
     
   ich40 = ich41(irfn*IPOINT/2+1:nd*IPOINT+irfn*IPOINT/2);
   ICH4 = fftshift(fft(ich40));
   P4 = ICH4.*conj(ICH4)/T;                   %AWGN输出的功率谱计算
%**************************** QPSK 解调 *****************************

    [demodata]=qpskdemod(ich5,qch5,1,nd,ml);

%********************************************************************

end   %循环结束                                            

%********************** 输出结果 ************************************


%******************** 基带信号波形和基带信号的功率谱 ****************
%Hs=spectrum.welch;
 figure(1)
 

% Hs=spectrum.welch;
 subplot(2,1,2)
 %psd(Hs,data1,'Fs',tstp);
 plot(fftshift(abs(fft(data1)))); 
 title('基带信号的功率谱');
 subplot(2,1,1)  
 %x1=0+0.01:0.01:200;
 bar(data1);
 title('基带信号波形');
 axis([0 100 -1.2 1.2]);                       %画信源图时规定两坐标轴的范围
%********************* QPSK调制后波形和功率谱 ************************
 
 figure(2);
 subplot(2,1,1);
 plot(mag);
 title('QPSK调制后波形');

 subplot(2,1,2)
 %psd(Hs,ich2,'Fs',tstp); %调制后功率谱
 %[P2,w2]=pwelch(mag);
%psdplot(P2,w2);
scatterplot(abs(fft(ich2)));
title('QPSK调制后功率谱');
axis([-100,100,0,10]);

%************************ AWGN输出波形和功率谱 *************************

 figure(3);
 subplot(2,1,1);
 plot(ich41);
 title('AWGN输出波形');


 subplot(2,1,2);
 %psd(Hs,ich41,'Fs',tstp); %加噪后功率谱
 pwelch(ich41,[],[],[],50);
 title('功率谱');


%***********************经过Rayleigth信道后的星座图********************

 figure(4);
 plot(ich5,qch5,'*');
 title('经过信道后的星座图');
 legend('2.5dB');

%****************************经过AWGN和Rayleigh信道后的信号**********

 figure(5);
 plot(ich5+qch5);
 title('经过AWGN和Rayleigh信道后的信号');

%********************************The End*****************************
 



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -