Harmonische Verzerrungen an einer nichtlinearen Kennlinie

© C. Roppel, Fachhochschule Schmalkalden, Fakultät Elektrotechnik, 2010

Beschreibung

Wird ein sinusförmiges Signal über ein lineares System übertragen, so erhält man am Ausgang ein Signal gleicher Frequenz. Amplitude und Phase werden von der Übertragungsfunktion H(f) des Systems bestimmt. Ausgangssignale bei anderen Frequenzen können nur bei nichtlinearen Systemen auftauchen. Als Beispiel wird der nichtlineare Zusammenhang
	y = x + (Subscript[c, 1]) (x^2) + (Subscript[c, 2]) (x^3)
betrachtet. Das Einangssignal x ist ein Sinus mit der Frequenz 1 kHz und der Amplitude 1. Das obere Bild zeigt das Ausgangssignal y und das untere Bild dessen Fourier-Spektrum (berechnet mit Hilfe der diskreten Fourier-Transformation, DFT). Je nach Wahl der Koeffizienten (Subscript[c, 1]) und (Subscript[c, 2]) enthält das Ausgangssignal auch spektrale Komponenten bei ungeradzahligen bzw. geradzahligen Vielfachen der Grundfrequenz 1 kHz. Als weitere nichtlineare Funktion kann eine Begrenzung der Amplitude (Clipping) des Ausgangssignals eingestellt werden.

Vgl. auch Kapitel 2.1 in [Roppel, C.: Grundlagen der digitalen Kommunikationstechnik, Hanser Verlag, 2006].

nbr =4096;
f0 = 1000;
fs = 16000;
x = Table[Sin[2 π f0 i], {i, 0, (nbr - 1)/fs, 1/fs}];

Manipulate[
y = x + c1 (x^2)+ c2 (x^3);
If[clipping == True, z = Clip[y, {-level, level}], z = y];
spectrum= (2/nbr)Take[Abs[Fourier[z, FourierParameters->{1,-1}]], nbr/2];
t = Table[t, {t, 0, 80/fs, 1/fs}];
f = Table[f, {f, 0, fs (nbr-1)/(2 nbr), fs/nbr}];
GraphicsColumn[{ListPlot[Transpose[{t, Take[z, 81]}], PlotRange->{-2, 2},Joined->True, PlotStyle->{{RGBColor[0,0,1]}},  Frame->True,FrameLabel->{{None, None}, {"t [s]","Signal"}}, FrameTicks->{Automatic, Automatic}, AspectRatio->0.4, ImageSize->{400,200}],
ListPlot[Transpose[{f, spectrum}], PlotRange->{-0.1, 1.5}, Joined->True,
 Frame->True, Axes->True, PlotRange->All, FrameLabel->{{None, None}, {"f [Hz]", "DFT"}}, FrameTicks->{Automatic, Automatic}, AspectRatio->0.4, PlotRangeClipping->True, ImageSize->{400,200}]}],
Style["Koeffizienten",Bold],
{{c1, 0, "(Subscript[c, 1])"}, -0.5, 0.5, 0.01,Appearance->"Labeled",ImageSize->Small},
{{c2, 0, "(Subscript[c, 2])"}, -0.5, 0.5, 0.01,Appearance->"Labeled",ImageSize->Small},
Delimiter,
Style["Clipping",Bold],
{{clipping,False,""},{True,False}},
{{level, 0.8, "Amplitude"}, 0.5, 1, 0.01,Appearance->"Labeled",ImageSize->Small},
ControlPlacement->Left, TrackedSymbols->{c1, c2, clipping, level}, SaveDefinitions->True]