clc;
clear;
close all;
warning off;
%定义随机数种子
rand('twister',12345);
randn('state',98765);
T_num = 2;%发送天线
R_num = 2;%接收天线
EbNo_db = 0:4:16;
Orders = 2;
numSym = T_num;%符号数
%定义三种方法的误码率初始值
bits = de2bi(0:2^(Orders*T_num)-1, 'left-msb')';
b = zeros(T_num, Orders, length(bits));
for i = 1:length(bits)
b(:, :, i) = reshape(bits(:,i), Orders, T_num)';
end
dist = zeros(length(bits), 1);
[Error_ZF, Error_MMSE] = deal(zeros(1, length(EbNo_db)));
QPSK_Modulation = modem.pskmod('M', 2^Orders, 'SymbolOrder', 'gray', 'InputType', 'bit');
QPSK_Demodulation = modem.pskdemod(QPSK_Modulation);
%开始循环
for ii = 1:length(EbNo_db)
ii
NError_ZF = 0;
NError_MMSE = 0;
SS = 0;
while ( ((NError_ZF < 200) || (NError_MMSE < 200)) && (SS < 1e6))
[EbNo_db(ii),NError_ZF,NError_MMSE,SS]
%随机产生发送信号
messages = floor(Orders*rand(numSym,2));
%进行调制
messages_QPSK = modulate(QPSK_Modulation,messages);
Tx = reshape(messages_QPSK, T_num, numel(messages_QPSK)/T_num);
%产生MIMO信道
H_mimo = (randn(R_num, T_num) + sqrt(-1)*randn(R_num, T_num))/sqrt(2);
%计算SNR值
snr = EbNo_db(ii) + 10*log10(Orders);
%通过噪声
r = awgn(H_mimo*Tx, snr);
r2 = r;
%进行信道估计
H_mimo2 = H_mimo;
%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡
%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡%破0均衡
E_zf = zeros(Orders,numSym);
k = zeros(T_num,1);
G = pinv(H_mimo2);
[val,k0] = min(sum(abs(G).^2,2));
for n = 1:T_num
k(n) = k0;
w = G(k(n),:);
y = w * r;
E_zf(:, k(n):T_num:end) = reshape(demodulate(QPSK_Demodulation, y), Orders, numSym/T_num);
z = modulate(QPSK_Modulation, demodulate(QPSK_Demodulation, y));
r = r - H_mimo2(:, k(n))*z;
H_mimo2(:, k(n)) = zeros(R_num, 1);
G = pinv(H_mimo2);
for aa = 1:n
G(k(aa),:) = inf;
end
[val,k0] = min(sum(abs(G).^2,2));
end
%MMSE均衡%MMSE均衡%MMSE均衡%MMSE均衡%MMSE均衡%MMSE均衡
%MMSE均衡%MMSE均衡%MMSE均衡%MMSE均衡%MMSE均衡%MMSE均衡
H_mimo2 = H_mimo;
r = r2;
E_mmse = zeros(Orders, numSym);
k = zeros(T_num, 1);
G = inv(H_mimo2'*H_mimo2 + T_num/(10^(0.1*snr))*eye(T_num)) * H_mimo2';
[val, k0] = min(sum(abs(G).^2,2));
for n = 1:T_num
k(n) = k0;
w = G(k(n),:);
y = w * r;
E_mmse(:, k(n):T_num:end) = reshape(demodulate(QPSK_Demodulation, y), Orders, numSym/T_num);
z = modulate(QPSK_Modulation, demodulate(QPSK_Demodulation, y));
r = r - H_mimo2(:, k(n))*z;
H_mimo2(:, k(n)) = zeros(R_num, 1);
G = inv(H_mimo2'*H_mimo2 + T_num/(10^(0.1*snr))*eye(T_num)) * H_mimo2';
for aa = 1:n
G(k(aa), :) = inf;
end
[val, k0] = min(sum(abs(G).^2,2));
end
NError_ZF = NError_ZF + biterr(messages, E_zf);
NError_MMSE = NError_MMSE + biterr(messages, E_mmse);
SS = SS + length(messages(:));
end
%计算2种均衡方式的误码率值
Error_ZF(ii) = NError_ZF./SS;
Error_MMSE(ii) = NError_MMSE./SS;
end
semilogy(EbNo_db,Error_ZF,'r-*', EbNo_db,Error_MMSE,'b-*');
xlabel('Eb/No');
ylabel('Ber');
legend('ZF','MMSE');
grid on
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2021a,包含仿真操作录像,操作录像使用windows media player播放。 2.领域:SVD和GMD非码本预编码,DFT和TxAA码本预编码 3.内容:分别对比SVD和GMD非码本的预编码以及DFT和TxAA码本预编码的MIMO系统matlab误码率仿真。 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源推荐
资源详情
资源评论






















收起资源包目录






















共 18 条
- 1
资源评论



fpga和matlab
- 粉丝: 12w+
- 资源: 2402
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
