Добавил:
debilX2
t.me
Фулл всегда есть! А если нет, то Вы плохо его ищите! ИиКГ, СКДИКТ, ОКИТПЭС и тд https://t.me/whitedevil752rn Так же веду разработку КД (конструкторской документации) согласно ГОСТ. Имеется опыт работы при производстве на одном из ведущих в области радиэлектроники предприятии. Пишите)
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lr4_2
.m clear all
close all
clc
N = 10^6; % число символов для оценки ПУ
Eb_N0_dB = [0:20]; % диапазон значений ОСШ
nRx = 2; % число приемных антенн
for ii = 1:length(Eb_N0_dB) % цикл по ОСШ
ip = rand(1,N)>0.5; % формирование битового потока
s = 2*ip-1; % отображение битов в символы ФМ-2
% формирование коэффициентов замираний и АБГШ
h = 1/sqrt(2)*[randn(nRx,N) + j*randn(nRx,N)];
n = 1/sqrt(2)*[randn(nRx,N) + j*randn(nRx,N)];
% ПВК Аламути для MIMO 2*2
sCode = 1/sqrt(2)*kron(reshape(s,2,N/2),ones(1,2)) ;
y = zeros(nRx,N);
yMod = zeros(nRx*2,N); hMod = zeros(nRx*2,N);
for kk = 1:nRx
hMod = kron(reshape(h(kk,:),2,N/2),ones(1,2));
hMod = kron(reshape(h(kk,:),2,N/2),ones(1,2));
temp = hMod;
hMod(1,[2:2:end]) = conj(temp(2,[2:2:end]));
hMod(2,[2:2:end]) = -conj(temp(1,[2:2:end]));
% добавление АБГШ и замираний
y(kk,:) = sum(hMod.*sCode,1) + 10^(-Eb_N0_dB(ii)/20)*n(kk,:);
yMod([2*kk-1:2*kk],:) = kron(reshape(y(kk,:),2,N/2),ones(1,2));
hEq([2*kk-1:2*kk],:) = hMod;
hEq(2*kk-1,[1:2:end]) = conj(hEq(2*kk-1,[1:2:end]));
hEq(2*kk, [2:2:end]) = conj(hEq(2*kk, [2:2:end]));
end
% Формирование матрицы h Alamouti для MIMO 2*2
hEqPower = sum(hEq.*conj(hEq),1);
% Комбинирование сигналов по алгоритму Alamouti
yHat = sum(hEq.*yMod,1)./hEqPower; % [h1*y1 + h2y2*, h2*y1 -h1y2*, ... ]
yHat(2:2:end) = conj(yHat(2:2:end));
% приемник с жесткими решениями
ipHat = real(yHat)>0;
% подсчет числа ошибок
nErr(ii) = size(find([ip- ipHat]),2);
end
simBer = nErr/N;
EbN0Lin = 10.^(Eb_N0_dB/10); theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2); theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p));
pAlamouti = 1/2 - 1/2*(1+2./EbN0Lin).^(-1/2);
theoryBerAlamouti_nTx2_nRx1 = pAlamouti.^2.*(1+2*(1-pAlamouti));
close all; figure;
semilogy(Eb_N0_dB,theoryBer_nRx1,'k','LineWidth',2); hold on;
semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'mx-','LineWidth',2);
semilogy(Eb_N0_dB,theoryBerAlamouti_nTx2_nRx1,'c--','LineWidth',2);
semilogy(Eb_N0_dB,simBer,'bs-','LineWidth',2);
axis([min(Eb_N0_dB) max(Eb_N0_dB) 10^-5 0.5]); grid on;
legend('формула (M_{Tx}=1,N_{Rx}=1)', 'формула (M_{Tx}=1,N_{Rx}=2, MRC)',...
'формула (M_{Tx}=2, N_{Rx}=1, Alamouti)',...
'ИМ (M_{Tx}=2, N_{Rx}=2, Alamouti)');
xlabel('E_{b}/N_{0}, дБ'); ylabel('BER (вероятность ошибки)');
title('Помехоустойчивость ПВК Alamouti (MIMO 2*2)');
close all
clc
N = 10^6; % число символов для оценки ПУ
Eb_N0_dB = [0:20]; % диапазон значений ОСШ
nRx = 2; % число приемных антенн
for ii = 1:length(Eb_N0_dB) % цикл по ОСШ
ip = rand(1,N)>0.5; % формирование битового потока
s = 2*ip-1; % отображение битов в символы ФМ-2
% формирование коэффициентов замираний и АБГШ
h = 1/sqrt(2)*[randn(nRx,N) + j*randn(nRx,N)];
n = 1/sqrt(2)*[randn(nRx,N) + j*randn(nRx,N)];
% ПВК Аламути для MIMO 2*2
sCode = 1/sqrt(2)*kron(reshape(s,2,N/2),ones(1,2)) ;
y = zeros(nRx,N);
yMod = zeros(nRx*2,N); hMod = zeros(nRx*2,N);
for kk = 1:nRx
hMod = kron(reshape(h(kk,:),2,N/2),ones(1,2));
hMod = kron(reshape(h(kk,:),2,N/2),ones(1,2));
temp = hMod;
hMod(1,[2:2:end]) = conj(temp(2,[2:2:end]));
hMod(2,[2:2:end]) = -conj(temp(1,[2:2:end]));
% добавление АБГШ и замираний
y(kk,:) = sum(hMod.*sCode,1) + 10^(-Eb_N0_dB(ii)/20)*n(kk,:);
yMod([2*kk-1:2*kk],:) = kron(reshape(y(kk,:),2,N/2),ones(1,2));
hEq([2*kk-1:2*kk],:) = hMod;
hEq(2*kk-1,[1:2:end]) = conj(hEq(2*kk-1,[1:2:end]));
hEq(2*kk, [2:2:end]) = conj(hEq(2*kk, [2:2:end]));
end
% Формирование матрицы h Alamouti для MIMO 2*2
hEqPower = sum(hEq.*conj(hEq),1);
% Комбинирование сигналов по алгоритму Alamouti
yHat = sum(hEq.*yMod,1)./hEqPower; % [h1*y1 + h2y2*, h2*y1 -h1y2*, ... ]
yHat(2:2:end) = conj(yHat(2:2:end));
% приемник с жесткими решениями
ipHat = real(yHat)>0;
% подсчет числа ошибок
nErr(ii) = size(find([ip- ipHat]),2);
end
simBer = nErr/N;
EbN0Lin = 10.^(Eb_N0_dB/10); theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2); theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p));
pAlamouti = 1/2 - 1/2*(1+2./EbN0Lin).^(-1/2);
theoryBerAlamouti_nTx2_nRx1 = pAlamouti.^2.*(1+2*(1-pAlamouti));
close all; figure;
semilogy(Eb_N0_dB,theoryBer_nRx1,'k','LineWidth',2); hold on;
semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'mx-','LineWidth',2);
semilogy(Eb_N0_dB,theoryBerAlamouti_nTx2_nRx1,'c--','LineWidth',2);
semilogy(Eb_N0_dB,simBer,'bs-','LineWidth',2);
axis([min(Eb_N0_dB) max(Eb_N0_dB) 10^-5 0.5]); grid on;
legend('формула (M_{Tx}=1,N_{Rx}=1)', 'формула (M_{Tx}=1,N_{Rx}=2, MRC)',...
'формула (M_{Tx}=2, N_{Rx}=1, Alamouti)',...
'ИМ (M_{Tx}=2, N_{Rx}=2, Alamouti)');
xlabel('E_{b}/N_{0}, дБ'); ylabel('BER (вероятность ошибки)');
title('Помехоустойчивость ПВК Alamouti (MIMO 2*2)');
Соседние файлы в предмете Помехоустойчивость радиоэлектронных средств
