clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
DATA_LENGTH = 10000;
figure;
%SISO
siso_snr_ser = [];
for snr=[0:2:40]
snr
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channel = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
qpsk_values_after_channel = qpsk_values.*channel;
noisy_qpsk_values = addRayleighNoise(qpsk_values_after_channel, snr);
demod_noisy_qpsk_symbols = zeros(length(noisy_qpsk_values), 1);
for i=[1:length(noisy_qpsk_values)]
demod_noisy_qpsk_symbols(i) = lsFindOfdmSymbol(noisy_qpsk_values(i)./channel(i), @(x)(x));
end
siso_snr_ser = [siso_snr_ser ; [snr, 1-(sum(demod_noisy_qpsk_symbols==qpsk_symbols)/length(qpsk_values))]];
end
semilogy(siso_snr_ser(:,1), siso_snr_ser(:,2),'-o', 'LineWidth', 1);
grid on;
hold on;
xlabel('SNR[db]');
ylabel('SER');
%MRC 1X2
mrc2_snr_ser = [];
for snr=[0:40]
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channel1 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel2 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
qpsk_values_after_channel1 = channel1.*qpsk_values;
qpsk_values_after_channel2 = channel2.*qpsk_values;
noisy_qpsk_values1 = addRayleighNoise(qpsk_values_after_channel1, snr);
noisy_qpsk_values2 = addRayleighNoise(qpsk_values_after_channel2, snr);
demod_noisy_qpsk_symbols = zeros(length(qpsk_values), 1);
for i=[1:length(qpsk_values)]
channel = [channel1(i) ; channel2(i)];
received_value = [noisy_qpsk_values1(i) ; noisy_qpsk_values2(i)];
ls_est_value = [channel'*received_value]/(channel'*channel);
demod_noisy_qpsk_symbols(i) = lsFindOfdmSymbol(ls_est_value, @(x)(x));
end
mrc2_snr_ser = [mrc2_snr_ser ; [snr, 1-(sum(demod_noisy_qpsk_symbols==qpsk_symbols)/length(qpsk_values))]];
end
semilogy(mrc2_snr_ser(:,1), mrc2_snr_ser(:,2),'-o', 'LineWidth', 1);
% MRC 1X4
mrc4_snr_ser = [];
for snr=[0:40]
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channel1 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel2 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel3 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel4 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
qpsk_values_after_channel1 = channel1.*qpsk_values;
qpsk_values_after_channel2 = channel2.*qpsk_values;
qpsk_values_after_channel3 = channel3.*qpsk_values;
qpsk_values_after_channel4 = channel4.*qpsk_values;
noisy_qpsk_values1 = addRayleighNoise(qpsk_values_after_channel1, snr);
noisy_qpsk_values2 = addRayleighNoise(qpsk_values_after_channel2, snr);
noisy_qpsk_values3 = addRayleighNoise(qpsk_values_after_channel3, snr);
noisy_qpsk_values4 = addRayleighNoise(qpsk_values_after_channel4, snr);
demod_noisy_qpsk_symbols = zeros(length(qpsk_values), 1);
for i=[1:length(qpsk_values)]
channel = [channel1(i); channel2(i); channel3(i); channel4(i)];
received_value = [noisy_qpsk_values1(i) ; noisy_qpsk_values2(i) ; ...
noisy_qpsk_values3(i); noisy_qpsk_values4(i)];
ls_est_value = [channel'*received_value]/(channel'*channel);
demod_noisy_qpsk_symbols(i) = lsFindOfdmSymbol(ls_est_value, @(x)(x));
end
mrc4_snr_ser = [mrc4_snr_ser ; [snr, 1-(sum(demod_noisy_qpsk_symbols==qpsk_symbols)/length(qpsk_values))]];
end
semilogy(mrc4_snr_ser(:,1), mrc4_snr_ser(:,2),'-o', 'LineWidth', 1);
% STC 2X1
stc21_snr_ser = [];
for snr=[0:2:40]
snr
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channel1 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel2 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
demod_noisy_qpsk_symbols = zeros(length(qpsk_values), 1);
for i=[1:2:length(qpsk_values)-1]
H = [channel1(i), channel2(i); channel2(i)', -channel1(i)']./sqrt(2);
signal = [qpsk_values(i) ; qpsk_values(i+1)];
qpsk_values_l = H*signal;
received_noisy_qpsk_values = addRayleighNoise(qpsk_values_l, snr);
ls_est_values = (H'*H)^-1*(H'*received_noisy_qpsk_values);
demod_noisy_qpsk_symbols(i) = lsFindOfdmSymbol(ls_est_values(1), @(x)(x));
demod_noisy_qpsk_symbols(i+1) = lsFindOfdmSymbol(ls_est_values(2), @(x)(x));
end
stc21_snr_ser = [stc21_snr_ser ; [snr, 1-(sum(demod_noisy_qpsk_symbols==qpsk_symbols)/length(qpsk_values))]];
end
semilogy(stc21_snr_ser(:,1), stc21_snr_ser(:,2),'-o', 'LineWidth', 1);
% STC 2X2
stc22_snr_ser = [];
for snr=[0:2:40]
snr
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channel1 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel2 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel3 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
channel4 = addRayleighNoise(zeros(length(qpsk_values), 1), 0);
demod_noisy_qpsk_symbols = zeros(length(qpsk_values), 1);
for i=[1:2:length(qpsk_values)-1]
H0 = [channel1(i), channel2(i); channel2(i)', -channel1(i)']./sqrt(2);
H1 = [channel3(i), channel4(i); channel3(i)', -channel4(i)']./sqrt(2);
H = [H0 ; H1];
signal = [qpsk_values(i) ; qpsk_values(i+1)];
qpsk_values_l = H*signal;
received_noisy_qpsk_values = addRayleighNoise(qpsk_values_l, snr);
ls_est_values = (H'*H)^-1*(H'*received_noisy_qpsk_values);
demod_noisy_qpsk_symbols(i) = lsFindOfdmSymbol(ls_est_values(1), @(x)(x));
demod_noisy_qpsk_symbols(i+1) = lsFindOfdmSymbol(ls_est_values(2), @(x)(x));
end
stc22_snr_ser = [stc22_snr_ser ; [snr, 1-(sum(demod_noisy_qpsk_symbols==qpsk_symbols)/length(qpsk_values))]];
end
semilogy(stc22_snr_ser(:,1), stc22_snr_ser(:,2),'-o', 'LineWidth', 1);
% BF 2X2
bf22_snr_ser = [];
for snr=[0:2:40]
snr
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channels = zeros(length(qpsk_values), 4);
for i=[1:size(channels, 2)]
channels(:,i) = addRayleighNoise(channels(:,i), 0);
end
demod_noisy_qpsk_symbols = zeros(length(qpsk_values), 1);
for i=[1:length(qpsk_values)]
H = [channels(i, 1), channels(i, 2) ; channels(i, 3) , channels(i, 4)];
[V,D] = eig(H'*H);
[~,max_eig_index] = max(max(abs(D)));
weighted_H = H*V(:, max_eig_index);
sent_signals = weighted_H*qpsk_values(i);
received_noisy_qpsk_values = addRayleighNoise(sent_signals, snr);
ls_est_value = (weighted_H'*weighted_H)^-1*(weighted_H'*received_noisy_qpsk_values);
demod_noisy_qpsk_symbols(i) = lsFindOfdmSymbol(ls_est_value, @(x)(x));
end
bf22_snr_ser = [bf22_snr_ser ; [snr, 1-(sum(demod_noisy_qpsk_symbols==qpsk_symbols)/length(qpsk_values))]];
end
semilogy(bf22_snr_ser(:,1), bf22_snr_ser(:,2),'-o', 'LineWidth', 1);
% BF 4X2
bf42_snr_ser = [];
for snr=[0:2:40]
snr
bits = round(rand(DATA_LENGTH, 1));
qpsk_symbols = bi2de(reshape(bits, [], 2));
qpsk_values = qammod(qpsk_symbols, 4)/sqrt(2);
channels = zeros(length(qpsk_values), 8);
for i=[1:size(channels, 2)]
channels(:,i) = addRayleighNoise(channels(:,i), 0);
end
demod_noisy_qpsk_symbols = zeros(length(qpsk_values), 1);
for i=[1:length(qpsk_values)]
H = [channels(i, 1), channels(i, 2) , channels(i, 3) , channels(i, 4) ; ...
channels(i, 5), channels(i, 6) , channels(i, 7) , channels(i, 8)];
[V,D] = eig(H'*H);
[~,max_eig_index] = max(max(abs(D)));
weighted_H = H*V(:, max_eig_index
没有合适的资源?快使用搜索试试~ 我知道了~
matlab-OFDM+MIMO误码率仿真,对比MRC,STC,BF以及SM-ML核SM-ZF多种接收器性能-源码
共3个文件
m:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 88 浏览量
2021-09-30
21:22:59
上传
评论
收藏 2KB RAR 举报
温馨提示
matlab_OFDM+MIMO误码率仿真,对比MRC,STC,BF以及SM-ML核SM-ZF多种接收器性能_源码
资源推荐
资源详情
资源评论
收起资源包目录
matlab_OFDM+MIMO误码率仿真,对比MRC,STC,BF以及SM-ML核SM-ZF多种接收器性能_源码.rar (3个子文件)
matlab_OFDM+MIMO误码率仿真,对比MRC,STC,BF以及SM-ML核SM-ZF多种接收器性能_源码
Runme.m 11KB
func
addRayleighNoise.m 249B
lsFindOfdmSymbol.m 337B
共 3 条
- 1
资源评论
- m0_561948232024-04-09发现一个宝藏资源,资源有很高的参考价值,赶紧学起来~
mYlEaVeiSmVp
- 粉丝: 1883
- 资源: 19万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功