clear all;
close all;
%% System parameter settings
par.squareLength = 2; %in kilometer
par.L = 64; % number of APs
par.K = 32; % user terminals (set not larger than MR!)
par.N = 1; % number of antennas per AP
par.mod = 'BPSK'; % modulation type: 'BPSK','QPSK','16QAM','64QAM'
par.nbrOfRealizations = 1000; % number of channel realizations per setup
par.nbrOfSetups = 1; % Number of Monte-Carlo setups, re-generate AP and UE locations per setup
par.SNRdB_list = 5:5:20; % list of SNR [dB] values to be simulated
par.tau_c = 200; % Length of coherence block
par.tau_p = 30;% Length of pilot sequences
% -- initialization: set up Gray-mapped constellation alphabet (according to IEEE 802.1switch (par.mod)
switch (par.mod)
case 'BPSK'
par.symbols = [ -1 1 ];
case 'QPSK'
par.symbols = [ -1-1i,-1+1i, ...
+1-1i,+1+1i ];
case '16QAM'
par.symbols = [ -3-3i,-3-1i,-3+3i,-3+1i, ...
-1-3i,-1-1i,-1+3i,-1+1i, ...
+3-3i,+3-1i,+3+3i,+3+1i, ...
+1-3i,+1-1i,+1+3i,+1+1i ];
case '64QAM'
par.symbols = [ -7-7i,-7-5i,-7-1i,-7-3i,-7+7i,-7+5i,-7+1i,-7+3i, ...
-5-7i,-5-5i,-5-1i,-5-3i,-5+7i,-5+5i,-5+1i,-5+3i, ...
-1-7i,-1-5i,-1-1i,-1-3i,-1+7i,-1+5i,-1+1i,-1+3i, ...
-3-7i,-3-5i,-3-1i,-3-3i,-3+7i,-3+5i,-3+1i,-3+3i, ...
+7-7i,+7-5i,+7-1i,+7-3i,+7+7i,+7+5i,+7+1i,+7+3i, ...
+5-7i,+5-5i,+5-1i,+5-3i,+5+7i,+5+5i,+5+1i,+5+3i, ...
+1-7i,+1-5i,+1-1i,+1-3i,+1+7i,+1+5i,+1+1i,+1+3i, ...
+3-7i,+3-5i,+3-1i,+3-3i,+3+7i,+3+5i,+3+1i,+3+3i ];
end
par.Es = mean(abs(par.symbols).^2);% extract average symbol energy
par.Q = log2(length(par.symbols)); % number of bits per symbol
par.bits = de2bi(0:length(par.symbols)-1,par.Q,'left-msb'); % precompute bit labels
%% start simulation
time_elapsed = 0; % track simulation time
bits = randi([0 1],par.K,par.Q,par.nbrOfSetups,par.nbrOfRealizations);% generate random bit stream
par.detector = {'CMMSE','CMMSE-SIC','CMF'};
% initialize result arrays (detector x SNR)
res.BER = zeros(length(par.detector),length(par.SNRdB_list)); % bit error rate
% Prepare to save simulation results
%% Go through all setups: 每次Setup下AP位置和用户位置随机生成,由此导致不同的AP-用户关联、导频分配、信道矩阵等
for n = 1:par.nbrOfSetups
%Generate one setup with UEs and APs at random locations
[BETTA,R,pilotIndex,D,APpositions,UEpositions,distances] = generateSetup(par.L,par.K,par.N,par.tau_p,par.squareLength);
figure(1)
scatter(real(APpositions),imag(APpositions),'s');hold on;
scatter(real(UEpositions),imag(UEpositions),'c');
grid on;
xlabel('X Location (km)');
ylabel('Y Location (km)');
legend('Access Point','User Point');
for snr=1:length(par.SNRdB_list) % SNR loop
tic;
fprintf('Number of Setup: %3d; SNR: %3d\n',n,par.SNRdB_list(snr));
SNR_dB = par.SNRdB_list(snr); % Current SNR point in dBs
SNR_lin = 10.^(SNR_dB/10); % Linear SNR
N0 = par.Es*sum(sum(BETTA*par.N))/(par.L*par.N)/SNR_lin;
[Hhat_tot,H_tot,B_tot,C_tot] = functionChannelEstimates(R,par.nbrOfRealizations,par.L,par.K,par.N,par.tau_p,pilotIndex,par.Es,N0,BETTA);
noise = sqrt(N0)*sqrt(0.5)*(randn(par.N*par.L,par.nbrOfRealizations)+1i*randn(par.N*par.L,par.nbrOfRealizations));
for t = 1 : par.nbrOfRealizations
fprintf('Number of Setup: %3d; SNR: %3d; nbrOfH: %3d\n',n,par.SNRdB_list(snr),t);
idx = bi2de(bits(:,:,n,t),'left-msb')+1; % generate transmit symbol
s = par.symbols(idx).';
H = reshape(H_tot(:,t,:),[par.N*par.L par.K]);
Hhat = reshape(Hhat_tot(:,t,:),[par.N*par.L par.K]);
y = H*s + noise(:,t);
for d=1:length(par.detector)
switch (par.detector{d}) % select algorithms
case 'CMMSE'
bithat = CMMSE_EstH(noise(:,t),par,H,Hhat,N0,s,C_tot);
res.BER(d,snr) = res.BER(d,snr) + sum(sum(bits(:,:,n,t)~=bithat))/(par.K*par.Q);
case 'CMMSE-SIC'
bithat = CMMSE_SIC_EstH(noise(:,t),par,H,Hhat,N0,s,C_tot);
res.BER(d,snr) = res.BER(d,snr) + sum(sum(bits(:,:,n,t)~=bithat))/(par.K*par.Q);
case 'CMF'
bithat = CMF_EstH(noise(:,t),par,H,Hhat,N0,s,C_tot);
res.BER(d,snr) = res.BER(d,snr) + sum(sum(bits(:,:,n,t)~=bithat))/(par.K*par.Q);
end
end
end
time=toc;
time_elapsed = time_elapsed + time;
fprintf('estimated remaining simulation time: %3.0f min.\n',time*((par.nbrOfSetups-n+1)*(length(par.SNRdB_list)-snr+1)/60));
end
end
% normalize results
res.BER = res.BER/(par.nbrOfRealizations*par.nbrOfSetups);
res.time_elapsed = time_elapsed;
% -- show results (generates fairly nice Matlab plot)
marker_style = {'bo-','rs-','mv-','kp-','bo-.','rs-.','mv-.','kp-.','bo:','rs:','mv:','kp:'};
figure(2)
for d=1:(length(par.detector))
if d==1
semilogy(par.SNRdB_list,res.BER(d,:),marker_style{d},'LineWidth',1)
hold on
else
semilogy(par.SNRdB_list,res.BER(d,:),marker_style{d},'LineWidth',1)
end
end
grid on
hold off;
xlabel('Average SNR per receive antenna [dB]');
ylabel('Bit error rate (BER)');
legend([par.detector],'location','southwest');
没有合适的资源?快使用搜索试试~ 我知道了~
基于Matlab实现cell-free Massive MIMO生成用户平均误码率随平均接收信噪比变化曲线(源码).rar
共7个文件
m:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 88 浏览量
2023-03-29
16:53:53
上传
评论 4
收藏 8KB RAR 举报
温馨提示
1、资源内容:基于Matlab实现cell-free Massive MIMO可仿真生成不同网络规模、不同集中式检测方法下的上行用户平均误码率随平均接收信噪比变化的曲线(源码).rar 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 3、更多仿真源码和数据集下载列表(自行寻找自己需要的):https://blog.csdn.net/m0_62143653?type=download 4、免责声明:本资源作为“参考资料”而不是“定制需求”不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于Matlab实现cell-free Massive MIMO生成用户平均误码率随平均接收信噪比变化曲线(源码).rar (7个子文件)
基于Matlab实现cell-free Massive MIMO生成用户平均误码率随平均接收信噪比变化曲线(源码)
functionChannelEstimates.m 2KB
functionRlocalscattering.m 3KB
CMMSE_EstH.m 655B
CMF_EstH.m 367B
generateSetup.m 4KB
CFmassiveMIMOdetectors.m 5KB
CMMSE_SIC_EstH.m 1024B
共 7 条
- 1
资源评论
- 张佳乐乐乐乐2023-05-12非常有用的资源,可以直接使用,对我很有用,果断支持!
- weixin_569968472023-04-24资源和描述一致,质量不错,解决了我的问题,感谢资源主。
- symys2023-07-29发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
Matlab仿真实验室
- 粉丝: 2w+
- 资源: 2179
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功