📄 smart_antenna1.m
字号:
% 信道干扰建模
clear; % 清除内存/command窗口/图形窗口
usernum=3; % 因为用户1、2信道近似相近,所以至少两个用户
framelength=100;
antnum=6;
snr=14;
NOISE_EN = 1; ZorM = 1; % 0:ZF=zero force 1:MMSE=最小均方误差
SE = 4; M_ary = 2^SE; modsch = 'qask'; Power=5; % power根据QPSK调制星座点求出
%random bits
b = randint(usernum,framelength,M_ary); % M_ary=2^SE=16 功能:产生4*16矩阵,每个元素均匀分布在0-15
%modulation 调制
sig = dmodce(b,1,1,modsch,M_ary); % modsch='qask' 矩形调制
%generate H 传输信道模型
rH = normrnd(0,1/sqrt(2),antnum,usernum); % 产生均值=0,方差(即:根号(每个元素-均值,然后平方和))=0.707,t*r阶的矩阵
iH = normrnd(0,1/sqrt(2),antnum,usernum);
H = rH + i*iH; % 均值=0,功率密度=1的i.i.d.矩阵模型
H(:,1)=H(:,2)+0.00000001+0.00000001*i; %两用户距离很近,信道近似相同,则
%根据snr计算噪声功率
snr_d = 10^(snr/10);
sigma=sqrt(Power/(2*snr_d));
%generate noise模型
nr = normrnd(0,sigma,antnum,framelength);
ni = normrnd(0,sigma,antnum,framelength);
noise=nr+i*ni;
% >>>>>>>>>>>>>>>>>>>>>>>>传输>>>>>>>>>>>>>>>>>>>>>>>>>>>>
resig = H * sig;
%添加噪声
if NOISE_EN == 1
resign = resig + usernum * noise; % n个用户的噪声之和
else
resign = resig;
NOISE_EN=0.00000000001; % 为了后面MMSE接收时用
end
% 计算W
if ZorM==0 % ZF接收
W = H'*inv(H*H');
else %MMSE
W = H'*inv(H*H'+eye(antnum)/snr_d*NOISE_EN);
end
%<<<<<<<<<<<<<<<<<<<<<<接收<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
esig = W * resign;
% 解调
rb = ddemodce(esig,1,1,modsch,M_ary);
%错误率
[errnum,errrat] = symerr(b,rb,'overall'); % 错误比特数和错误率:先将b/rb转化为二进制比特数
for i=1 : usernum
[errnum_r(i),errrat]=symerr(b(i,:),rb(i,:),'overall');
end
%绘图
i=linspace(1,framelength,framelength);
for jj=1:1:usernum
subplot(usernum,1,jj),plot(i,rb(jj,:),'.r',i,b(jj,:),':b',i,b(jj,:),'.b'),grid,legend(['第',num2str(jj),'用户错误比特:',num2str(errnum_r(jj))])
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -