📄 qpskmain.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 + -