Добавил:
t.me Фулл всегда есть! А если нет, то Вы плохо его ищите! ИиКГ, СКДИКТ, ОКИТПЭС и тд https://t.me/whitedevil752rn Так же веду разработку КД (конструкторской документации) согласно ГОСТ. Имеется опыт работы при производстве на одном из ведущих в области радиэлектроники предприятии. Пишите) Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab6_3

.m
Скачиваний:
0
Добавлен:
19.01.2026
Размер:
13.46 Кб
Скачать
clear all
close all
clc

%%% ФМ-2
N = 10^6; % число символов для оценки ПУ
ip = rand(1,N)>0.5; % формирование битового потока
s = 2*ip-1; % отображение битов в символы ФМ-2
nRx = [1 2]; % число приемных антенн
Eb_N0_dB = [0:2:20]; % диапазон значений ОСШ
for jj = 1:length(nRx) % цикл по числу антенн
for ii = 1:length(Eb_N0_dB) % цикл по ОСШ
% формирование АБГШ
n = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% формирование коэффициентов замираний
h = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% добавление АБГШ и замираний
sD = kron(ones(nRx(jj),1),s);
y = h.*sD + 10^(-Eb_N0_dB(ii)/20)*n;
% Комбинирование сигналов по алгоритму SC
hPower_sc = h.*conj(h); [hMaxVal_sc ind] = max(hPower_sc,[],1);
hMaxValMat_sc = kron(ones(nRx(jj),1),hMaxVal_sc);
ySel_sc = y(hPower_sc==hMaxValMat_sc);
hSel_sc = h(hPower_sc==hMaxValMat_sc);
yHat_sc = ySel_sc./hSel_sc; yHat_sc = reshape(yHat_sc,1,N);
% Комбинирование сигналов по алгоритму EGC
yHat_egc = sum(y.*exp(-j*angle(h)),1);
% Комбинирование сигналов по алгоритму MRC
yHat_mrc = sum(conj(h).*y,1)./sum(h.*conj(h),1);
% приемник с жесткими решениями
ipHat_sc = real(yHat_sc)>0;
ipHat_egc = real(yHat_egc)>0;
ipHat_mrc = real(yHat_mrc)>0;
% подсчет числа ошибок
nErr_sc(jj,ii) = size(find([ip- ipHat_sc]),2);
nErr_egc(jj,ii) = size(find([ip- ipHat_egc]),2);
nErr_mrc(jj,ii) = size(find([ip- ipHat_mrc]),2);
end
end
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_nRx1=0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));
simBer_sc = nErr_sc/N; % ИМ SC
simBer_egc = nErr_egc/N; % ИМ EGC
simBer_mrc = nErr_mrc/N; % ИМ MRC
theoryBer_nRx2_sc=0.5.*(1-2*(1+1./EbN0Lin).^(-0.5)+(1+2./EbN0Lin).^(-0.5));
theoryBer_nRx2_egc = 0.5*(1 - sqrt(EbN0Lin.*(EbN0Lin+2))./(EbN0Lin+1) );
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2); theoryBer_nRx2_mrc = p.^2.*(1+2*(1-p));

%%% ФМ-4
N = 10^6; % число символов для оценки ПУ
ip = rand(1,N)>0.5; % формирование битового потока
ip1 = rand(1,N)>0.5;
s1 = (2*ip-1)*sqrt(2)/2+(2*ip1-1)*j*sqrt(2)/2; % отображение битов в символы ФМ-4
nRx = [1 2]; % число приемных антенн
Eb_N0_dB = [0:2:20]; % диапазон значений ОСШ
for jj = 1:length(nRx) % цикл по числу антенн
for ii = 1:length(Eb_N0_dB) % цикл по ОСШ
% формирование АБГШ
n = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% формирование коэффициентов замираний
h = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% добавление АБГШ и замираний
sD = kron(ones(nRx(jj),1),s1);
y1 = h.*sD + 10^(-Eb_N0_dB(ii)/20)*n;
% Комбинирование сигналов по алгоритму SC
hPower_sc = h.*conj(h); [hMaxVal_sc ind] = max(hPower_sc,[],1);
hMaxValMat_sc = kron(ones(nRx(jj),1),hMaxVal_sc);
ySel_sc = y1(hPower_sc==hMaxValMat_sc);
hSel_sc = h(hPower_sc==hMaxValMat_sc);
yHat_sc = ySel_sc./hSel_sc; yHat_sc = reshape(yHat_sc,1,N);
% Комбинирование сигналов по алгоритму EGC
yHat_egc = sum(y1.*exp(-j*angle(h)),1);
% Комбинирование сигналов по алгоритму MRC
yHat_mrc = sum(conj(h).*y1,1)./sum(h.*conj(h),1);
% приемник с жесткими решениями
ipHat_sc1 = real(yHat_sc)>0;
ipHat_egc1 = real(yHat_egc)>0;
ipHat_mrc1 = real(yHat_mrc)>0;
% подсчет числа ошибок
nErr_sc1(jj,ii) = size(find([ip- ipHat_sc1]),2);
nErr_egc1(jj,ii) = size(find([ip- ipHat_egc1]),2);
nErr_mrc1(jj,ii) = size(find([ip- ipHat_mrc1]),2);
end
end
EbN0Lin = 10.^(Eb_N0_dB/10);
simBer_sc1 = nErr_sc1/N; % ИМ SC
simBer_egc1 = nErr_egc1/N; % ИМ EGC
simBer_mrc1 = nErr_mrc1/N; % ИМ MRC
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2);

%%% ФМ-8
N = 10^6; % число символов для оценки ПУ
ip = rand(1,N)>0.5; % формирование битового потока
ip1 = rand(1,N)>0.5;
ip2 = rand(1,N)>0.5;
ip3 = rand(1,N)>0.5;
s2 = (2*ip-1)*sqrt(3)/2-(sqrt(3)-1)/2*ip+(2*ip1-1)*j*sqrt(3)/2-(sqrt(3)-1)/2*ip1*j; % отображение битов в символы ФМ-8
nRx = [1 2]; % число приемных антенн
Eb_N0_dB = [0:2:20]; % диапазон значений ОСШ
for jj = 1:length(nRx) % цикл по числу антенн
for ii = 1:length(Eb_N0_dB) % цикл по ОСШ
% формирование АБГШ
n = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% формирование коэффициентов замираний
h = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% добавление АБГШ и замираний
sD = kron(ones(nRx(jj),1),s2);
y2 = h.*sD + 10^(-Eb_N0_dB(ii)/20)*n;
% Комбинирование сигналов по алгоритму SC
hPower_sc = h.*conj(h); [hMaxVal_sc ind] = max(hPower_sc,[],1);
hMaxValMat_sc = kron(ones(nRx(jj),1),hMaxVal_sc);
ySel_sc = y2(hPower_sc==hMaxValMat_sc);
hSel_sc = h(hPower_sc==hMaxValMat_sc);
yHat_sc = ySel_sc./hSel_sc; yHat_sc = reshape(yHat_sc,1,N);
% Комбинирование сигналов по алгоритму EGC
yHat_egc = sum(y2.*exp(-j*angle(h)),1);
% Комбинирование сигналов по алгоритму MRC
yHat_mrc = sum(conj(h).*y2,1)./sum(h.*conj(h),1);
% приемник с жесткими решениями
ipHat_sc2 = real(yHat_sc)>0;
ipHat_egc2 = real(yHat_egc)>0;
ipHat_mrc2 = real(yHat_mrc)>0;
% подсчет числа ошибок
nErr_sc2(jj,ii) = size(find([ip- ipHat_sc2]),2);
nErr_egc2(jj,ii) = size(find([ip- ipHat_egc2]),2);
nErr_mrc2(jj,ii) = size(find([ip- ipHat_mrc2]),2);
end
end
EbN0Lin = 10.^(Eb_N0_dB/10);
simBer_sc2 = nErr_sc2/N; % ИМ SC
simBer_egc2 = nErr_egc2/N; % ИМ EGC
simBer_mrc2 = nErr_mrc2/N; % ИМ MRC
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2);

%%% КАМ-16
N = 10^6; % число символов для оценки ПУ
alpha16qam1 = [-3 -1 1 3]; % 16-QAM алфавит
% формирование символов алфавита 16-КАМ
ip1 = randsrc(1,N,alpha16qam1) + j*randsrc(1,N,alpha16qam1);
% нормирование энергии
s3 = (1/sqrt(10))*ip1;
nRx = [1 2]; % число приемных антенн
Eb_N0_dB = [0:2:20]; % диапазон значений ОСШ
for jj = 1:length(nRx) % цикл по числу антенн
for ii = 1:length(Eb_N0_dB) % цикл по ОСШ
% формирование АБГШ
n = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% формирование коэффициентов замираний
h = 1/sqrt(2)*[randn(nRx(jj),N) + j*randn(nRx(jj),N)];
% добавление АБГШ и замираний
sD = kron(ones(nRx(jj),1),s3);
y3 = h.*sD + 10^(-Eb_N0_dB(ii)/20)*n;
% Комбинирование сигналов по алгоритму SC
hPower_sc = h.*conj(h); [hMaxVal_sc ind] = max(hPower_sc,[],1);
hMaxValMat_sc = kron(ones(nRx(jj),1),hMaxVal_sc);
ySel_sc = y3(hPower_sc==hMaxValMat_sc);
hSel_sc = h(hPower_sc==hMaxValMat_sc);
yHat_sc = ySel_sc./hSel_sc; yHat_sc = reshape(yHat_sc,1,N);
% Комбинирование сигналов по алгоритму EGC
yHat_egc = sum(y3.*exp(-j*angle(h)),1);
% Комбинирование сигналов по алгоритму MRC
yHat_mrc = sum(conj(h).*y3,1)./sum(h.*conj(h),1);
% демодуляция
y_re_sc1 = real(yHat_sc); % real part
y_im_sc1 = imag(yHat_sc); % imaginary part
% приемник с жесткими решениями
ipHat_re1(find(y_re_sc1< -2/sqrt(10))) = -3;
ipHat_re1(find(y_re_sc1 > 2/sqrt(10))) = 3;
ipHat_re1(find(y_re_sc1>-2/sqrt(10) & y_re_sc1<=0)) = -1;
ipHat_re1(find(y_re_sc1>0 & y_re_sc1<=2/sqrt(10))) = 1;

ipHat_im1(find(y_im_sc1< -2/sqrt(10))) = -3;
ipHat_im1(find(y_im_sc1 > 2/sqrt(10))) = 3;
ipHat_im1(find(y_im_sc1>-2/sqrt(10) &y_im_sc1<=0)) = -1;
ipHat_im1(find(y_im_sc1>0 & y_im_sc1<=2/sqrt(10))) = 1;
ipHat_sc3 = ipHat_re1 + j*ipHat_im1;
% демодуляция
y_re_egs1 = real(yHat_egc); % real part
y_im_egs1 = imag(yHat_egc); % imaginary part
% приемник с жесткими решениями
ipHat_re2(find(y_re_egs1< -2/sqrt(10))) = -3;
ipHat_re2(find(y_re_egs1 > 2/sqrt(10))) = 3;
ipHat_re2(find(y_re_egs1>-2/sqrt(10) & y_re_egs1<=0)) = -1;
ipHat_re2(find(y_re_egs1>0 & y_re_egs1<=2/sqrt(10))) = 1;

ipHat_im2(find(y_im_egs1< -2/sqrt(10))) = -3;
ipHat_im2(find(y_im_egs1 > 2/sqrt(10))) = 3;
ipHat_im2(find(y_im_egs1>-2/sqrt(10) &y_im_egs1<=0)) = -1;
ipHat_im2(find(y_im_egs1>0 & y_im_egs1<=2/sqrt(10))) = 1;
ipHat_egc3 = ipHat_re2 + j*ipHat_im2;
% демодуляция
y_re_mrc1 = real(yHat_mrc); % real part
y_im_mrc1 = imag(yHat_mrc); % imaginary part
% приемник с жесткими решениями
ipHat_re3(find(y_re_mrc1< -2/sqrt(10))) = -3;
ipHat_re3(find(y_re_mrc1 > 2/sqrt(10))) = 3;
ipHat_re3(find(y_re_mrc1>-2/sqrt(10) & y_re_mrc1<=0)) = -1;
ipHat_re3(find(y_re_mrc1>0 &y_re_mrc1<=2/sqrt(10))) = 1;

ipHat_im3(find(y_im_mrc1< -2/sqrt(10))) = -3;
ipHat_im3(find(y_im_mrc1 > 2/sqrt(10))) = 3;
ipHat_im3(find(y_im_mrc1>-2/sqrt(10) &y_im_mrc1<=0)) = -1;
ipHat_im3(find(y_im_mrc1>0 & y_im_mrc1<=2/sqrt(10))) = 1;
ipHat_mrc3 = ipHat_re3 + j*ipHat_im3;

% подсчет числа ошибок
nErr_sc3(jj,ii) = size(find([ip1- ipHat_sc3]),2);
nErr_egc3(jj,ii) = size(find([ip1- ipHat_egc3]),2);
nErr_mrc3(jj,ii) = size(find([ip1- ipHat_mrc3]),2);
end
end
EbN0Lin = 10.^(Eb_N0_dB/10);
simBer_sc3 = nErr_sc3/N; % ИМ SC
simBer_egc3 = nErr_egc3/N; % ИМ EGC
simBer_mrc3 = nErr_mrc3/N; % ИМ MRC
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2);


% Построение графиков
%%% ФМ-2
figure(10)
semilogy(Eb_N0_dB,theoryBer_nRx1,'k','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_sc(2,:),'bs-','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_sc,'mx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_egc(2,:),'rs--','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_egc,'gx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_mrc(2,:),'cs-.','LineWidth',2); grid on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_mrc,'yx-','LineWidth',2); grid on;
axis([min(Eb_N0_dB) max(Eb_N0_dB) 10^-5 0.5]);
xlabel('E_{b}/N_{0}, дБ'); ylabel('BER (вероятность ошибки)');
legend('N=1', 'N=2 (ИМ SC)','N=2 (ИМ EGC)','N=2 (ИМ MRC)');
title('Помехоустойчивость разнесенного приема ФМ-2');
hold off

%%% ФМ-4
figure(20)
semilogy(Eb_N0_dB,theoryBer_nRx1,'k','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_sc1(2,:),'bs-','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_sc,'mx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_egc1(2,:),'rs--','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_egc,'gx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_mrc1(2,:),'cs-.','LineWidth',2); grid on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_mrc,'yx-','LineWidth',2); grid on;
axis([min(Eb_N0_dB) max(Eb_N0_dB) 10^-5 0.5]);
xlabel('E_{b}/N_{0}, дБ'); ylabel('BER (вероятность ошибки)');
legend('N=1', 'N=2 (ИМ SC)','N=2 (ИМ EGC)','N=2 (ИМ MRC)');
title('Помехоустойчивость разнесенного приема ФМ-4');
hold off

%%% ФМ-8
figure(30)
semilogy(Eb_N0_dB,theoryBer_nRx1,'k','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_sc2(2,:),'bs-','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_sc,'mx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_egc2(2,:),'rs--','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_egc,'gx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_mrc2(2,:),'cs-.','LineWidth',2); grid on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_mrc,'yx-','LineWidth',2); grid on;
axis([min(Eb_N0_dB) max(Eb_N0_dB) 10^-5 0.5]);
xlabel('E_{b}/N_{0}, дБ'); ylabel('BER (вероятность ошибки)');
legend('N=1', 'N=2 (ИМ SC)','N=2 (ИМ EGC)','N=2 (ИМ MRC)');
title('Помехоустойчивость разнесенного приема ФМ-8');
hold off

%%% КАМ-16
figure(40)
semilogy(Eb_N0_dB,theoryBer_nRx1,'k','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_sc3(2,:),'bs-','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_sc,'mx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_egc3(2,:),'rs--','LineWidth',2); hold on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_egc,'gx-','LineWidth',2); hold on;
semilogy(Eb_N0_dB,simBer_mrc3(2,:),'cs-.','LineWidth',2); grid on;
%semilogy(Eb_N0_dB,theoryBer_nRx2_mrc,'yx-','LineWidth',2); grid on;
axis([min(Eb_N0_dB) max(Eb_N0_dB) 10^-5 1]);
xlabel('E_{b}/N_{0}, дБ'); ylabel('BER (вероятность ошибки)');
legend('N=1', 'N=2 (ИМ SC)','N=2 (ИМ EGC)','N=2 (ИМ MRC)');
title('Помехоустойчивость разнесенного приема КАМ-16');
hold off
Соседние файлы в предмете Помехоустойчивость радиоэлектронных средств