📄 kuopin.m
字号:
Lc=8;
%plot_EbNo = -20:1:5;
plot_EbNo = -10:1:10;
err=zeros(size(plot_EbNo));%误比特计数器,zeros产生0矩阵,size 查询矩阵的阶数
n=1;
%--------------walsh码-----------------------------%
w=hadamard(16); %返回16阶hadamard方阵,增益为16
usr1_code=w(1,:); %用户1
usr2_code=w(2,:); %用户2
usr3_code=w(3,:); %用户3
usr4_code=w(4,:); %用户4
for i=1:3
usr1_code = [usr1_code usr1_code];%8倍
usr2_code = [usr2_code usr2_code];
usr3_code = [usr3_code usr3_code];
usr4_code = [usr4_code usr4_code];
end
for i=1:16*8
w1_code((1+(i-1)*25):i*25)=usr1_code(i);
w2_code((1+(i-1)*25):i*25)=usr2_code(i);
w3_code((1+(i-1)*25):i*25)=usr3_code(i);
w4_code((1+(i-1)*25):i*25)=usr4_code(i);
end
%---------------------信息码--------------------------%
code_length=32; %信息码元个数8
N=1:code_length;
x1=randsrc(1, code_length, [-1 1]); %信息码1,randsrc 根据给定的数字表产生随机矩阵
x2=randsrc(1, code_length, [-1 1]); %信息码2
x3=randsrc(1, code_length, [-1 1]); %信息码3
x4=randsrc(1, code_length, [-1 1]); %信息码4
for i=1:code_length
s1((1+(i-1)*100):i*100)=x1(i);
s2((1+(i-1)*100):i*100)=x2(i);
s3((1+(i-1)*100):i*100)=x3(i);
s4((1+(i-1)*100):i*100)=x4(i);
end
t=1:code_length*100;
%----------------------------------------------------%
for EbNo=plot_EbNo; %db
Eb_No=EbNo;
Eb_No=10.^(Eb_No/10); %换回普通比值
No=1; %No为噪声,这里假定噪声功率的值
Eb=No*Eb_No; %1bit信号功率值
Tb=1;
Tc=Tb*Lc ;%1bit的码片数
E_chip=Eb/Tc; %每一码片的功率
NUM=1;
Q=NUM;
while Q
Q=Q-1;
%----------------------扩频---------------------------%
k1_code=sqrt(E_chip)*s1.*w1_code;%扩频,sqrt 平方根函数
k2_code=sqrt(E_chip)*s2.*w2_code;
k3_code=sqrt(E_chip)*s3.*w3_code;
k4_code=sqrt(E_chip)*s4.*w4_code;
%k_code=k1_code+k2_code+k3_code+k4_code;
t=1:25*16*8;
%----------------------调制--------------------------%
AI=1;
for i=1:16*16*25
cI(i)=AI*cos(2*pi*i/25);
end
for i=1:16*8
signal1((1+(i-1)*25):i*25)=k1_code((1+(i-1)*25):i*25).*cI((1+(i-1)*25):i*25);
signal2((1+(i-1)*25):i*25)=k2_code((1+(i-1)*25):i*25).*cI((1+(i-1)*25):i*25);
signal3((1+(i-1)*25):i*25)=k3_code((1+(i-1)*25):i*25).*cI((1+(i-1)*25):i*25);
signal4((1+(i-1)*25):i*25)=k4_code((1+(i-1)*25):i*25).*cI((1+(i-1)*25):i*25);
end
%-----------------------AWGN信道------------------------%
signal=signal1+signal2+signal3+signal4;
sig_nor=No*awgn(signal,0.03); %在信号signal中加入高斯白噪声。信噪比为0.03
%-------------------------解调--------------------------%
for i=1:16*8
signal_h((1+(i-1)*25):i*25)=sig_nor((1+(i-1)*25):i*25).*cI((1+(i-1)*25):i*25);
end
%--------------------------低通-------------------------%
wn=5/8; %截至频率wn=fn/(fs/2),这里的fn 为信息码(扩频码)的带宽5M
b=fir1(8,wn); %fir滤波器,系数为8
%H=freqz(b,1,16000); %计算数字滤波器在频域中的特性
signal_d=filter(b,1,signal_h); %一维数字滤波
%----------------------------解扩-----------------------%
jiek=signal_d.*w2_code;
%---------------------------判决-------------------------%
for i=1:32
jian((1+100*(i-1):100*i))=sign(sum(jiek(1+100*(i-1):100*i)));
end
for i=1:16*8
if s2((1+25*(i-1):25*i))~=jian((1+25*(i-1):25*i));
err(1,n)=err(1,n)+1;
end
end
end
n=n+1;
end
%---------------------波形图---------------------------%
figure (1);
plot(t,s2);
title('用户信息码');
axis([0,3200,-2,2])
figure (2);
plot(t,k2_code);
title('扩频波形');
axis([0,3200,-5,5])
figure (3);
plot(t,signal2);
title('调制波形');
axis([0,1000,-8,8])
figure (4);
plot(t,sig_nor);
title('信道波形');
axis([0,1000,-8,8])
figure (5);
plot(t,signal_h);
title('解调波形');
axis([0,1000,-8,8])
figure (6);
plot(t,jiek);
title('解扩波形');
axis([0,1000,-8,8])
figure (7);
plot(t,jian);
title('判决再生波形');
axis([0,3200,-2,2])
%---------------------误码率--------------------------%
Pe=err./(NUM*16*8*2)
figure (8);
plot(plot_EbNo,Pe)
%semilogy(plot_EbNo,Pe)
ylabel('误码率BER')
xlabel('Eb/No (dB)')
title('误比特率与信噪比例图');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -