移动通信仿真实验-MATLAB仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

移动通信仿真实验-MATLAB仿真
2012级移动通信仿真实验
——1234567 通信S班⼀、实验⽬的:
(1)通过利⽤matlab语⾔编程学会解决移动通信中基本理论知识的实验分析和验证⽅法;
(2)巩固和加深对移动通信基本理论知识的理解,增强分析问题、查阅资料、创新等各⽅⾯能⼒。

⼆、实验要求:
(1)熟练掌握本实验涉及到的相关知识和相关概念,做到原理清晰,明了;
(2)仿真程序设计合理、能够正确运⾏;
(3)按照要求撰写实验报告(基本原理、仿真设计、仿真代码(m⽂件)、仿真图形、结果分析和实验⼼得)
三、实验内容:
1、分集技术在Rayleigh衰落信道下的误码率分析
内容要求:
1)给出不同调制⽅式(BPSK/MPSK/QPSK/MQAM任选3种,M=4/8/16)在AWGN和Rayleigh 衰落环境下的误码率性能⽐较,分析这些调制⽅式的优缺点;
2)给出Rayleigh衰落信道下BPSK在不同合并⽅式(MRC/SC/EGC)和不同路径(1/2/3)时的性能⽐较,分析合并⽅式的优缺点;
3)给出BPSK在AWGN和Rayleigh衰落信道下1条径和2条径MRC合并时理论值和蒙特卡洛仿真的⽐较。

3、直接扩频技术在Rayleigh衰落信道下的误码率分析
内容要求:
1)m-序列、Gold序列和正交Gold序列在AWGN信道下的QPSK误码率分析;
2)m-序列、Gold序列和正交Gold序列在Rayleigh信道下的QPSK误码率分析;
3)m-序列在AWGN和Rayleigh信道下的QPSK误码率分析;
4)m-序列Rayleigh信道下不同调制⽅式MQAM(M=4/8/16)时的误码率分析。

四、实验数据
1、基于MATLAB中的BPSK误码性能研究
BPSK(Binary Phase Shift Keying )即双相频移键控,是把模拟信号转换成数据值的转换⽅式之⼀。

利⽤偏离相位的复数波浪组合来表现信息键控移相⽅式的⼀种。

本实验将简要介绍BPSK调制⽅式的特点,调制解调⽅法,以及在Matlab中在AWGN 信道中的误码性能。

(1)BPSK调制原理
⼆进制相移键控(BPSK)是利⽤载波的相位的变换来传递信息,⽽振幅和频率保持不变,BPSK的时域表达式为:
π
g
t
t
u
=t f
)
2
cos(
)(Φ
)(
m
c
T
Φ
=
n0(发送“0”时)或1(发送“1”时)
改写之后为
t
f t
g A t u c T m π2cos )()(=或
t
f t
g A c T π2cos )(-
另外BPSK 信号⼀般⽤双极性(bipolarity )全占空矩形脉冲序列与⼀个正弦载波相乘表征。

PSK 各信号具有相同的能量,即s
T m dt g A dt t u εε===??∞∞∞
∞2
2
2)(
m ε表⽰每个传输符号能量,
T
t g T 2
)(=
定义为⼀个矩形脉冲,0≤t ≤T
于是在符号区间0≤t ≤T 内传输的信号波形可表⽰为(其中A=
s
ε)
m t f T t u φπε+=
如果将其看成两相⾓之和,即可表⽰为
t f M m
t g t f M m t g t u c T s c T s m ππεππε2sin )2sin()(2cos )2cos(
)()(-=
其中
)(1t Φ)(2t Φ是两个正交基函数,定义为t f t g t c T πφ2cos )()(1=
t f t g t c T πφ2sin )()(2-=
并把改两个基函数能量归⼀化到1
BPSK 相位解调与检测
AWGN 信道中,接受信号可表⽰为:
)()()(t n t u t r m +==)2sin()()2cos()()(t f t n t f t n t u c s c c m ππ-+ 其中
)(t n c 和)(t n s 是加性噪声的两个正交分量。

将接受信号与
)(1t Φ和)(2t Φ做互相关,
两个相关器的输出即可产⽣受噪声污染的
信号分量,可表⽰为
n u r m +==
s s c s n M m
n M m ++)2sin()2cos(
πεπε,m=0,1,2,3
其中?∞∞=dt t n t g n c T c )()(21 ?∞
∞=dt
t n t g n s T c )()(21
且两正交噪声分量是零均值互不相关的⾼斯随机过程,于是
)(t n c 和)(t n s 的⽅差是:
2
)()(0
2
2
N n E n E s c =
=
最佳检测器将接受信号向量r 投射到所有可能的传输信号向量之⼀上,并选对应于最⼤投影的向量,据此相关准则即为
由于全部信号都具有相等的能量,因此数字相位调制的⼀种等效检测器标准就是计算接收信号向量
),(s c r r r 的相位:
c
s r r r arctan

并从信号集
}{m s 中选取其相位最接近r θ的信号。

在AWGN 信道中,⼆相相位调制与⼆进制PAM 相同,差错概率为:
)
2(0
N Q P b
e ε=,其中为每⽐特能量。

(2)程序代码
% BPSK 在AWGN 平坦衰落信道的⽆码性能仿真************************************* %***************************
************************************* clf; clc;
SNRindB1=0:2:15; % 给定要进⾏仿真的信噪⽐(dB) SNRindB2=0:0.1:15; % 给定要进⾏理论计算的信噪⽐(dB)
%************对SNRindB1进⾏Monte Carlo 仿真******************************** for i=1:length(SNRindB1)
pb=BPSK2(SNRindB1(i)); % 调⽤BPSK2函数对给定信噪⽐进⾏仿真 smld_bit_err_prb(i)=pb; % 通过调⽤函数仿真获得⽐特误码率 end ;
%**************************************************************************
%*************对SNRindB2进⾏理论分析*************************************** for i=1:length(SNRindB2)
SNR=exp(SNRindB2(i)*log(10)/10); % dB 单位信噪⽐化成⼀般式信噪⽐ theo_err_prb(i)=Qfunct(sqrt(2*SNR)); % 调⽤Q 函数计算理论值 end ;
%**************************************************************************
% *************绘制相关曲线************************************************ colordef white
h1=semilogy(SNRindB1,smld_bit_err_prb,'g*'); %绘制⽐特误码率曲线
hold
h2=semilogy(SNRindB2,theo_err_prb,'g'); %绘制理论⽐特误码率曲线legend('BPSK仿真误码率','BPSK理论误码率');
xlabel('E/N(dB)')
ylabel('Pe')
title('BPSK在AWGN信道中的误码性能 ')
(3)在AWGN信道中BPSK的误码率分析
基于前⾯的仿真原理,将理论值与仿真值进⾏对⽐,分析合理性,⾸先由MATLAB程序产⽣信号源,再模拟AWGN平坦衰落信道中叠加加性⾼斯⽩噪声,在接收端对接收信号进⾏检测与估值,并对信号进⾏判决恢复原始信号。

得到仿真⽐特误码率和理论⽐特误码率如下:
分析:从上图可以看出,仿真⽐特误码率和理论⽐特误码率⾮常接近,不管是在信噪⽐较低的情况下,还是信噪⽐较⾼的情况下,两者都符合得很好,但可以看出,随着信噪⽐逐渐加⼤,两者渐渐有了分叉,慢慢显⽰出差距来,这说明在⼤信噪⽐的情况下,理论值还是会偏离实际值的,但是误码率越来越⼩,越来越向好的⽅向发展。

下⾯则给出了三种调制⽅式的误码性能⽐较
分析:将QPSK,BPSK,16QAM,FSK四种调制⽅式,包括理论值与实际值,放在同⼀个图下,对他们进⾏对⽐,可以很清晰地发现,QPSK在信噪⽐较⼩时,仿真值和理论值就有了偏离,且两者数值都⽐较⼤,当信噪⽐越来越⼤时,仿真值成直线⼏乎没变化,⽽实际值的Pe值逐渐变⼩,这种调制⽅式不是很可取;16QAM的性能跟QPSK相⽐,在低信噪⽐时,Pe值较⼤(还要⼤于QPSK的),随着信噪⽐逐渐增⼤,16QAM的Pe值逐渐减⼩,且理论值与实际值⽐较契合,在⼤信噪⽐情况下,误码性能略逊与QPSK的;FSK的理论值和实际值在各种信噪⽐下都⽐较契合,两者⼏乎没有⼤的差距,⾮常理想,⽆论是在低,⾼信噪⽐下,性能都要⽐QPSK的优越⼀些;BPSK性能最优!理论值与实际值契合得⽐较理想,⽽在低,⾼信噪⽐情况下,Pe值都是最低的,且随着信噪⽐逐渐增⼤,Pe实际值迅速减⼩,实现起来性能⼗分优越。

因此在选择对误码性能要求较⾼的系统时,BPSK可作为⾸选,FSK次之,QPSK和16QAM再考虑实际情况选择,⽽在其他状态时,也可优先选择BPSK。

close all;
N=10000;
Fd=1;
Fs=1*Fd;
M=4;
SNR_db=0:2:14;
for n=1:length(SNR_db)
Eb_N0=10^(SNR_db(n)/10);
sgma=sqrt(1/(2*Eb_N0));
x=randint(N,1,M);
y=dmodce(x,Fd,Fs,'psk',M);
a11=randn(1,N);
b11=randn(1,N);
%产⽣低通滤波器
b=-ones(1,Fs);b=b/Fs;a=1;
fad1=filter(b,a,a11);
fad2=filter(b,a,b11);
ynoise=y.*(abs(fad1+j*fad2))'+sqrt(Fs/Fd)*sgma*(randn(length(y),1)+j*randn(leng th(y),1)); ynoise1=y+sqrt(Fs/Fd)*sgma*(randn(length(y),1)+j*randn(length(y),1))
z=ddemodce(ynoise,Fd,Fs,'psk',M);
z1=ddemodce(ynoise1,Fd,Fs,'psk',M);
[numbers,p1m(n)]=symerr(x,z);
[numbers,p2m(n)]=symerr(x,z1)
end;
semilogy(SNR_db,p1m,'*-',SNR_db,p2m,'rx-');
xlabel('信噪⽐(dB)');
ylabel('误码率');
legend('瑞利信道仿真得到的误码率','⾼斯信道仿真得到的误码率');axis([0 15 10^(-4) 1]); clear;
close all;
N=10000; Fd=1;
Fs=1*Fd;
M=4;
sgma=sqrt(1/(8*Eb_N0));
x=randint(N,1,M);
y=dmodce(x,Fd,Fs,'psk',M);
ynoise=y+sqrt(Fs/Fd)*sgma*(randn(length(y),1)+j*randn(length(y),1));
figure(SNR_db+1);
axis([1.2 1.2 1.2 1.2]);
hold on;
for i=0:M-1
plot(cos(2*pi*i/M),sin(2*pi*i/M),'.','MarkerSize',20);
end
plot(ynoise,'+');
hold off;
end;
3、M-QAM 调制在⾼斯信道和Rayleigh 衰落信道中的平均误码率性能研究
(1)QAM 的调制和相⼲解调框图如图(1)、图(2)所⽰。

在调制端,输⼊数据经过串/并变换后分成两路。

为了抑制已调信号的带外辐射,两路电平映射出的信号还要经过预调制低通滤波器,才分别与相互正交的各路载波相乘。

最后两路信号相加就可以以得到已调输出信号y 。

串并转换
基带信号x
电平映射
电平映射
成形滤波
成形滤波
X
X
载波发⽣器
90度相移
coswt
-sinwt
+
已调信号y
Qn
In
图(1)正交调制原理框图解调是调制的逆过程,在接收端解调器中可以采⽤正交的相⼲解调⽅法。

接受到的信号分两路进⼊两个正交的载波的相⼲解调器,再分别进⼊判决器形成L 进制信号并输出⼆进制信号,最后经并/串变换后得到基带信号。

时钟恢复
LPF
并串转换
抽样判决
X
X
载波恢复
90度相移
coswt
-sinwt
已调信号y
Qn
In
LPF
抽样判决

(2)相⼲解调原理框图对于⽅型QAM 来说,它可以看成是两个脉冲振幅调制信号之和,因此利⽤脉冲振幅调制的分析结果,可以得到M 进制QAM 的误码率公式:
131132(1)(log 2()))*[1(1)(log 2())]
2(1)22(1)M P erfx M snrpBit erfx M snrpBit M M M M
=-
----log 2()M 为每个码元内的⽐特数,snrpBit 为每⽐特的平均信噪⽐。

(3)程序代码
clear;
M=16;%设置进制 k=log2(M);
L=sqrt(M);
x=randint(30000,1);%产⽣⼆进制随机数
y=modulate(modem.qammod('M',16,'InputType','Bit'),x);%调制
snrpBit=0:1:15;%信噪⽐
s_b2d=bi2de(reshape(x,k,length(x)/k).','left-msb');%⼆进制变为⼗进制
for n=1:length(snrpBit)
snr(n)=snrpBit(n)+10*log10(k);%Ratio of symbol energy to noise power spectral density
ynoisy=awgn(y,snr(n),'measured');%加⼊⾼斯⽩噪声
z=demodulate(modem.qamdemod('M',16,'OutputType','Bit'),ynoisy);%解调
a=3*log2(L);b=L^(2)-1;c=1-L^(-1);
theo_sym_rate(n)= (erfc(sqrt((10.^(snrpBit(n).*0.1)).*a./b)).*2*c).*(1- erfc(sqrt((10.^(snrpBit(n).*0.1)).*a./b)).*(1/2)*c);%计算理论误码率
end
disp(sym);
disp(sym_rate);
semilogy(snrpBit,sym_rate,'r*');%仿真误码率曲线
hold on;
semilogy(snrpBit,theo_sym_rate,'b-');%理论误码率曲线
%text(3,10^-2,'M=2');
%text(4,10^-2,'M=4');
%text(6,10^-2,'M=8');
%text(8,10^-2,'M=16');
%text(10.5,10^-2,'M=32');
%text(12.5,10^-2,'M=64');
title('QAM误码率性能');
xlabel('SNR');
ylabel('误码率');
legend('仿真误码率','理论误码率');
axis([0 15 1e-4 1]);%坐标范围
7.2 M-QAM在Rayleigh信道下误码率性能源程序
(1)主程序
% simulation for M-QAM transmission
M=input('Enter the order of M-QAM, M(2^k) =');%输⼊
EbNodB = [0:2:20];% 设置Eb/N0为0-20dB,间隔为2.
EbNolin = 10.^(EbNodB/10) ;%转换为线性刻度
Pe_sim=[];%设置函数,清零
for i = 1:11,
Pe_sim=[Pe_sim QAM_rayleigh(M, EbNodB(i))];%依次带⼊EBNO值计算出瑞利信道下相对应误码率
end
% 画瑞利衰落信道下误码率曲线
semilogy(EbNodB,Pe_sim,'r*')
hold on
% 计算理论误码率
else
a=4/log2(M);
end
b=3*log2(M)/(M-1);
Pe=[];
for i = 1:11,
Pe= [Pe 0.5*a*(1-sqrt(0.5*b*EbNolin(i)/(1+0.5*b*EbNolin(i))))];
end % 计算⽅式出处: Wireless Communication, A. Goldsmith %绘制理论误码率曲线
semilogy(EbNodB,Pe)
xlabel('snr, EbNo(dB)');
ylabel('Bit error probability, Pe');
title('Comparison between theoretical & simulated results of BER of M-QAM'); legend('simulated result','theoretical results'); hold off
(2)⼦函数:
function[ber]= QAM_rayleigh(M, EbNodB)
% 数据送⼊,M-QAM 调制
k=log2(M);%转换为多路并⾏
EbNo=10^(EbNodB/10);%转换为线性刻度
N=k*10^4;%信源数
x=0+(1-0)*round(rand(1,N))';%产⽣随机数,转置,去整,输⼊序列
h=modem.qammod(M);%调制⽅式
h.inputtype='bit';%输⼊为⼆进制
y=modulate(h,x);%调制
% 加⼊信道
m=mean((abs(y)).^2)/k;%已调信号的平均功率
sigma=sqrt(m/(2*EbNo));%噪声(标准差)
w=sigma*(randn(N/k,1)+1i*randn(N/k,1));%噪声
H=(1/sqrt(2))*(randn(N/k,1)+1i*randn(N/k,1));%瑞利信道
r=H.*y+w;%输出=信道*输⼊+⾼斯噪声
% M-QAM 解调及误码率
r=r./H;%信道均衡
h_n=modem.qamdemod(M);%解调⽅式
h_n.outputtype='bit';%输出为⼆进制
(4) QAM调制⽅式,信道为⾼斯信道的系统误码率分析图:
QAM调制⽅式,信道为瑞利衰落信道的系统误码率分析图:
M=4和8
M=16
(5)分析:⾸先对QAM 调制解调系统基本原理进⾏了较为深⼊地理解与分析,并得到了M 进制QAM 的误码率公式。

其次,对⾼斯信道和瑞丽衰落信道进⾏了简介与分析,最后根据QAM 在这两类信道下的误码率性能编写了程序并通过仿真得到了误码率曲线。

从误码率曲线图中可以看出,仿真误码率曲线与理论误码率曲线拟合情况良好,说明本⽂采⽤⽅法正确。

4、MPSK 调制在⾼斯信道和Rayleigh 衰落信道中的平均误码率性能研究
(1)基本原理
⼀个MPSK 信号码元可以表⽰为 )cos()(0k k t A t S θω+= M k ,,2,1 =
式中:A 为常数;k θ为⼀组间隔均匀的受调制相位,其值取决于基带码元的取值。

所以它可以写为
)1(2-=
k M k π
θ M k ,,2,1 =
通常M 取2的某次幂: k
M 2= 为正整数k
在后⾯的分析中,为了不失⼀般性,可令其中的A=1,然后将MPSK 信号码元表⽰为
t b t a t t s o k k k k ωωθωsin cos )cos()(00-=+=
式中:
k k k k b a θθsin ,cos ==。

上式表明,MPSK 信号可以看作是由正弦和余弦两个正交分量合成的信号。

它们
的振幅分别是k a 和k b ,并且
12
2=+k k b a 。

这就是说,MPSK 信号码元可以看做是两
个特定的MASK信号之和。

(2)程序代码
function [pb,ps]=cm_sm32(snr_in_dB)
% [pb,ps]=cm_sm32(snr_in_dB)
% CM_SM3发现误码和误符号的概率
% snr_in_dB的给定值,信号以dB为单位的信噪⽐。

counter=0;
numofsymbolerror=0;
numofbiterror=0;
while (numofbiterror<100) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N=10000;
E=1; % 每个符号的能量
snr=10^(snr_in_dB/10); % 信噪⽐
sgma=sqrt(E/snr)/2; % 噪声⽅差
s00=[1 0]; s01=[0 1]; s11=[-1 0]; s10=[0 -1]; % 信号映射
% generation of the data source
for i=1:N,
temp=rand; % 0和1之间均匀分布的随机变量 if (temp<0.25), % 概率⼩于1/4时,源极输出为“00”dsource1(i)=0; dsource2(i)=0;
elseif (temp<0.5), % 概率⼩于1/2时,源极输出为"01"
dsource1(i)=0; dsource2(i)=1;
elseif (temp<0.75), % 概率⼩于3/4时,源极输出为"10"
dsource1(i)=1; dsource2(i)=0;
else % 其余,源极输出为"11",与星座图对应 dsource1(i)=1; dsource2(i)=1;
end;
end;
% 检测和计算误差的概率
for i=1:N,
% 在检测所接收的信号,对于第i个符号,⽅法是:
n=sgma*randn(1,2); % 正态分布,⽅差
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;
else
r=s11+n;
end;
% 相关指标如下计算
c00=dot(r,s00); c01=dot(r,s01); c10=dot(r,s10); c11=dot(r,s11); % 在第i个符号的判定为下⼀次
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;
else decis1=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;
counter=counter+1;
end
ps=numofsymbolerror/(N*counter); % 误信率
pb=numofbiterror/(2*N*counter); % 误码率function [pb_rayleigh,ps_rayleigh]=rayleigh(snr_in_dB)
% [pb_rayleigh,ps_rayleigh]=rayleigh(snr_in_dB)
% CM_SM3发现误码和误符号的概率
% snr_in_dB的给定值,信号以dB为单位的信噪⽐。

counter=0;
numofsymbolerror=0;
numofbiterror=0;
while (numofbiterror<100) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N=10000;
E=1; % 每个符号的能量
snr=10^(snr_in_dB/10); % 信噪⽐
sgma=sqrt(E/snr)/2; % 噪声⽅差
s00=[1 0]; s01=[0 1]; s11=[-1 0]; s10=[0 -1]; % 信号映射
% generation of the data source
for i=1:N,
temp=rand; % 0和1之间均匀分布的随机变量 if (temp<0.25), % 概率⼩于1/4时,源极输出为"00" dsource1(i)=0; dsource2(i)=0;
elseif (temp<0.5), % 概率⼩于1/2时,源极输出为"01"
dsource1(i)=0; dsource2(i)=1;
elseif (temp<0.75), % 概率⼩于3/4时,源极输出为"10"
dsource1(i)=1; dsource2(i)=0;
else % 否则为"11"
dsource1(i)=1; dsource2(i)=1;
end;
end;
% 检测和计算误差的概率
for i=1:N,
% the received signal at the detection, for the ith symbol,is: m=raylrnd(0.7);
n=sgma*randn(1,2); % 正态分布,⽅差
if ((dsource1(i)==0) & (dsource2(i)==0)),
r=m*s00+n;
elseif ((dsource1(i)==0) & (dsource2(i)==1)),
r=m*s01+n;
elseif ((dsource1(i)==1) & (dsource2(i)==0)),
r=m*s10+n;
else
r=m*s11+n;
end;
(3)把⾃⼰编写的function函数和主函数放在同⼀个⽂件夹diaoyonghanshu中,如下图:
打开Matlab,在current folder中打开⽂件夹diaoyonghanshu添加两个function函数,如下图:
然后在Matlab中运⾏QPSK_System_BER_Simulation.m,得到⾼斯信道和Rayleigh衰落信道波形图。

(4)仿真结果
⾼斯信道和瑞利衰落信道的误码率对⽐,由图可知瑞利衰落信道下的误码率⽐⾼斯信道下的误码率⾼。

1.随着信噪⽐的增⼤,⾼斯信道和瑞利衰落信道的误码率均降低。

2.相同信噪⽐时,⾼斯信道和瑞利衰落信道的实际误码率⽐理论情况下的误码率⾼。

五、实验⼼得
通过本次课程设计,感觉有很多收获。

在做的过程中遇到了很多问题,像对问题不知道应该从哪⾥⼊⼿分析、对MATLAB编
程及软件使⽤不熟练等等,最后通过查资料及组员之间相互沟通解决了这些问题。

在这个⼯程中,组员的分析解决问题的能⼒及对MATLAB的掌握都有了很⼤提⾼。

最后还要感谢本学期⽼师对移动通信课程的讲授,使我们获得了重要的专业知识同时对通信专业有了更深刻
的认识,为以后的深造及⼯作打下了良好的基础。

相关文档
最新文档