Ein Beispiel für die Berechnung der Signalreaktion mithilfe der Fourier-Transformation in MATLAB

Bei der Lösung von Problemen der Datenübertragung durch durch Frequenzkennlinien dargestellte Leitungen werden Fourier-Transformationen angewendet - die Übertragung von Signalen vom Zeitbereich in den Frequenzbereich und umgekehrt. Die MATLAB-Umgebung verfügt über alle Funktionen zur Lösung solcher Probleme. In dieser Arbeit wird ein Beispiel für die Berechnung der Reaktion eines über eine Leitung übertragenen Signals in MATLAB analysiert, dessen Charakteristik bei Frequenzen gemessen wird, die nicht mit der Datenübertragungsfrequenz übereinstimmen. Ich hoffe, dass dieses Beispiel das Verständnis der Funktionen der Signalumwandlungstechnologie in der MATLAB-Umgebung erleichtert.

Aufgabenbedingung


Es ist notwendig, die Änderung der Form des binären digitalen Signals zu bestimmen, das durch das Filter und die Signalleitung läuft. Das Signal wird durch die Amplitude und die Übertragungsrate eingestellt. Das auf die Datenübertragungsfrequenz normierte Filter zweiter Ordnung wird durch Zeitkonstanten eingestellt. Die Übertragungsfunktion der Signalleitung wird durch den gemessenen Frequenzgang in komplexer Form dargestellt.

Die zum Berechnen und Anzeigen von Daten verwendete Umgebung ist MATLAB R2015a.
Die folgenden auf der Website www.StatEye.org veröffentlichten Beziehungen für die Version der StatEye 3.0-GUI-Methode [1, 2, 3] wurden als Beispiel für die Anfangsdaten verwendet.

Datenrate bps = 10,3125 Gbit / s. Die Zeitkonstanten des normalisierten Filters zweiter Ordnung sind gleich, ihr Kehrwert ist ¾ der Datenübertragungsfrequenz. Die Signalleitung wird durch einen Frequenzgang dargestellt. Die Charakteristik wurde bei Kanal f = 0,006495: 0,0012475: 20 GHz gemessen. Die angegebene Anzahl von Abtastpunkten der Fourier-Transformation: Punkte = 2 ^ 13.

Abbildung 1 zeigt die in diesem Dokument diskutierten Datenübertragungs-, Sequenz- und Datenverarbeitungsergebnisse. Der Übergang vom Zeitbereich zum Frequenzbereich und umgekehrt erfolgt mit dem Fast Fourier Transform (FFT) -Algorithmus.
Bild
Abbildung 1. Datenkanal. Eingangssignal iSignal.Tx, Ausgangssignal des Filters iSignal.Filter_out, Ausgangssignalleitung iSignal.Rx. Die im Diagramm gezeigten Eigenschaften werden unten diskutiert.

Berechnungssequenz


In dieser Arbeit werden die Hauptberechnungen im Frequenzbereich durchgeführt. Hierzu wurde das ursprüngliche Signal aus dem Zeitbereich unter Verwendung der Fourier-Transformation in den Frequenzbereich übertragen. Durch Multiplizieren der spektralen Eigenschaften des Signals, des Filters und der Signalleitung wurde das Ausgangssignal des Pfades gefunden, das durch die inverse Fourier-Transformation vom Frequenzbereich in den Zeitbereich übertragen wird.

Die Datenübertragungsrate ist doppelt so hoch wie die Frequenz, mit der Daten übertragen werden. Die maximale Frequenz der gemessenen Signalleitung max (Kanal.f) = 20 GHz. Bei dieser Frequenz können Daten mit einer Geschwindigkeit von 40 Gbit / s (als 2 * max (Kanal.f)) übertragen werden.

Die maximale Datenübertragungsrate, die die maximale Übertragungsrate auf der Signalleitung von 40 Gbit / s und eine Mehrfachübertragungsrate von bps = 10,3125 Gbit / s nicht überschreitet, beträgt fmax = 30,9375 Gbit / s, die Multiplizität N = 3 (N = fmax / bps). Ferner wird fmax als Grenzfrequenz zum Berechnen der Antwort des Signals unter Verwendung der Fourier-Transformation verwendet.

Übersetzung des Eingangssignals in den Frequenzbereich


Zeitdiskriminierung zum Aufbau des Eingangssignals (Datenbit) im Zeitbereich Ts = 1 / fmax; Ts = 3,232e-11 s. Normalisiert in Bezug auf die Signaldauer besteht die Zeitskala aus 2 ^ 13 Punkten (Punkten), die Skala enthält das folgende Array von Punkten Zeit = bps / Ts. * (1: Punkte). Ein diskretes Einzelsignal mit einer Übertragungsrate von bps = 10,3125 Gbit / s und einer Quantisierung mit einer Periode Ts = 1 / fmax besteht aus drei Punkten im Bereich von 10 bis 11 Einheiten normalisierter Zeit. Ein Signal mit Einheitsamplitude kann an einer anderen Stelle auf der Timeline erstellt werden. Es ist jedoch besser, von den Rändern zurückzutreten, um den Hintergrund und den Übergangsprozess des Ausgangssignals vollständig zu sehen. Ein Impulssignal (Datenbit), das mit den folgenden MATLAB-Befehlen erstellt wurde, ist in Abbildung 2 dargestellt.

iSignal.Tx(1:size(time,2)) = 0; t0 = max(find(time<=10)); t1 = max(find(time<11)); iSignal.Tx(t0:t1) = 1.0; 

Bild
Abbildung 2. Eingangsimpulssignal iSignal.Tx, Datenbit.

Die Übersetzung des iSignal.Tx-Signals in den Frequenzbereich wird durch die folgenden FFT-Funktionen durchgeführt.

 iSignal.shiftedPSD = fft(iSignal.Tx); iSignal.PSD = fftshift(iSignal.shiftedPSD); 

Die Fourier-Transformationsfunktion fft konstruiert ein symmetrisches Spektrum des Signals in den Bereichen positiver und negativer Frequenzen, deren maximale Frequenz in der Mitte des Spektrums liegt (siehe Abbildung 3). Die fftshift-Funktion stellt das Spektrum wieder her, indem die Nullfrequenz des Signals wie in Abbildung 4 gezeigt in die Mitte verschoben wird.

Die Auflösung der Spektrumsfrequenz beträgt fs = fmax / Punkte; Die Frequenzfrequenzen reichen von -fmax / 2 bis fmax / 2-fs und sind gleich f = -fmax / 2: fs: fmax / 2-fs;

Bild
Abbildung 3. Amplitudenantwort des verschobenen Spektrums des mit der FFT erhaltenen iSignal.Tx-Signals.

Bild
Abbildung 4. Amplitudenantwort des rekonstruierten Spektrums des in Abbildung 3 gezeigten iSignal.Tx-Signals. 2 ^ 13 Beispiele werden vorgestellt. Die durchschnittliche Anzahl bei 4097 entspricht der Frequenz Null. Negative Frequenzen befinden sich auf der linken Seite (von 1 bis 4096 Punkten) und der Bereich der positiven Frequenzen auf der rechten Seite (von 4098 bis 8192 Punkten).

Übertragungsfunktion des normalisierten Tiefpassfilters


In diesem Beispiel hat die Übertragungsfunktion des Filters zweiter Ordnung die Form

Bild
wobei T1 und T2 Filterzeitkonstanten sind. Die Frequenzen 1 / T1 sind gleich und 1 / T2 werden relativ zu der Frequenz eingestellt, mit der die Daten übertragen werden: 1 / T1 = 1 / T2 = 0,75 * bps (bps = 10,3125 Gbit / s).

Normalisierte Filterbandbreite

 f_nrm =fmax/bps/points.*(-points/2:points/2-1). 

Betreiber

 s = f_nrm .* j; 

Die Amplitudenphasenkennlinie des normalisierten Filters für positive und negative Frequenzen, die in Bezug auf die Signalübertragungsfrequenz normalisiert sind, ist in 5 gezeigt. Die logarithmische Amplitudenfrequenzkennlinie des Filters ist in 6 gezeigt.

Bild
Abbildung 5. Die Amplituden-Phasen-Charakteristik eines normalisierten Filters

Bild
Abbildung 6. Logarithmischer Amplituden-Phasen-Frequenzgang eines normalisierten Filters. Die blaue gestrichelte Linie zeigt die Position der Filterfrequenz mit einem Wert von 0,75 der Frequenz, mit der Daten übertragen werden. Bei dieser Frequenz (1 / T1 = 1 / T2) beträgt der Transmissionskoeffizient des Filters zweiter Ordnung -6 Dezibel. Die rote gestrichelte Linie zeigt die Einheitsfrequenz an, mit der Daten übertragen werden.

Übersetzung der Messergebnisse der Signalleitung in die Art der Übertragungsfunktion


Die gemessene Amplituden-Phasen-Charakteristik der Signalleitung umfasst 1599 Abtastwerte im Band bis 20 GHz mit einem festen Schritt von 12,475 MHz. Es enthält die folgenden Frequenzwerte: channel.f = 0,006495: 0,0012475: 20 GHz. Anfangs wurde die Signalleitung durch eine Kennlinie mit vier Anschlüssen dargestellt. Diese Eigenschaft wurde transformiert und wird im Beispiel als eindimensionale komplexe Funktion verwendet.

Die als Ergebnis der Messung erhaltenen charakteristischen Signalleitungsfrequenzen stimmen nicht mit den Frequenzen des Eingangssignalspektrums überein, die ein Vielfaches der Datenübertragungsfrequenz sind. Außerdem enthält das Signalleitungsspektrum nur positive Frequenzen und keine Frequenzen im Nullbereich. Das Eingangssignalspektrum enthält positive, Null- und negative Frequenzen.
Um die Eigenschaften der Signalleitung in eine Übertragungsfunktion umzuwandeln - eine Eigenschaft, deren Frequenzen mit den Frequenzen des Spektrums des Eingangssignals übereinstimmen, werden die folgenden Schritte ausgeführt.

1. Die Berechnung der Amplitude der Eigenschaften der Linie bei einer Frequenz von Null durch Extrapolation. Hierzu werden aus zehn Punkten der Amplitudenkennlinie, die der Frequenz Null am nächsten liegen, die Koeffizienten eines linearen Polynoms gefunden, die sich der Amplitudenkennlinie annähern:

 [a] = polyfit(channel.f(1:10), channel.abs(1:10), 1); 

Der zweite gefundene Polynomkoeffizient ist gleich der Amplitude der Charakteristik bei einer Frequenz von Null:

 channel.dc = a(2); 

2. Die Phasenantwort bei einer Frequenz von Null wird gleich Null genommen.

 channel.dcPhase = 0.00; 

3. Die Neuberechnung der Amplitudenkanal- und Phasenkanalphaseneigenschaften der Signalleitung mit Werten bei einer Frequenz von Null wird an der Frequenz des Eingangssignalspektrums (f = -fmax / 2: fmax / Punkte: fmax / 2-fmax / Punkte) mit Extrapolation der Eigenschaften auf durchgeführt Bereich von Null und negativen Frequenzen:

 ichannel.abs = interp1([0 channel.f], [channel.dc channel.abs], abs(f), 'linear', 'extrap'); ichannel.phase = interp1([0 channel.f], [channel.dcPhase unwrap(channel.phase)], abs(f), 'linear', 'extrap'); ichannel.s = ichannel.abs .* exp(+j.*ichannel.phase); ichannel.tf = real(ichannel.s) + j*imag(ichannel.s) .* sign(f); 

Die erhaltene Übertragungsfunktion - der Amplituden-Phasen-Frequenzgang des Kanals im Niederfrequenzbereich ist in Abbildung 7 dargestellt. Die Amplituden-Frequenz-Eigenschaften der gemessenen Signalleitung und die berechnete Übertragungsfunktion in den vollen Frequenzbereichen sind in Abbildung 8 dargestellt. Die gleichen Eigenschaften im Phasenraum sind in Abbildung 9 dargestellt.

Bild
Abbildung 7. Die Übertragungsfunktion der Signalleitung im Niederfrequenzbereich. Rote und blaue Punkte zeigen diskrete Amplituden- bzw. Phaseneigenschaften an. Die Amplitudenantwort wird in Dezibel angegeben, die Phase im Bogenmaß. Die rosa Linie markiert die niedrigste Frequenz der gemessenen Charakteristik der Signalleitung. Der Übertragungskoeffizient bei einer Frequenz von Null beträgt 0,992.

Bild
Abbildung 8. Frequenzgang der Signalleitung. Blaue Punkte zeigen die komplexen Daten der gemessenen Linie an. Die berechnete symmetrische Abhängigkeit der Signalleitungsverstärkung bei den Frequenzen des Eingangssignalspektrums ist rot hervorgehoben. Im Nullfrequenzbereich ist diese Charakteristik in Abbildung 7 dargestellt.

Bild
Abbildung 9. Amplitudenphasenfrequenzkennlinien der gemessenen Datenleitung und ihres normalisierten Spektrums.

Berechnung der Signalantwort


Die Antwort (Antwort auf den Eingangseffekt) im Frequenzbereich wird erhalten, indem das Spektrum des Signals mit dem Produkt der Übertragungsfunktionen der Elemente multipliziert wird, die die Reaktion auf das Eingangssignal beziehen. In unserem Fall passiert das Signal das Filter und die Signalleitung.
Die inverse Fourier-Transformation ifft wird verwendet, um das Signal vom Frequenzbereich in den Zeitbereich zu übertragen.

Die Filterausgabe im Zeitbereich iSignal.Filter_out wird berechnet als

 TransFunction.PSD = iSignal.PSD .* Filter.PSD_Tx; TransFunction.shiftedPSD = ifftshift(TransFunction.PSD); iSignal.Filter_out = real(ifft(TransFunction.shiftedPSD)); 

Das Ausgangssignal der iSignal.Rx-Leitung ist gleich dem Produkt aus dem Spektrum des Eingangssignals und den Übertragungsfunktionen des Filters und der Signalleitung mit der anschließenden Übertragung des empfangenen Signals vom Frequenzbereich in den Zeitbereich.

 TransFunction.PSD = TransFunction.PSD .* ichannel.tf; TransFunction.shiftedPSD = ifftshift(TransFunction.PSD); iSignal.Rx = real(ifft(TransFunction.shiftedPSD)); 

Die Reaktion des Filters auf den idealen Eingangsimpuls und die Reaktion des Kanals sind in Abbildung 10 dargestellt.

Bild
Abbildung 10. Filterausgabe (rotes Diagramm) und Datenzeilenausgabe (grünes Diagramm). Filtereingangssignal - Ein einzelner Impuls ist in Abbildung 2 dargestellt. Der Signalleitungseingang ist das Filterausgangssignal.

Anwendung. Verwendeter M-Code MATLAB


Auflistung
 clear all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Ini data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% bps = 1.03125e+10; FilterParam = [0.75 0.75]; points = 2^13; load('channel'); N = floor(max(channel.f)*2/bps); fmax = N*bps; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Signal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % normalise all the scales for the bit rate time = bps/fmax .* (1:points); iSignal.Tx(1:size(time,2)) = 0; t0 = max(find(time<=10)); t1 = max(find(time<11)); iSignal.Tx(t0:t1) = 1.0; figure plot(time(1:t1+10), iSignal.Tx(1:t1+10),'b'); hold on plot(time(1:t1+10), iSignal.Tx(1:t1+10),'xb'); grid on xlabel('Normalised Time, tick Ts = 1/fmax'); ylabel('Normalised Amplitude'); title(['Pulse, data bit']); iSignal.shiftedPSD = fft(iSignal.Tx); figure plot(abs(iSignal.shiftedPSD),'c'); grid on xlabel('points, num'); ylabel('Amplitude'); title(['abs(fft(iSignal.Tx))']); iSignal.PSD = fftshift(iSignal.shiftedPSD); figure plot(abs(iSignal.PSD),'r'); grid on xlabel('points, num'); ylabel('Amplitude'); title(['abs(fftshift(fft(iSignal.Tx)))']); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Filter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f_nrm =fmax/bps/points.*(-points/2:points/2-1); s = f_nrm .* j; Filter_PSD = 1 ./(1 + s/FilterParam(1)) ./ (1 + s/FilterParam(2)); figure [AX,H1,H2] = plotyy (f_nrm, abs(Filter_PSD), f_nrm, phase(Filter_PSD)); hold(AX(1)); hold(AX(2)); set(H1,'LineWidth',2); grid(AX(2),'on'); xlabel('Normalised Frequency (Hz)'); set(get(AX(1),'Ylabel'),'String','Gain'); set(get(AX(2),'Ylabel'),'String','Phase, rad'); title(['Twopole filter [' sprintf(' %3.2f ', FilterParam) '] normalised to baud rate frequency']); figure plot_handles_Filter = plot(f_nrm(points/2 + 1:points), 20*log10(abs(Filter_PSD(points/2 + 1:points))), 'r', 'linewidth', 2); hold on stem_handles_br = stem(1, 20*log10(abs(Filter_PSD(max(find(f_nrm < 1))))), '-.ro'); hold on stem_handles_c = stem(FilterParam, [20*log10(abs(Filter_PSD(max(find(f_nrm < FilterParam(1)))))) 20*log10(abs(Filter_PSD(max(find(f_nrm < FilterParam(2))))))], '-.bo'); grid legend_handles = [plot_handles_Filter, stem_handles_br(1), stem_handles_c(1)]; legend(legend_handles, 'transfer function', 'filter attenuation at normalised baud rate', 'filter attenuation at normalised cutoff frequency', 3); xlabel('Normalised Frequency (Hz)'); ylabel('Magnitude (dB)'); title(['Twopole filter [' sprintf(' %3.2f ', FilterParam) '] normalised to baud rate frequency']); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Channel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % create negative frequencies, convert data to complex value, taking care about negative frequency channel.abs = abs(channel.s); channel.phase = angle(channel.s); %channel.s = channel.abs .* exp(+j.*channel.phase); [a] = polyfit(channel.f(1:10), channel.abs(1:10), 1); channel.dc = a(2); channel.dcPhase = 0.00; fs = fmax/points; % frequency step f = -fmax/2:fs:fmax/2-fs; % frequency matrix % create new data structure with linearly interpolated data ichannel.abs = interp1([0 channel.f], [channel.dc channel.abs], abs(f), 'linear', 'extrap'); ichannel.phase = interp1([0 channel.f], [channel.dcPhase unwrap(channel.phase)], abs(f), 'linear', 'extrap'); % correct for negative frequencies ichannel.s = ichannel.abs .* exp(+j.*ichannel.phase); ichannel.tf = real(ichannel.s) + j*imag(ichannel.s) .* sign(f); figure disp_points = 2*round(channel.f(1)/fs); stem_handles_br = stem(channel.f(1), angle(ichannel.tf(max(find(f < channel.f(1))))), '-.mo'); hold on plot_abs = plot(f(points/2-disp_points:points/2+disp_points), 20*log10(abs(ichannel.tf(points/2-disp_points:points/2+disp_points))), '.r', 'linewidth', 3); hold on plot_phase = plot(f(points/2-disp_points:points/2+disp_points), angle(ichannel.tf(points/2-disp_points:points/2+disp_points)), '.b', 'linewidth', 3); grid legend_handles = [plot_abs, plot_phase, stem_handles_br(1)]; legend(legend_handles, 'absolute value (dB)', 'phase (rad)', 'min data freq', 3); xlabel('Relative Frequency (Hz)'); ylabel('Magnitude'); title(sprintf('dc extrapolation. dc trans function=%4.3f, dc phase=%4.3f rad', abs(ichannel.tf(points/2+1)), angle(ichannel.tf(points/2+1)))); figure plot(channel.f, 20*log10(channel.abs), '.r', 'linewidth', 3); hold on plot(f, 20*log10(ichannel.abs), 'g'); grid on legend('Measured Data', 'Interpolated Data', 3); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); title(['Chnnel interpolated Data : ']); figure plot3(channel.f, real(channel.s), imag(channel.s),'r'); hold on plot3(f, real(ichannel.tf), imag(ichannel.tf),'g'); grid on legend('Measured Data', 'Interpolated Data'); xlabel('Frequency in Hz'); ylabel('Re(fwd transfer)'); zlabel('Im(fwd transfer)'); title(['Chnnel interpolated Data : ']); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Response %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % filter Output TransFunction.PSD = iSignal.PSD .* Filter_PSD; TransFunction.shiftedPSD = ifftshift(TransFunction.PSD); iSignal.Filter_out = real(ifft(TransFunction.shiftedPSD)); % pass through channel TransFunction.PSD = TransFunction.PSD .* ichannel.tf; TransFunction.shiftedPSD = ifftshift(TransFunction.PSD); iSignal.Rx = real(ifft(TransFunction.shiftedPSD)); figure plot(time, iSignal.Filter_out,'r'); hold on [max_Tx, time_maxTx] = max(iSignal.Filter_out); [min_Tx, time_minTx] = min(iSignal.Filter_out); [max_Rx, time_maxRx] = max(iSignal.Rx); dtime_p5= round((time_maxRx - time_maxTx)*time(1) -1); plot(time - dtime_p5, iSignal.Rx,'g'); hold on plot(time, iSignal.Filter_out,'rx'); axis([(time_maxTx*time(1) - 3) (time_maxTx*time(1) + 5) (min_Tx-0.15) (max_Tx+0.1)]) grid on legend('Filter out','Rx', 2); xlabel('Normalised Time'); ylabel('Normalised Amplitude'); title(sprintf('Transmit pulse (Tx) max= %4.3f; Response (Rx) max (h0)= %4.3f', max(iSignal.Filter_out), max(iSignal.Rx))); 


Bibliografische Liste


1. IEEE802.3ap. NRZ-Simulationsergebnisse mit 10,3125 Gbit / s unter Verwendung von „StatEye“ und „Signal-zu-Interferenz-Modell“ für kaskadierte Kanalkomponenten. Shannon Sawyer und Charles Moore / Agilent Technologies. 24. Januar 2005 www.ieee802.org/3/ap/public/jan05/sawyer_01_0105.pdf

2. Was ist StatEye? IEEE 803.3ap Task Force. 16. September 2004 www.ieee802.org/3/ap/public/signal_adhoc/ghiasi_01_0904.pdf

3. Stat Eye / IBM-Vereinbarung. Steve Anderson. Xilinx, Inc. www.ieee802.org/3/ap/public/nov04/anderson_01_1104.pdf

Source: https://habr.com/ru/post/de416497/


All Articles