You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
5.4 KiB
Matlab

%==========================================================================
% Rechnerübung zur Signalübertragung II
% Versuch 2: Nyquist-Kriterium
%==========================================================================
%--------------------------------------------------------------------------
% Teil 2.1 Sendesignal und Ausgangssignal des Korrelationsfilters erzeugen
%--------------------------------------------------------------------------
clear all;
close all;
clc;
% Einige Definitionen
% Definition der Taktzeit:
T = 1.0;
% Dargestellter Zeitbereich:
t = 0:0.005:9;
% Definition einer Beispielbinärfolge mit der Länge = 8
% Sie können die Binärfolge ändern -->
a = [1 1 0 0 1 0 0 0];
% Sendesignal m(t)
m = 0;
for i = 0:7
m = m + a(i+1)*(heaviside(t-i)-heaviside(t-i-1));
end
% m(t) plotten
figure(1)
plot(t,m,'LineWidth',2.5,'Color',[1 0 0]);
axis([0 8 -0.5 1.5]);
grid on
hold off
title('Abbildung 2: Verlauf des Sendesignals m(t)')
xlabel('t')
ylabel('m(t)')
% Ausgangssignal des Korrelationsfilters g(t)
g = 0;
for i = 0:7
g = g + a(i+1)*(((heaviside(t-i)-heaviside(t-i-1)).*(t-i))...
+((heaviside(t-i-1)-heaviside(t-i-2)).*(i+2-t))) ;
end
% g(t) plotten
figure(2)
plot(t,g,'LineWidth',2.5,'Color',[0 0 1]);
axis([0 8 -0.5 1.5]);
grid on
title('Abbildung 3: Ausgangssignal des Korrelationsfilters im Falle des ungestörten Kanals')
xlabel('t')
ylabel('g(t)')
%--------------------------------------------------------------------------
% Teil 2.2 Erhöhung der Dauer der Autokorrelationsfunktion
%--------------------------------------------------------------------------
% TD ist die Dauer der Autokorrelationsfunktion
% Grundeinstellung TD = 1.0, hier kann die Dauer beispielsweise auf den
% Wert 1.4 erhöht werden.
% Sie können TD ändern -->
TD = 1.0;
Dif = TD - 1;
% Ausgangssignal des Korrelationsfilters g(t)
figure(3);
hold on;
g_TD = 0;
g_einzel = zeros(8,1801);
for i = 0:7
g_einzel(i+1,:) = a(i+1)*(((heaviside(t-i+Dif)-heaviside(t-i-1)).*(t/TD-i/TD+(1-1/TD)))...
+((heaviside(t-i-1)-heaviside(t-i-2-Dif)).*(i/TD-t/TD+(1+TD)/TD)));
% die einzelnen Autokorrelationsfunktionen plotten
switch i
case 0
plot(t,g_einzel(i+1,:),'b--','LineWidth',2);
case 1
plot(t,g_einzel(i+1,:),'r--','LineWidth',2);
case 2
plot(t,g_einzel(i+1,:),'c--','LineWidth',2);
case 3
plot(t,g_einzel(i+1,:),'m--','LineWidth',2);
end
g_TD = g_TD + a(i+1)*(((heaviside(t-i+Dif)-heaviside(t-i-1)).*(t/TD-i/TD+(1-1/TD)))...
+((heaviside(t-i-1)-heaviside(t-i-2-Dif)).*(i/TD-t/TD+(1+TD)/TD)));
end
% g(t) plotten
plot(t,g_TD,'g');
axis([0 8 -0.5 2]);
grid on
title('Abbildung 4: Ausgangssignal des Korrelationsfilter im Falle des ungestörten Kanals mit 4 einzeln eingezeichneten verschobenen Autokorrelationsfunktionen')
xlabel('t')
ylabel('Summe g(t)=grün, einzelne g(t-T)=blau,g(t-2T)=rot,g(t-3T)=cyan,g(t-4T)=magenta')
% Abtastung der g_TD
% Eingestellte Schwelle: C=0.5
C = 0.5;
g_get(1,8) = 0;
for i = 1:8
if g_TD(i*200+1) > C
g_get(i) = 1;
else g_get(i) = 0;
end
end
% Zum Vergleich sind hier die gesendeten Datenbits a[i] und die emfangenen
% Datenbits g_TD[i] untereinander dargestellt --> auf Command Window
disp('TD:')
disp(TD)
disp('die gesendeten Datenbits a[i]:')
disp(a)
disp('die empfangenen Datenbits g[i]:')
disp(g_get)
% Anzahl der fehlerhaften Datenbits
% Verändern Sie die Dauer der Autokorrelationsfunktion TD auf höhere
% Werte!
error1 = 0;
for i = 1:8
error1 = error1 + abs(g_get(i) - a(i));
end
disp('Anzahl der fehlerhaften Datenbits (ohne Rauschen):')
disp(error1)
%--------------------------------------------------------------------------
% Teil 2.3 Der Einfluss des Rauschens
%--------------------------------------------------------------------------
% Maximalwert des Rauschens
% Sie können n_max ändern -->
n_max = 0.29;
% Rauschsignal
n_e = 2*(n_max*rand(1,length(t))-n_max/2);
% Summensignal am Ausgang des Empfängsfilters
y = g_TD + n_e;
% Verlauf einer Musterfunktion des Ausgangssignals y(t)
figure(4)
plot(t,y,'LineWidth',0.5,'Color',[1 0 0]);
axis([0 8 -0.5 2]);
grid on
title('Abbildung 5: Das verrauschte Ausgangssignal des Empfängsfilters')
xlabel('t')
ylabel('y(t)')
% Schätzung der Datenbits aus den verrauschten Abtastwerten: a_en =
% wenn(y_i>C,1,0)
y_get(1,8) = 0;
y_i(1,8) = 0;
for i = 1:8
y_i(i) = y(i*200+1);
if y(i*200+1) > C
y_get(i) = 1;
else y_get(i) = 0;
end
end
% Zum Vergleich sind hier die gesendeten Datenbits a[i], die verrauschten
% Abtastwerte y[i] am Ausgang des Empfängers sowie die geschätzten
% Datenbits a[en,i] angegeben --> auf Command Window
disp('n_max:')
disp(n_max)
disp('die gesendeten Datenbits a[i]:')
disp(a)
disp('die verrauschten Abtastwerte y[i]:')
disp(y_i)
disp('die geschätzten Datenbits a_en[i]:')
disp(y_get)
% Anzahl der fehlerhaften Datenbits
% Experimentieren Sie mit verschiedenen Rausch-Stärken(Parameter n_max)
% und untersuchen Sie die Abtastwerte y[i].
% Beachten Sie die Anzahl der fehlerhaften Datenbits.
error2 = 0;
for i = 1:8
error2 = error2 + abs(y_get(i) - a(i));
end
disp('Anzahl der fehlerhaften Datenbits (mit Rauschen):')
disp(error2)