1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
| %---- Код с симметричными комплексно-сопряженными спектрами -------------
%---------------- Ввод параметров цифрового сигнала ----------------------
M=26; % << число передаваемых бит
fsig=57960; % << частота повторения передаваемой последовательности
N=260; % << число отсчетов временных и частотных характеристик
i=0:(N-1); % номера отсчетов для построения характеристик
fs = fsig*N; % частота дискретизации
f=fsig*i; % масштаб по оси частоты
t=1/fs*i; % масштаб по оси времени
%------------- Формирование дискретного цифрового сигнала ----------------
bit=round(rand(1,M)); % случайный цифровой сигнал из M бит
disp (bit);
S=bit(ceil((i+1)*M/N)); % выполняем дискретизацию цифрового сигнала
% на каждый бит приходится N/M дискретных отсчетов
% так как номера элементов в массиве bit начинаеются с 1, умножаем на i+1
%-------------- Ввод параметров и формирование несущей -------------------
Knes=52; % << во сколько раз частота несущей больше частоты сигнала
fnes=fsig*Knes; % частота несущей
nes=sin(2*pi*f*Knes/fs); % формирование несущей
Sp=fft(S); % Cпектр немодулированного сигнала до линии связи
ACH_Sp = abs(Sp); % АЧХ
probErr1=[];
probErr2=[];
overAllProbErr=[];
for H=100:500:5000
occurrenceErr1=[];
occurrenceErr2=[];
overAllOccurrenceErr=[];
for V=0:1000
%------------------- Амплитудная модуляция сигнала -----------------------
S1=S.*nes; % амплитудная модуляция сигнала
Sp1=fft(S1); % Cпектр модулированного сигнала до линии связи
ACH_Sp1 = abs(Sp1); % АЧХ
%----------------------- Модель линии связи ------------------------------
l = H; % << длина линии связи, м% b = i;
% disp ('S6')
% disp (b)
% disp (S6(sync(i)))
R = 5e-3 +(42e-3)*sqrt(f*(1e-6)); % погонное сопротивление
L = 2.7e-7; % погонная индуктивность
G = 20*f*(1e-15); % погонная проводимость
C = 48e-12; % погонная емкость
% построние АЧХ и ФЧХ линии связи
w=2*pi*f; % вектор круговых частот
g1 = sqrt((R+1i*w*L).*(G+1i*w*C)); % коэффициент распространения волны
% disp ('g1')
% disp (g1)
K1=exp(-g1*l); % комплексная частотная характеристика линии связи
% disp ('K1')
% disp (K1)
ACH=abs(K1); % АЧХ линии связи
FCH=unwrap(angle(K1)); % ФЧХ линии связи
% disp ('FCH')
% disp (FCH)
% функция unwrap убирает скачки фазы, когда значение atan превышает |pi|
% ------------ Прохождение сигнала через линию связи --------------------
Sp1((N/2+1):end)=0; % Зануляем отрицательные частоты в спектре
Sp2 = Sp1.*K1; % Пропускаем сигнал через линию связи
for k=1:N/2-1
Sp2(N/2+k+1)=real(Sp2(N/2-k+1))-1i*imag(Sp2(N/2-k+1));
end
S2=ifft(Sp2);
% ------------ Наложение шума после линии связи -------------------------
% SNR=0.4; % соотношение энергий сигнала и шума, в разах
% S3=awgn(S2,-13.4,'measured');
% Sp3=fft(S3);
% ACH_Sp3 = abs(Sp3); % АЧХ
% ------------ Полосовой фильтр в приемнике -----------------------------
g = 13; % << число ненулевых гармоник огибающей
F1 = zeros(1,N);
F1(Knes-g+1:Knes+g+1)=1; % формируем окно полосового фильтра
F1(N-Knes-g+1:N-Knes+g+1)=1;
Sp4=F1.*Sp3; % пропускаем сигнал через фильтр
% ------------ Выпрямитель в приемнике ----------------------------------
S4=ifft(Sp4); % после фильтрации ПФ переходим во временную область
S5=abs(S4); % выпрямляем сигнал
% ------------ Фильтр нижнних частот в приемнике ------------------------
Sp5=fft(S5); % для фильтрации ФНЧ переходим в частотную область
% спектр будет комплексно-сопрояженный с постоянной составляющей,
% поэтому занулять его нужно симметрично середине
Sp6=Sp5;
g=13; % число гармоник, которое пропустит ФНЧ
Sp6((2+g):(N-g))=0; % ФНЧ: зануляем в спектре гармоники с номером больше g
S6=ifft(Sp6); % после фильтрации ФНЧ переходим во временную область
%----------- Вычисление задержки сигнала по ФЧХ -------------------------
% определяем задержку в радианах для основной гармоники сигнала,
% чтобы синхронизировать приемник и передатчик
dt=FCH(3);
disp ('dt')
disp (dt)
dt=round(dt/(2*pi)*N); % переводим из радиан в отсчеты во временной области
disp ('dt2')
disp (dt)
%--------------- Определяем моменты измерения сигнала -------------------
sync=zeros(1,M);
sync(1)=(N/M)/2-dt; % первый строб - посередине первого символа + задержка
for i=2:M
sync(i)=rem(sync(i-1)+N/M, N); % сложение в кольце по модулю N
end
%----------- Пороговый элемент -------------------------------
bit2=zeros(1,M);
for i=1:M
if(S6(sync(i))>0.3)
bit2(i)=1;
else
bit2(i)=0;
end
end
%----------- Считаем число ошибок ---------------------------------------
err=sum(abs(bit-bit2));
disp('Число ошибок:');
disp(err);
err1=0;
err2=0;
for i=2:2:M
if (bit2(i) ~= bit(i))
err1=err1+1;
end
end
for n=1:2:M
if (bit2(n) ~= bit(n))
err2=err2+1;
end
end
occurrenceErr1(end+1)=err1/26;
occurrenceErr2(end+1)=err2/26;
overAllOccurrenceErr(end+1)=err/26;
end
probErr1(end+1)=sum(occurrenceErr1)/V(end);
probErr2(end+1)=sum(occurrenceErr2)/V(end);
overAllProbErr(end+1)=sum(overAllOccurrenceErr)/V(end);
end
HH=[100:500:5000];
figure(1);
plot(HH,overAllProbErr,HH,probErr1,HH,probErr2);
title ('Вероятность ошибки в зависимости от значения Протяженности линии связи');
xlabel('Значение l');
ylabel('Вероятность ошибки');
legend('Общая вероятность ошибки', 'Вероятность ошибки первого рода','Вероятность ошибки второго рода'); |