clc; % 清空命令窗口
clear; % 清除工作区变量
close all; % 关闭所有图形窗口
warning off; % 关闭警告
addpath(genpath(pwd)); % 添加当前目录及其子目录到 MATLAB 搜索路径
rng('default') % 使用默认随机数种子
Nt =4;% 发射天线数量
K = 2; % 用户数量
Nri = 2;% 接收天线数量
S = 2;% 每用户流的数量
Tc = 200;% 信道使用的符号数量
sigma2=1;% 噪声方差
SNRdbs=-10:3:30;% 信噪比(dB)范围
sum_rate1=zeros(1,length(SNRdbs));
sum_rate2=zeros(1,length(SNRdbs));
sum_rate3=zeros(1,length(SNRdbs));
sum_rate4=zeros(1,length(SNRdbs));
sum_rate5=zeros(1,length(SNRdbs));
sum_rate6=zeros(1,length(SNRdbs));
BER1=zeros(1,length(SNRdbs));
BER2=zeros(1,length(SNRdbs));
BER3=zeros(1,length(SNRdbs));
BER4=zeros(1,length(SNRdbs));
BER5=zeros(1,length(SNRdbs));
BER6=zeros(1,length(SNRdbs));
for i_SNR=1:length(SNRdbs)
SNR=10^(SNRdbs(1,i_SNR)/10);% 将dB转换为线性信噪比
P=sigma2*SNR;% 发射功率
count1=0;% 存储误码数
count2=0;% 存储信道容量
count3=0;
count4=0;
count5=0;
count6=0;
capacity1=0;
capacity2=0;
capacity3=0;
capacity4=0;
capacity5=0;
capacity6=0;
loop_num=400; % 循环次数
for i_loop=1:loop_num
q=rand(K*S,Tc)>=0.5;
s=QPSK_mapper(q,Tc,S,K);
H_real=randn(K*Nri,Nt);
H_imag=randn(K*Nri,Nt);
H=(1/sqrt(2))*complex(H_real,H_imag);
n_real=sqrt(sigma2/2)*randn(K*Nri,Tc/2);
n_imag=sqrt(sigma2/2)*randn(K*Nri,Tc/2);
n=complex(n_real,n_imag);
%sv % SVD 预处理
[W1,M1]=svdprecoding(H,K,S,P);
[U,D,V]=svd(H);
p1 = ones(1,K*S);
% 计算误码数和信道容量
[count_temp] = receiver(H,Nt,S,K,Tc,P,n,W1,M1,s,q);
count1=count1+count_temp;
G=M1*H*W1;
capacity1=capacity1+log2(det(eye(K*S,K*S)+P/(sigma2*Nt)*G*G'));
% BD处理
[W2,D2 M2] = BD2(Nt,Nri,S,K,H,P);
p2 = ones(1,K*S);
[count_temp] = receiver(H,Nt,S,K,Tc,P,n,W2,M2,s,q);
count2=count2+count_temp;
capacity2=capacity2+sumrate(H,W2,M2,K,S,Nri,Nt,sigma2,P);
%ZF处理
[W3]=ZF(H,P,K,S);
[count_temp] = receiver(H,Nt,S,K,Tc,P,n,W3,eye(K*Nri),s,q);
count3=count3+count_temp;
capacity3=capacity3+sumrate(H,W3,eye(K*Nri),K,S,Nri,Nt,sigma2,P);
%MF处理
[W4]=MF(H,P,K,S);
[count_temp] = receiver(H,Nt,S,K,Tc,P,n,W4,eye(K*Nri),s,q);
count4=count4+count_temp;
capacity4=capacity4+sumrate(H,W4,eye(K*Nri),K,S,Nri,Nt,sigma2,P);
%SLNR处理
%[W5] = SLNR(Nt,Nri,S,K,H,sigma2,P);
[W5]=SLNR2(H,sigma2,P,K,Nri,S,Nt);
[count_temp] = receiver(H,Nt,S,K,Tc,P,n,W5,eye(K*Nri),s,q);
count5=count5+count_temp;
capacity5=capacity5+sumrate(H,W5,eye(K*Nri),K,S,Nri,Nt,sigma2,P);
%MMSE处理
[W6,M6]=MMSE(H,sigma2,P,K,Nri,S,Nt);
[count_temp] = receiver(H,Nt,S,K,Tc,P,n,W6,M6,s,q);
count6=count6+count_temp;
capacity6=capacity6+sumrate(H,W6,M6,K,S,Nri,Nt,sigma2,P);
end
BER1(1,i_SNR)=count1/(loop_num*K*S*Tc);
BER2(1,i_SNR)=count2/(loop_num*K*S*Tc);
BER3(1,i_SNR)=count3/(loop_num*K*S*Tc);
BER4(1,i_SNR)=count4/(loop_num*K*S*Tc);
BER5(1,i_SNR)=count5/(loop_num*K*S*Tc);
BER6(1,i_SNR)=count6/(loop_num*K*S*Tc);
sum_rate1(1,i_SNR)=capacity1/loop_num/K;
sum_rate2(1,i_SNR)=capacity2/loop_num/K;
sum_rate3(1,i_SNR)=capacity3/loop_num/K;
sum_rate4(1,i_SNR)=capacity4/loop_num/K;
sum_rate5(1,i_SNR)=capacity5/loop_num/K;
sum_rate6(1,i_SNR)=capacity6/loop_num/K;
end
figure(1)
semilogy(SNRdbs,BER1(1,:),'b-o');
hold on;
semilogy(SNRdbs,BER2(1,:),'r-<');
hold on;
semilogy(SNRdbs,BER3(1,:),'c-p');
hold on;
semilogy(SNRdbs,BER4(1,:),'k-s');
hold on;
semilogy(SNRdbs,BER5(1,:),'y-*');
grid on;
semilogy(SNRdbs,BER6(1,:),'g-o');
grid on;
legend('SVD','BD','ZF','MF','SLNR','MMSE');
xlabel('SNR (dB)');
ylabel('BER');
hold on;
title('SNR=10dB时2个2天线用户MIMO系统误码率随Nt变化');
figure(2)
plot(SNRdbs,sum_rate1(1,:),'b-o');
hold on;
plot(SNRdbs,sum_rate2(1,:),'r-<');
hold on;
plot(SNRdbs,sum_rate3(1,:),'c-p');
hold on;
plot(SNRdbs,sum_rate4(1,:),'k-s');
hold on;
plot(SNRdbs,sum_rate5(1,:),'y-*');
grid on;
plot(SNRdbs,sum_rate6(1,:),'g-o');
grid on;
legend('SVD','BD','ZF','MF','SLNR','MMSE');
xlabel('SNR (dB)');
ylabel('合速率(bit/s/用户)');
hold on;
title('SNR=10dB时2个2天线用户MIMO系统合速率随Nt变化');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2022A,包含仿真操作录像,操作录像使用windows media player播放。 2.领域:线性预编码 3.内容:svd,BD,ZF,MF,SLNR,MMSE线性预编码性能 [W2,D2 M2] = BD2(Nt,Nri,S,K,H,P); p2 = ones(1,K*S); [count_temp] = receiver(H,Nt,S,K,Tc,P,n,W2,M2,s,q); count2=count2+count_temp; capacity2=capacity2+sumrate(H,W2,M2,K,S,Nri,Nt,sigma2,P); 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源详情
资源评论
资源推荐
收起资源包目录
基于matlab的svd,BD,ZF,MF,SLNR,MMSE线性预编码性能对比仿真.rar (39个子文件)
2.jpg 42KB
1.jpg 60KB
仿真操作录像0015.avi 101.45MB
3.jpg 54KB
code
main1.m 5KB
MF.m 161B
SLNR2.m 815B
sumrate.m 2KB
SLNR.m 1003B
receiver.m 752B
BD2.m 1KB
ZF.m 148B
main2.m 5KB
MMSE.m 1KB
waterfilling.m 594B
BD.m 958B
svdprecoding.m 276B
QPSK_mapper.m 564B
fig
sum-rate10.fig 10KB
SVD_BD_BER_SNR.fig 8KB
sum-rate7.fig 12KB
BER3.fig 10KB
sum-rate4.fig 9KB
BER1.fig 10KB
sum-rate3.fig 9KB
sum-rate1.fig 9KB
sum-rate5.fig 10KB
BD_BER_SNR.fig 3KB
SVD_BD_BER3.fig 8KB
sum-rate8.fig 10KB
sum-rate9.fig 11KB
SNR=5dB时4个2天线用户MIMO系统合速率随Nt变化.fig 13KB
SVD_BD_rate_SNR.fig 8KB
SVD_BD_BER2.fig 8KB
SNR=5dB时4个2天线用户MIMO系统误码率随Nt变化.fig 11KB
sum-rate6.fig 13KB
sum-rate2.fig 10KB
BER2.fig 10KB
4.jpg 46KB
共 39 条
- 1
fpga和matlab
- 粉丝: 17w+
- 资源: 2627
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring MVC和Hibernate框架的学校管理系统.zip
- (源码)基于TensorFlow 2.3的高光谱水果糖度分析系统.zip
- (源码)基于Python框架库的知识库管理系统.zip
- (源码)基于C++的日志管理系统.zip
- (源码)基于Arduino和OpenFrameworks的植物音乐感应系统.zip
- (源码)基于Spring Boot和Spring Security的博客管理系统.zip
- (源码)基于ODBC和C语言的数据库管理系统.zip
- (源码)基于Spring Boot和Vue的Jshop商城系统.zip
- (源码)基于C++的学生信息管理系统.zip
- (源码)基于Arduino的实时心电图监测系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论19