流程图:
2 / 17
%本程序模拟 2 用户 CDMA 系统,信道为加性高斯信道,可以正确解扩解调,
%信噪比(dB)约为 5 的时候,误码率基本在 0.1 以内
%信噪比(dB)大于 9 的时候,基本不会出现误码了
%本程序中时间单位是微秒
%频率单位为 MHz
%码元速率单位是 Mb/s
global dt df t f N
close all
N=2^14; %采样点数
L=64; %每码元的采样点数
M=N/L; %码元数
Rb=2;
Ts=0.5; %码元宽度是 0.5us
dt=Ts/L;
df=1/(N*dt); %MHz
T=N*dt; %截短时间
Bs=N*df/2; %系统带宽
w0=28*pi;
Eb_N0=input('请输入信噪比 dB(5 以上基本无误码)');
t=[-T/2+dt/2:dt:T/2]; %时域横坐标
f=[-Bs+df/2:df:Bs]; %频域横坐标
figure(1)
set(1,'Position',[10,600,400,150])
%设定图 1 的窗口位置及大小
figure(2)
set(2,'Position',[10,400,400,150])
%设定图 2 的窗口位置及大小
figure(3)
set(3,'Position',[10,200,400,150])
%设定图 3 的窗口位置及大小
figure(4)
set(4,'Position',[10,0,400,150])
%设定图 4 的窗口位置及大小
figure(5)
3 / 17
set(5,'Position',[430,600,400,150])
%设定图 1 的窗口位置及大小
figure(6)
set(6,'Position',[430,400,400,150])
%设定图 2 的窗口位置及大小
figure(7)
set(7,'Position',[430,200,400,150])
%设定图 3 的窗口位置及大小
figure(8)
set(8,'Position',[430,0,400,150])
%设定图 4 的窗口位置及大小
figure(9)
set(9,'Position',[850,600,400,150])
%设定图 3 的窗口位置及大小
figure(10)
set(10,'Position',[850,400,400,150])
%设定图 4 的窗口位置及大小
figure(11)
set(11,'Position',[850,200,400,150])
%设定图 3 的窗口位置及大小
figure(12)
set(12,'Position',[850,0,400,150])
%设定图 4 的窗口位置及大小
m1=[1 1 1 -1 -1 1 -1 1 1 -1 1 -1 1 -1 -1]; %用户一的 m 序列
m2=[1 1 -1 -1 1 -1 1 1 1 -1 -1 1 -1 -1 1]; %用户二的 m 序列
%%%%%%%%%%%%%%%%%%%%%%%%%% 生成噪声,信噪比为 11
%Eb_N0=11 %Eb/N0 in dB
eb_n0=10^(Eb_N0/10);
Eb=1;
n0=Eb/eb_n0; %信道的噪声谱密度
sita=n0*Bs; %信道中噪声功率
n_ch=sqrt(sita)*randn(size(t)); %信道噪声
NOISE=abs(t2f(n_ch));
4 / 17
%%%%%%%%%%%%%%%%%%%%%%%%%%%产生用户 1 的数字基带信号供传输
n=1; %每次有偶数个 1
while rem(n,2)~=0
a=round(rand(1,M));
n=length(find(a==1));
end
aaa=a; %保存原序列(0、1),供最后比较误码率使用
aa=find(a==0); %将(0、1)序列变换为(+1、-1)序列,以方便扩频使用
a(aa)=-ones(size(aa));
nrz1=zeros(L,M); %将序列扩展成为时域,方便做 F 变换和时域显示
for loop=1:L,nrz1(loop,:)=a; end
nrz1=reshape(nrz1,1,N);
%%%%%%%%%%%%%%%%%%%%%%%%%%%产生用户 2 的数字基带信号供传输
n=1; %每次有偶数个 1
while rem(n,2)~=0
b=round(rand(1,M));
n=length(find(b==1));
end
bbb=b;
bb=find(b==0); %bb 是 a 中奇序数 1 的位置
b(bb)=-ones(size(bb)); %所有位于 cc 的 0 变成-1
nrz2=zeros(L,M);
for loop=1:L
nrz2(loop,:)=b;
end
nrz2=reshape(nrz2,1,N);
%%%%%%%%%%%%%%%%%%%%%%生成扩频要用的 M 序列
mx1=zeros(1,16384);
for i=1:64:16384
mx1(i:i+4)=m1(1);
mx1(i+5:i+8)=m1(2);
mx1(i+9:i+12)=m1(3);
mx1(i+13:i+16)=m1(4);
mx1(i+17:i+20)=m1(5);
mx1(i+21:i+24)=m1(6);
mx1(i+25:i+28)=m1(7);
mx1(i+29:i+32)=m1(8);
mx1(i+33:i+36)=m1(9);
mx1(i+37:i+40)=m1(10);
5 / 17
评论2