MIMO发射接收技术与MATLAB实现
MIMO发射接收技术与MATLAB实现代码
// 接收分集简要MATLAB代码,可供大家参考
clc
clear
%% 初始化参数
bit_len = 1000;
M = 4;%调制阶数
Nt = 1;%发射天线数
Nr = 4;%接收天线数
num_fram = 1000;%测试的帧数
SNR = 0:5:30;
rx_bit =zeros(Nr,bit_len);
BER = zeros(num_fram,length(SNR),4);
for fran_num = 1:num_fram
%% 生成随机比特流
bit = randi([0 1],1,bit_len);
%% 进行QPSK调制
bit_mode = pskmod(bit,M,pi/4);
%% 生成瑞丽信道
H = randn(Nr,bit_len) + 1i*randn(Nr,bit_len);
for snr_index = 1:numel(SNR)
snr = SNR(snr_index);
%% 过瑞丽信道
for l = 1:Nr
rx_bit(l,:) = H(l,:).*bit_mode;
end
%% 过噪声
rx_bit_in_noise = awgn(rx_bit,snr,"measured");
%% 接收分集
for type = 1:4
rx_recive = 0;
switch type
case 1 %MRC
for i = 1:Nr
rx_recive = rx_recive + rx_bit_in_noise(i,:).*conj(H(i,:));
end
rx_recive = rx_recive/Nr;
case 2
for i = 1:Nr
rx_recive = rx_recive + rx_bit_in_noise(i,:).*exp(-1i*angle(H(i,:)));
end
rx_recive = rx_recive/Nr;
case 3
power = zeros(1,Nr);
for i = 1:Nr
power(i) = sum(abs(H(i,:).^2));
end
[~,index] = max(power);
rx_recive = rx_bit_in_noise(index,:).*conj(H(index,:));
case 4
power = zeros(1,Nr);
for i = 1:Nr
power(i) = sum(abs(H(i,:).^2));
end
[~,index] = sort(power,"descend");
H_est = H(index(1:Nr/2),:);
for i = 1:Nr/2
rx_recive = rx_recive + rx_bit_in_noise(index(i),:).*conj(H_est(i,:));
end
rx_recive = rx_recive/(Nr/2);
end
%% 解调
bit_demod = pskdemod(rx_recive,M,pi/4);
%% 比较误码率
[~,err] = biterr(bit,bit_demod);
%% 存在数组里面
BER(fran_num,snr_index,type) = err;
end
end
end
BER_mean=mean(BER,1);
figure
picture=semilogy(SNR,BER_mean(:,:,1),'g-o','LineWidth',1.5);
set(picture,'Color',[0 0.7 0]);
hold on
semilogy(SNR,BER_mean(:,:,2),'r-o','LineWidth',1.5);
hold on
semilogy(SNR,BER_mean(:,:,3),'b-o','LineWidth',1.5);
hold on
semilogy(SNR,BER_mean(:,:,4),'c-o','LineWidth',1.5);
hold on
xlabel('SNR')
ylabel('BER')
legend('MRC','EGC','SC','GSC')
title('Receive Diversity 1X4')
grid on
下一篇博客准备将发射分集以及不同天线发射与接收组合进行分析并设计MATLAB分析。一起走进通信世界!!!与大家共同进步。