- •I. Исследование сигналов во временной и частотной областях
- •II. Исследование геометрического представления сигналов
- •III. Исследование оптимального приема
- •I. Исследование сигналов во временной и частотной областях
- •Описание вида модуляции
- •II. Исследование геометрического представления сигналов
- •Базисные функции
- •2.Сигнальное созвездие (signal constellation) и решающие области
- •II. Исследование оптимального приемника
- •Вычисление спектра сигнала
- •Амплитудные графики спектров сигналов
- •Спектр последовательности
- •1200 Рис.4. Спектр последовательности сигналов
Вычисление спектра сигнала
(3)
(4)
Итого, исходя из формул (3) и (4) получим, что для i-ого сигнала спектр равен:
(5)
Амплитудные графики спектров сигналов
Полученные графики спектров сигналов представлены на рис 3.
Спектр последовательности
Пусть {si(t)} – сигнальное множество, i=0,…q-1. Определим последовательность индексов i=(i0,i1,…iN-1) длины N, где il ϵ {0,1,…,q-1}, 0≤l≤N-1. Определим также последовательность сигналов длины N, определяемую последовательностью индексов i,
где
T
– период следования сигналов.
Найдем спектр Si(f) последовательности si(t). Пусть Si(t) спектр i-го сигнала из сигнального множества, тогда используя свойство линейности и сдвига во временной области, имеем
Как следует из формулы, спектр последовательности сигналов представляет собой линейную комбинацию спектров сигналов, образующих последовательность
Рис.3. Амплитудные спектры сигналов
1200 Рис.4. Спектр последовательности сигналов
А
мплитуда
спектра последовательности сигналов
занимает ту же полосу частот, что и
спектры сигналов, но всегда имеет меньшую
амплитуду
II. Исследование геометрического представления сигналов
Базисные функции
Сигнал s(t) может быть представлен в виде линейной комбинации D базисных функций
Величина D называется размерностью пространства сигналов. В нашем случае D=2.
Базисные функции:
(7)
Рис.5.
Базисные функции
(8)
2.Сигнальное созвездие (signal constellation) и решающие области
Применяя
формулу (2) Получим коэффициенты
сигналов по базисным функциям
.
По эти коэффициентам построим сигнальное
созвездие и определим решающие области.
Решающая
область
для
k-го
ФМ сигнала представляют собой угол
величины 2π/q
с
вершиной в начале координат, биссектриса
которого проходит через точку
(см.
рис.1).
Рис.6.
Решающие области и сигнальное созвездие
В нашем случае решающая область для каждого из сигналов представляет собой угол 90 градусов.
II. Исследование оптимального приемника
Схема оптимального приемника
Принятие решения путём определения решающей области
r = s + n
Рис.7.
Схема оптимального приемника
При моделировании n представляет собой массив псевдослучайных чисел с дисперсий вычисляемой по формуле
где ƴ-отношение сигнал/шум.
Верхняя оценка вероятности ошибки и вероятности ошибки на бит
Где
– SNR(Signal
noise
ratio)
отношение сигнал-шум, q
– кол-во сигналов.
Вероятность ошибки на бит как функция от отношения сигнал/шум на бит задается выражением
Исходя
из формулы (10) получим, что верхняя оценка
для
равна
В
нашем случае, так как q
= 4, то
Рис.8.
Облака рассеивания при различных
значениях SNR
Рис.9.
Исходный сигнал, шум, полученный сигнал
Рис.10.
График вероятности ошибок Pe
Лабораторная работа выполнялась в среде Matlab 2009.
Листинг программы:
clear all
clc;
%================== Global values ===================================
lines = 1;
default_general = {'10','600','1200','1200','45'};
param_general = inputdlg({'Мощность сигнала',...
'Модуляционная скорость',...
'Информационная скорость',...
'Частота несущей', ...
'Начальный фазовый сдвиг'},...
'Введите основные данные',...
1,default_general);
Esig = str2num([param_general{1}]);
Vmod = str2num([param_general{2}]); % Modulation Rate, Bod
Vinf = str2num([param_general{3}]); % Information Rate, bit/s
Fc = str2num([param_general{4}]); % Carrier Frequency, Gz
ThetaShift = str2num([param_general{5}])*pi/180;
%---------Missing values-------------------------
T = 1/Vmod; % Period of signals
Tc = 1/Fc; % Period of the carrier signal.
q = 2^round(Vinf*T); % Number of signals
Amp = sqrt(2*Esig/T); % Amplitude
%---------Additional values----------------------
lines = 1;
default_addit = {'16','32','10','20','8','25','0.5','1000','1000','7'};
param_addit = inputdlg({ 'Длина последовательности','Дискретизация', ...
'Точность спектра', 'Макс. число ошибок', ...
'SHR начальное', ...
'SHR конечное','SHR инкремент',...
'Кол-во повторений для "облака"', ...
'Кол-во повторений для статистики',...
'SNR для примера'},...
'Введите дополнительные данные',1,default_addit);
LENGHT = str2num([param_addit{1}]);
OVERSAMPL = str2num([param_addit{2}]);
WIDTHFREQ = str2num([param_addit{3}]);
count_errMax= str2num([param_addit{4}]);
SNRstart = str2num([param_addit{5}]);
SNRfinish = str2num([param_addit{6}]);
SNRincr = str2num([param_addit{7}]);
Nrun = str2num([param_addit{8}]);
REPEAT = str2num([param_addit{9}]);
ExSNR = str2num([param_addit{10}]);
deltaT = Tc/OVERSAMPL;
TIME = 0:deltaT:T;
StepF = Fc/OVERSAMPL;
LeftRangeF = -Fc-WIDTHFREQ*Fc;
RightRangeF = Fc+WIDTHFREQ*Fc;
FREQ = LeftRangeF:StepF:RightRangeF;
nfig = 1; % счетчик графиков и рисунков
InitRand = 13517;% начальная установка псевдослучайного генератора
delta = pi/q;
COLORR = rand(1,q);
COLORG = rand(1,q);
COLORB = rand(1,q);
%==========================================================================
%I
signals = zeros(q, length(TIME)); %array of signals
theta = zeros(1,q); %phase shift
for i=0 : q-1
theta(i+1) = mod(ThetaShift+(2*pi/q)*i, 2*pi);
signals(i+1,:)= Amp*cos(2*pi*Fc*TIME + theta(i+1));
end
Title = ['PSK, q = ', int2str(q),', f_0 = ', num2str(Fc), ' Gz'];
figure(nfig); clf; nfig = nfig + 1;
hold on
for i=0:q-1
hPlot = plot(TIME, signals(i+1,:));
set(hPlot,'Color',[COLORR(i+1),COLORG(i+1),COLORB(i+1)]);
hText=text(0,Amp*1.3-i*2.6*Amp/q,['Theta:', num2str(theta(i+1)*180/pi,4)]);
set(hText,'Color',[COLORR(i+1),COLORG(i+1),COLORB(i+1)]);
end
hold off
grid on
xlabel('Time')
ylabel('Amplitude')
title(Title, 'FontName', 'Arial Cyr', 'FontSize', 9);
%--------------------Calculation Signal Spectrum --------------------------
%G = Amp*T*sin(pi*Fc*t)/(pi*Fc*t) = Amp*T*sinc(Fc*t);
spectrum = zeros(q,length(FREQ));
for i=0:q-1
spectrum(i+1,:) = (Amp*T/2)*(sinc((FREQ-Fc)*T)*exp( 1i*theta(i+1)) + ...
sinc((FREQ+Fc)*T)*exp(-1i*theta(i+1)));
end
figure(nfig); nfig = nfig + 1;
clf;
nonnegative = find(FREQ>=0);
h = round(sqrt(q));
w = ceil(q/h);
title('Амплитудные спектры', 'FontName', 'Arial Cyr', 'FontSize', 9);
for i=0:q-1
subplot(w,h,i+1)
hPlot = plot(FREQ(nonnegative), abs(spectrum(i+1, nonnegative)));
set(hPlot,'Color',[COLORR(i+1),COLORG(i+1),COLORB(i+1)]);
hLeg = legend(['Theta:', num2str(theta(i+1)*180/pi,4)]);
set(hLeg,'Color',[COLORR(i+1),COLORG(i+1),COLORB(i+1)]);
grid on
xlabel('Frequence')
ylabel('Amplitude')
end
%----------------------Formating Signal Sequence--------------------------
IndexRandSet = fix((q)*rand(1,LENGHT));
TimeSequence = zeros(1,LENGHT*signals(1,:));
SignalSequence = zeros(1,LENGHT*T);
figure(nfig); clf; nfig = nfig + 1;
subplot(3,1,1)
for k = 1:LENGHT
index = IndexRandSet(k)+1;
SignalSequence = [SignalSequence, signals(index,:)];
TimeSequence = [TimeSequence, TIME+(k-1)*(T+deltaT)];
hPlot = plot(TIME+(k-1)*(T+deltaT), signals(index,:));
set(hPlot,'Color',[COLORR(index),COLORG(index),COLORB(index)]);
hold on
grid on
end
title('Последовательность ФМ сигналов','FontName','Arial Cyr','FontSize', 9);
SpectrSequence = zeros(1,length(FREQ));
for k = 1:LENGHT
SpectrSequence = SpectrSequence + spectrum(IndexRandSet(k)+1,:) ...
.*exp(-(1i*2*pi*(k-1)*T)*FREQ);
end
subplot(3,1,[2,3])
plot( FREQ(nonnegative), abs(spectrum(0+1,nonnegative)),...
FREQ(nonnegative), abs(SpectrSequence(nonnegative))/LENGHT);
grid on
title('Спектр одиночного ФМ сигнала и спектр последовательности сигналов', ...
'FontName', 'Arial Cyr', 'FontSize', 9);
hl = legend('Спектр одиночного сигнала', 'Спектр последователности сигналов');
set(hl, 'FontName', 'Arial Cyr', 'FontSize', 9);
hold off
title('Спектр Последовательности ФМ сигналов', 'FontName','Arial Cyr', ... 'FontSize', 9);
%===II===
%---------------------Signal Constellation--------------------------------
basisFunction1 = sqrt(2/T)*cos(2*pi*Fc*TIME);
basisFunction2 = sqrt(2/T)*sin(2*pi*Fc*TIME);
basisFunction1 = basisFunction1/norm(basisFunction1);
basisFunction2 = basisFunction2/norm(basisFunction2);
figure(nfig); clf; nfig = nfig + 1;
plot(TIME, basisFunction1,TIME, basisFunction2);
title('Базисные функции', 'FontName', 'Arial Cyr', 'FontSize', 9);
legend('cos','sin');
grid on;
signal_points1 = zeros(1,q);
signal_points2 = zeros(1,q);
figure(nfig); clf; nfig = nfig + 1;
subplot(1,2,1)
title('Множество сигнальных точек', 'FontName', 'Arial Cyr', 'FontSize', 9);
hold on
for i=0:q-1
signal_points1(i+1) = signals(i+1,:)*basisFunction1';
signal_points2(i+1) = signals(i+1,:)*basisFunction2';
hPlot = plot( signal_points1(i+1),signal_points2(i+1),'o');
set(hPlot,'Color',[COLORR(i+1),COLORG(i+1),COLORB(i+1)]);
set(hPlot,'LineWidth', 4);
end
grid on
axis('square');
%TEST
bF1 = sqrt(2/T)*cos(2*pi*Fc*TIME+delta);
bF2 = sqrt(2/T)*sin(2*pi*Fc*TIME+delta);
bF1 = bF1/norm(bF1);
bF2 = bF2/norm(bF2);
for i=0:q-1
sp1 = signals(i+1,:)*bF1';
sp2 = signals(i+1,:)*bF2';
x_ =0:sp1/100:round(sp1*1.4);
range = zeros(1, length(x_));
if mod(atan2(sp2,sp1),pi/2)>0.01
range = sp2/sp1 * x_;
plot( x_, range,'k');
end
end
hold off
%-------------Modeling of transmission over a noisy channel.--------------
rand('seed', InitRand);
subplot(1,2,2)
axis('square');
% SNR = E/No, SNR - signal to noise ratio
SNRMin = 10^(SNRstart/10);
SNRMax = 10^(SNRfinish/10);
E = norm(signals(1,:))^2;
DispNoiseMin = E/(2*SNRMin); % noise dispertion
SigmaDispNoiseMin = sqrt(DispNoiseMin); % noise standard deviation
DispNoiseMax = E/(2*SNRMax);
SigmaDispNoiseMax = sqrt(DispNoiseMax);
% r - received signal, s - original signal, n - noise
rMin1 = zeros(1, Nrun);
rMin2 = zeros(1, Nrun);
rMax1 = zeros(1, Nrun);
rMax2 = zeros(1, Nrun);
for l = 1:Nrun
i = fix((q)*rand);
nMin = SigmaDispNoiseMin*randn(size(TIME));
nMax = SigmaDispNoiseMax*randn(size(TIME));
rMin = signals(i+1,:) + nMin;
rMax = signals(i+1,:) + nMax;
rMin1(l) = rMin*basisFunction1';
rMin2(l) = rMin*basisFunction2';
rMax1(l) = rMax*basisFunction1';
rMax2(l) = rMax*basisFunction2';
end
hold on
plot(rMin1,rMin2,'y.', rMax1,rMax2,'b.');
legend(['SNR(Дб)=',num2str(SNRstart)],['SNR(Дб)=',num2str(SNRfinish)])
for i=0:q-1
hPlot = plot(signal_points1(i+1), signal_points2(i+1));
set(hPlot,'LineWidth', 2);
set(hPlot,'Color',[COLORR(i+1),COLORG(i+1),COLORB(i+1)]);
end
grid on
hold off
title('Облака рассеяния', 'FontName', 'Arial Cyr', 'FontSize', 9);
axis('square');
figure(nfig); clf; nfig = nfig + 1;
n = sqrt(E/(2*(10^(ExSNR/10))))*randn(size(TIME));
r = signals(1,:) + n;
title(['Пример. SNR (Дб)=',num2str(ExSNR)],'FontName','Arial Cyr','FontSize', 9);
hold on
hPlot = plot(TIME, r, 'r'); %recieve signal
set( hPlot, 'LineWidth', 2 );
plot(TIME, signals(1,:),'b') %source signal
plot(TIME, n, '-k') %Noise
hl = legend('r(t) = s(t) + n(t) recieve','s(t)-source', 'n(t)-noise');
set(hl, 'FontName', 'Arial Cyr', 'FontSize', 9);
axis('square');
grid on
hold off
%===III===
%---------------------modeling the optimal receiver------------------------
figure(nfig); clf; nfig = nfig + 1;
SNRstart = 1;
Pe = zeros(size(SNRstart : SNRincr: SNRfinish));% error probability
Pe_theor = zeros(size(SNRstart : SNRincr : SNRfinish));
k = 1;
RzoneSize = (2*pi)/q;
for SNRdB = SNRstart : SNRincr : SNRfinish
SNR = 10^(SNRdB/10);
DispNoise = E/(2*SNR); % noise dispertion
SigmaDispNoise = sqrt(DispNoise); % noise standard deviation
count_experements = 0;
count_err = 0;
while (count_err < count_errMax && count_experements < REPEAT)
i = fix((q)*rand);
n = SigmaDispNoise*randn(size(TIME));
r = signals(i+1,:) + n;
r1 = r*basisFunction1';
r2 = r*basisFunction2';
delta = pi/q;
angle = atan2(r2,r1);
angle = mod(angle+ThetaShift,2*pi);
i_ = mod(q-round((angle)/RzoneSize),q);
if i_< 0 _ = i_+ q; end
if i_ ~= i _err = count_err + 1; end
count_experements = count_experements+1;
end % while(count_err < count_errMax)
Pe(k) = count_err/count_experements;
if q == 2
Pe_theor(k) = qfunc(sqrt(2*SNR)*sin(pi/q));
else
Pe_theor(k) = 2*qfunc(sqrt(2*SNR)*sin(pi/q));
end
if Pe(k)<10^(-9) break; end;
k=k+1;
end%SNR
semilogy(SNRstart : SNRincr: SNRfinish, Pe, 'r*', SNRstart : SNRincr: SNRfinish, Pe_theor,'bo');
legend('моделированная','теоретическая');
title('Вероятость ошибки (результаты моделирования и теоретическая)', 'FontName', 'Arial Cyr', 'FontSize', 9)
hx = xlabel('SNR, дБ');
set(hx, 'FontName', 'Arial Cyr', 'FontSize', 9)
hy = ylabel('PEB');
set(hy, 'FontName', 'Arial Cyr', 'FontSize', 9)
grid on
