initial commit

master
Eggert Jung 2 years ago
commit 7b19deab4c

File diff suppressed because one or more lines are too long

@ -0,0 +1,134 @@
%==========================================================================
% Rechnerübung zur Signalübertragung II
% Versuch 1: Fehlerwahrscheinlichkeit
%==========================================================================
%--------------------------------------------------------------------------
% Teil 1.1 Verteilungsdichtefunktion von weißem, gauß-verteiltem Rauschen
%--------------------------------------------------------------------------
clear all;
close all;
clc;
% Dargestellter Bereich
x = -9:0.1:9;
% Mittelwert des Rauschens
m = 0;
% Standardabweichung bzw. Leistung
sigma = 1;
% Gauß-Verteilungsdichtefunktion
py1 = gauss_pdf(x,sigma,m);
sigma = 2;
py2 = gauss_pdf(x,sigma,m);
% py1 und py2 plotten
figure(1)
axis([-3 3 0 0.5])
plot(x,py1,'LineWidth',2.5,'Color',[1 0 0])
axis([-3 3 0 0.5])
grid on
hold on
plot(x,py2,'LineWidth',2.5,'Color',[0 0 1])
title('Abbildung 1: Verlauf der Verteilungsdichtefunktion eines Gauß-Prozesses für sigma1=1.0 und sigma2=2.0')
xlabel('x')
ylabel('py1(x,1.0,0.0) (rot), py2(x,2.0,0.0) (blau)')
hold off
%--------------------------------------------------------------------------
% Teil 1.2 Sendestatistik bei bipolarer Übertragung
%--------------------------------------------------------------------------
% U0 = 0 wird mit der Wahrscheinlichkeit p0 und U1 = +2 mit der
% Wahrscheinlichkeit p1 gesendet.
% Bei optimal codierter Quelle gilt p0 = 0.5
% Hinweis zur Frage a): Hier können Sie p0 ändern -->
p0 = 0.5;
p1 = 1 - p0;
% Verteilungsdichtefunktion am Kanalausgang für sigma = 1:
p0_py0 = p0*py1;
figure(2)
axis([-2 4 0 0.4])
plot(x,p0_py0,'LineWidth',2.5,'Color',[1 0 0])
axis([-2 4 0 0.4])
grid on
hold on
p1_py1 = p1*gauss_pdf(x,1,2);
plot(x,p1_py1,'LineWidth',2.5,'Color',[0 0 1])
title('Abbildung 2: Verlauf der Verteilungsdichtefunktionen mit sigma=1')
xlabel('x')
ylabel('p0.py0(x,1.0,0.0) (rot), p1.py1(x,1.0,2.0) (blau)')
hold off
% Verteilungsdichtefunktion am Kanalausgang für sigma = 2:
p0_py0 = p0*gauss_pdf(x,2,0);
figure(3)
axis([-4 6 0 0.2])
plot(x,p0_py0,'LineWidth',2.5,'Color',[1 0 0])
axis([-4 6 0 0.2])
grid on
hold on
p1_py1 = p1*gauss_pdf(x,2,2);
plot(x,p1_py1,'LineWidth',2.5,'Color',[0 0 1])
title('Abbildung 3: Verlauf der Verteilungsdichtefunktionen mit sigma=2')
xlabel('x')
ylabel('p0.py0(x,2.0,0.0) (rot), p1.py1(x,2.0,2.0) (blau)')
hold off
% Verteilungsdichtefunktion mit höherem Sendepegel
% U0 = 0, U1 = +4
p0_py0 = p0*gauss_pdf(x,2,0);
figure(4)
axis([-4 8 0 0.2])
plot(x,p0_py0,'LineWidth',2.5,'Color',[1 0 0])
axis([-4 8 0 0.2])
grid on
hold on
p1_py1 = p1*gauss_pdf(x,2,4);
plot(x,p1_py1,'LineWidth',2.5,'Color',[0 0 1])
title('Abbildung 4: Verlauf der Verteilungsdichtefunktionen bei höherer Rauschleistung und höherem Sendepegel')
xlabel('x')
ylabel('p0.py0(x,2.0,0.0) (rot), p1.py1(x,2.0,4.0) (blau)')
hold off
%--------------------------------------------------------------------------
% Teil 1.3 Symbolfehlerwahrscheinlichkeit bei mehrstufiger Übertragung
%--------------------------------------------------------------------------
% Die Symbolfehlerwahrscheinlichkeiten für bestimmte SNR
SNR = 0:0.01:100;
figure(5)
% stufe = 2
wk2 = symbol_fwk(SNR,2);
semilogy(10*log10(SNR),wk2,'LineWidth',2.5,'Color',[1 0 0]);
axis([0 20 1e-10 1])
hold on
grid on
% stufe = 4
wk4 = symbol_fwk(SNR,4);
semilogy(10*log10(SNR),wk4,'LineWidth',2.5,'Color',[0 0 1]);
% stufe = 6
wk6 = symbol_fwk(SNR,6);
semilogy(10*log10(SNR),wk6,'LineWidth',2.5,'Color',[0 1 0]);
% stufe = 8
wk8 = symbol_fwk(SNR,8);
semilogy(10*log10(SNR),wk8,'LineWidth',2.5,'Color',[1 0 1]);
% stufe = 16
wk16 = symbol_fwk(SNR,16);
semilogy(10*log10(SNR),wk16,'LineWidth',2.5,'Color',[0 1 1]);
title('Abbildung 5: Die Symbolfehlerwahrscheinlichkeit in Abhängigkeit vom SNR')
xlabel('10*log10(SNR)')
ylabel('P(SNR,2) (rot), P(SNR,4) (blau), P(SNR,6) (grün), P(SNR,8) (magenta), P(SNR,16) (cyan)')

@ -0,0 +1,5 @@
function p=fehlerwahrscheinlichkeit(Ue, func0, func1)
err0 = integral(func0, Ue, Inf);
err1 = integral(func1, -Inf, Ue);
p=err0+err1;
end

@ -0,0 +1,11 @@
function p = gauss_pdf(x,sigma,m)
% gauss_pdf berechnet die Verteilungsdichtefunktion
% out = gauss_pdf(x,sigma,m)
% INPUT:
% x - Dargestellter Bereich
% sigma - Mittelwert des Rauschens
% m - Standardabweichung bzw. Leistung
% OUTPUT:
% p - Gauß-Verteilungsdichtefunktion
p = 1/sqrt(2*pi*sigma.^2)*exp(-(x-m).^2/(2*sigma.^2));
end

@ -0,0 +1,11 @@
function wk = symbol_fwk(SNR,stufe)
% symbol_fwk berechnen die Symbolfehlerwahrscheinlichkeit für m-stufigen
% Systemen
% out = gauss_pdf(x,sigma,m)
% INPUT:
% SNR - Signal-zu-Rausch-Verhältnis
% stufe - Amplitudenstufen
% OUTPUT:
% wk - Symbolfehlerwahrscheinlichkeit
wk =(stufe-1)/stufe*(1-erf((3/(stufe.^2-1)*SNR/2).^0.5));
end

File diff suppressed because one or more lines are too long

@ -0,0 +1,188 @@
%==========================================================================
% 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)

@ -0,0 +1,31 @@
function bit_stats(g_TD, TD, a)
% 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)
end

@ -0,0 +1,36 @@
function bit_stats_noise(a, y, C, n_max)
% 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)
end

File diff suppressed because one or more lines are too long

@ -0,0 +1,106 @@
%==========================================================================
% Rechnerübung zur Signalübertragung II
% Versuch 3: Leistungsdichtespektrum, Autokorrelationsfunktion
%==========================================================================
%--------------------------------------------------------------------------
% Teil 3.1 Berechnung der Autokorrelationsfunktion
%--------------------------------------------------------------------------
clear all;
close all;
clc;
% Anzahl der Messwerte:
% Sie können e ändern -->
e = 10;
N = 2^e;
% Erzeugung der Musterfunktion des Eingangsprozesses:
s = rand(1,N) - 0.5;
% Dargestellte Werte: n=0...N
figure(1)
plot(s)
axis([0 N -0.5 0.5]);
title('Abbildung 1: Eine Musterfunktion des Eingangsprozesses')
xlabel('n')
ylabel('s(n)')
% Autokorrelationsfunktion berechnen
Autocorr = xcorr(s);
figure(2)
plot(Autocorr)
axis([0 2.*N+1 min(Autocorr) max(Autocorr)]);
title('Abbildung 2: Autokorrelationsfunktion des Eingangsprozesses')
xlabel('m')
ylabel('Autokorrelationsfunktion xcorr(s(n))')
% Leistungsdichtespektrum aus Autokorrelationsfunktion berechnen
Y = fftshift(fft(Autocorr,2^(e+1)));
psd_eingang = abs(Y);
% plot(Pyy)
figure(3)
plot(psd_eingang);
axis([0 length(psd_eingang) min(psd_eingang) max(psd_eingang)]);
title('Abbildung 3: Leistungsdichtespektrum des Eingangsprozesses')
xlabel('m')
ylabel('Leistungsdichtespektrum')
%--------------------------------------------------------------------------
% Teil 3.2 Einfluss des Bandpasses
%--------------------------------------------------------------------------
% Mittenfrequenz des Bandpasses
f_mf = 100;
% Bandbreite des Bandpasses
f_bb = 35;
% Dargestellter Bereich
n = 1:length(psd_eingang);
% Übertragungsfunktion des Bandpasses
h_bp = heaviside(n-f_mf+f_bb/2)-heaviside(n-f_mf-f_bb/2)...
+heaviside(n+f_mf+f_bb/2-2^(e+1))-heaviside(n+f_mf-f_bb/2-2^(e+1));
figure(4)
plot(n,h_bp);
axis([0 length(h_bp) 0 2]);
title('Abbildung 4: Übertragungsfunktion des Bandpasses')
xlabel('n')
ylabel('H_B_P')
% Leistungsdichtespektrum des Ausgangsprozesses
psd_ausgang = psd_eingang.*abs(h_bp).^2;
figure(5)
plot(psd_ausgang);
title('Abbildung 5: Leistungsdichtespektrum des Ausgangsprozesses')
axis([0 length(psd_ausgang) min(psd_eingang) max(psd_ausgang)]);
xlabel('n')
ylabel('Leistungsdichtespektrum')
% Autokorrelationsfunktion des Ausgangssignals
Autocorr_ausgang = abs(fftshift(ifft(psd_ausgang)));
figure(6)
plot(n,Autocorr_ausgang)
title('Abbildung 6: Betrag der Autokorrelationsfunktion des Ausgangssignals')
axis([0 length(Autocorr_ausgang) min(Autocorr_ausgang) max(Autocorr_ausgang)]);
xlabel('n')
ylabel('Betrag der Autokorrelationsfunktion')
% Autokorrelationsfunktion des Ausgangssignals (theorie)
% Dargestellter Zeitbereich
tau = -0.2:0.001:0.2;
% Spektrale Leistungsdichte
N0 = 1.0;
% Autokorreationsfunktion
Autocorr_ausgang_theorie = abs(N0*f_bb*sinc(f_bb*tau)*2.*cos(2*pi*f_mf*tau));
figure(7)
plot(tau,Autocorr_ausgang_theorie)
title('Abbildung 7: Betrag der Autokorrelationsfunktion des Ausgangssignals, theoretischer Verlauf')
axis([-0.2 0.2 min(Autocorr_ausgang_theorie) max(Autocorr_ausgang_theorie)]);
xlabel('tau')
ylabel('Betrag der Autokorrelationsfuktion (Theorie)')
Loading…
Cancel
Save