1.1信道对比 由于通信系统中存在两种信道模型,我们需要仿真出这些模型。
1.1.1加性高斯白噪声信道(AWGN channl)
加性高斯白噪声AWGN(AdditiveWhiteGaussionNoise)是最基本的噪声与干扰模型。它的幅度分布服从高斯分布,而功率谱密度是均匀分布的,它意味着除了加性高斯白噪声外,r(t)与s(t)没有任何失真。即H(f)失真的。
1.1.2瑞利衰落信道(Rayleigh fading channel)
瑞利衰落信道(Rayleigh fading channel)是一种无线电信号传播环境的统计模型。这种模型假设信号通过无线信道之后,其信号幅度是随机的,即“衰落”,并且其包络服从瑞利分布。这一信道模型能够描述由电离层和对流层反射的短波信道,以及建筑物密集的城市环境。瑞利衰落只适用于从发射机到接收机不存在直射信号(LoS,Line of Sight)的情况,否则应使用莱斯衰落信道作为信道模型。
1.2多用户干扰设置在传统的CDMA接收机中各个用户的接收是相互独立进行的。在多径衰落环境下。由于各个用户之间所用的扩频码通常难以保持正交。因而造成多个用户之间的相互干扰并限制系统容量的提高。这就需要使用多用户检测技术。多用户检测的基本思想就是把所有用户的信号都当作有用信号而不是干扰信号来处理。这样就可以充分利用各用户信号的用户码、幅度、定时和延迟等信息,从而大幅度地降低多径多址干扰。如何把多用户干扰报销算法的复杂度降低到可接受的程度则是多用户检测技术能否实用的关键。
多用户检测的主要优点:它是消除或减弱CDMA中多址干扰的有效手段,也是消除或减弱CDMA中多径衰落干扰的有效手段,并且能够消除或减弱CDMA中远近效应,简化CDMA系统中的功率控制,降低功率控制的精度要求,弥补CDMA中由于正交扩频互相关性不理想所带来的一系列消极影响,改善CDMA系统性能,提高系统容量、扩大小区覆盖范围。
多用户检测的主要缺点:增加CDMA系统的设备复杂度,增加CDMA系统的处理时延,特别是对于采用自适应算法,以及对于扩频码较长的系统更是如此。多用户检测一般需要知道很多附加信息,如所有用户的扩频码、衰落信道的主要统计参量:幅度、相位、延时等,这对于时变信道,需要不停地对每个用户信道进行实时估计才能实现,一般而言是非常困难的,而且参量估计的精度将直接影响多用户检测器的性能好坏。
这里,为了实验的方便,我们只设置一个干扰用户。
2.基于matlab的CDMA仿真2.1AWGN信道中BPSK调制系统2.1.1
仿真概述及原理在数字领域进行的最多的仿真任务是进行调制解调器的误比特率测试,在相同的条件下进行比较的话,接收器的误比特率性能是一个十分重要的指标。误比特率的测试需要一个发送器、一个接收器和一条信道。首先需要产生一个长的随机比特序列作为发送器的输入,发送器将这些比特调制成某种形式的信号以便传送到仿真信道,我们在传输信道上加上一定的可调制噪声,这些噪声信号会变成接收器的输入,接收器解调信号然后恢复比特序列,最后比较接收到的比特和传送的比特并计算错误。
误比特率性能常能描述成二维图像。纵坐标是归一化的信噪比,即每个比特的能量除以噪声的单边功率谱密度,单位为分贝。横坐标为误比特率,没有量纲。
2.1.2仿真过程及计算1.运行发生器:通过发送器将伪随机序列变成数字化的调制信号。
2.设定信噪比:假定SNR为m dB,则Eb/N0=10,用MATLAB假设SNR单位为分贝。
3.确定Eb
4.计算N0
5.计算噪声的方差σn
6.产生噪声:因为噪声具有零均值,所以其功率和方差相等。我们产生一个和信号长度相同的噪声向量,且该向量方差为σn。
7.加上噪声,运行接收器
8.确定时间延迟
9.产生误差向量
10.统计错误比特:误差向量“err”中的每一个非零元素对应着一个错误的比特。
11.最后计算误比特率BER:每运行一次误比特率仿真,就需要传输和接收固定数量的比特,然后确定接收到的比特中有多少错误的。使用MATLAB计算BER:ber=te/length(tx)。
2.1.3
实验程序做1000次试验,每次选取100个二进制信号,扩频增益Q为15,调用pn序列形成函数pn_m.m产生15为pn序列,然后调用kron函数求得信号与pn序列的乘积,从而求得发送扩频信号s,然后产生噪声,进而获得接收信号yy,接着将yy的每15个点组成一个向量ym并存入矩阵Y_M中,这样,Y_M中每一行就是接收到的加噪后的扩频信号,然后将每一行乘以pn序列(即扩频码)进行解扩,得到未扩频的信号。最后计算误比特率,并和理论值进行比较。
noise=randn(1,Q*N_number)+j.*randn(1,Q*N_number);
s10=round(rand(1,N_number));
%message
ss=s10*2-1;
%0-->-1, 1-->1
pn=pn_m(15,1)./sqrt(15);
%pn:1by 15 matrix
%pn=(pn01.*2-1)./sqrt(Q);
s=kron(ss,pn);
%s:1by 1500 matrix
ym=yy(1,(k-1)*Q+1:k*Q);
%Getyy's every 15 points
Y_M=[Y_M;ym];
%Y_M:100by 15 matrix
ys=Y_M*pn.';
%ys:100by 1 matrix
Error_snr=sum(abs(s10-s_e10));
Error_v=[Error_v,Error_snr./N_number];
BER_THEROY=Qfunct(sqrt(2.*snr));
BER_T=[BER_T,BER_THEROY];
semilogy(i,BER,'-r',i,BER_T ,'*g'); legend('Simulated', 'Theoretic');
|