📄 mf.m
字号:
%product received vector
function [p]=MF(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=0.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)];
% A为干扰用户的幅度,0-30,最多不要超过31,本例为14个干扰用户,,不开根号的话为能量
N=1000; % number of bits transmitted 发送的信息位,如果图效果不好可以改大
K=length(A); % number of users 用户数,即A的长度
%R is the inverse of the RLS algorithm's corralation matrix, lamda is
%forgetting factor
% 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
%从此位开始一直到最后一个end,是循环,作用是发送并检测,用接收与发送比较计算错误码个数
for i=1:N,
% 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^2*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列
end;
% received signal
rec_sig=trans_sig+noise+inter_sig; %接收到的数据是31x1位的
% making detect 开始检测
data_estimate=rec_sig'*user1code;
dec=sign(data_estimate);
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 + -