📄 jxg.m
字号:
%product received vector
function [p]=JXG(snr_in_dB)
Lc=31; %Lc is frame size 码长
snr=10^(snr_in_dB/10); %信噪比由dB形式转化 也有的写为snr=exp(snr_in_dB*log(10)/10)
sgma=1; % noise standard deviation is fixed 定义方差
Eb=sgma^2*snr; % signal level required to achieve the given
% signal to noise ratio
E_chip=Eb/Lc; % energy per chip 每个码片能量
A=[sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb),sqrt(Eb)];
% A为干扰用户的幅度,0-30,最多不要超过31,干扰强度为20dB,BPSK中 干扰强度=10*log(1/2*(Ak^2/E1)),E1为期望用户的能量
N=1000; % number of bits transmitted 发送的信息位,如果图效果不好可以改大
K=length(A); % number of users 用户数,即A的长度
% gold sequence for the duration of the bit is generated next
connections1=[1 0 1 0 0];
connections2=[1 1 1 0 1];
gold_seq=get_gold(connections1,connections2); %产生31x31的扩频码
user1code=(1/sqrt(Lc))*gold_seq(:,31); %定义了用户1的扩频码,1/sqrt(Lc)表示归一化,把用户的扩频码定义在第31列,可以减少干扰用户的影响
% The generation of the data, noise, interference, decoding process and error
% counting is performed all together in order to decrease the run time of
% the program. This is accomplished by avoiding very large sized vectors.
%算法赋初值
num_of_err=0; %错误码数先赋0
S=zeros(31,K+1); %定义扩频码矩阵
S(:,K+1)=user1code;
w=[A,sqrt(Eb)];
W=diag(w);
%从此位开始一直到最后一个end,是循环,作用是发送并检测,用接收与发送比较计算错误码个数
for i=1:N,
b=zeros(K+1,1); %定义发送端发送的信息列
y=zeros(K+1,1); %定义经过匹配滤波器组相关处理后的信息列
% generate the next data bit 产生新的数据位
temp=rand;
if (temp<0.5),
data=-1;
else
data=1;
end;
% the transmitted signal is
trans_sig=sqrt(Eb)*data*user1code; %与公式相比sqrt(Eb)相当于Ak data相当于bk user1code为sk sqrt(Eb)认为是期望用户,
% 与A中干扰用户幅度定义不同,为了突出最后图的效果
% AWGN with variance sgma^2
noise=sgma*randn(Lc,1); %产生一列31行的随机噪声,加性高斯白噪声 不是sgma^2是因为sgma本身为1(或许可以这么认为)
% interference user data is dat
% 产生K个干扰用户,dat是干扰用户数据,真正的用户为K+1个,期望用户直接定义为sqrt(Eb)
inter_sig=zeros(31,1);
for k=1:K,
temp=rand;
if (temp<0.5),
dat=-1;
else
dat=1;
end;
inter_sig=inter_sig+A(k)*dat*(1/sqrt(Lc))*gold_seq(:,k); %干扰用户数据的扩频码放在1到第K列,期望用户的在第31列
S(:,k)=(1/sqrt(Lc))*gold_seq(:,k);
b(k)=dat;
end;
b(K+1)=data;
R=corrcoef(S); %扩频码的互相关矩阵
% received signal
rec_sig=trans_sig+noise+inter_sig; %接收到的数据是31x1位的
% making detect 开始检测
for k=1:K+1,
y(k)=rec_sig'*S(:,k); %求出经过匹配滤波器组相关处理后的信息列
end
% jiexiangguan
M=inv(R)*y;
dec=sign(M(K+1));
if (dec<=0),
bit=-1;
else
bit=1;
end;
if (bit~= data),
num_of_err=num_of_err+1;
end;
end; % 对应for i=1:N,
p=num_of_err/N;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -