Verfasst am: 28.07.2011, 15:15
Titel: Spektrum eines Impuls
Hallo,
ich benötige zur Analyse eines Impulses dessen Spektrum. Da es sich um einen nichtperiodischen Impuls handelt müsste man eigentlich das Fourier-Integral verwendet werden, da ich ein kontinuierliches Spektrum erwarte. Leider habe ich nur Grundkenntnisse im Matlab und benötige eure Hilfe.
Jetzt meine Frage kann ich diesen Impuls "siehe Anhang" mit dem Fourier-Integral in Matlab lösen und mir diesen plotten lassen?
Oder komm ich mit der DFT auch zu einem Ergebnis? Da habe ich das Problem, dass ich je nachdem wie klein ich die Zeitintervalle einteil ein entprechend breites Spektrum bekomme. -> diskretes Spektrum
Es folgt mein Matlabcode, der einen verzweifelten Versuch enthält das Fourierintegral darzustellen. Ich erhalte auch folgende Fehlermeldung mit der ich leider nichts anfangen kann.
??? Error using ==> char
Cell elements must be character arrays.
Error in ==> ezplot at 160
fmsg = char(f);
Error in ==> sym.ezplot at 45
h = ezplot(char(f));
t = [0:0.1:100];
A = c1 .*(t./tau1).^1.8 ./(1+(t./tau1).^1.8) .*exp(-t./tau2);
B = c2 .*(t./tau3).^1.8 ./(1+(t./tau3).^1.8) .*exp(-t./tau4);
C = A + B;
Wie hätten wir es denn gern? Habe aus dem FFT Skript aus dem Forum den passenden Teil entnommen und die Abtastrate erhöht, damit die Auflöung des Spektrums besser wird.
t = [0:0.001:100];
A = c1 .*(t./tau1).^1.8 ./(1+(t./tau1).^1.8) .*exp(-t./tau2);
B = c2 .*(t./tau3).^1.8 ./(1+(t./tau3).^1.8) .*exp(-t./tau4);
C = A + B;
% Berechnung der FFT % ------------------
H = fft(C, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Amplitudenskalierung (Normierung auf N) und verschieben der Elemente des % Amplitudenvektors, so dass die Darstellung des Amplitudengangs von -fn...0...fn % erfolgen kann:
amplitudengang = fftshift(amplH/N);
% Graphische Darstellung % ---------------------- % Frequenzvektoren (werden bei der graphischen Darstellung benötigt):
x_fn = 0 : df : fn-df;
x_fa = 0 : df : fa-df;
% max. Amplitude zur Skalierung der graphischen Darstellung feststellen:
%a = max([a1, a2, a3, a4, a5]); % wird später benötigt
figure(2);
stem(x_fa-fn, amplitudengang, 'b.-') title('Amplitudengang') ylabel('Amplitude') xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz']) grid on
% Ausgabe in dB % ------------------ figure(2);
plot(x_fa-fn, 20*log10(amplitudengang))
%axis([-fn fn -10020*log10(a/2)+3]) axis([-fn fn -1003]) title('Amplitudengang') ylabel('Amplitude in dB') xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz']) grid on
% Darstellung des interessierenden Frequenzbereichs des % Amplitudengangs (0...fn) und % daran angepasste Amplitudenskalierung (Normierung auf N/2):
amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2)]; % DC-Bin auf N normieren! figure(3);
stem(x_fn, amplitudengang, 'b.-')
%axis([0 fn 0 a*1.1]) title('Amplitudengang') ylabel('Amplitude') xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz']) grid on
Allerdings dürfte das Spektrum auf Grund vom Leck-Effekt nicht ganz genau sein. Eine Fensterung ist in deinem Fall nicht möglich um den Effekt zu minimieren.
In dieser Zeile wird mir ja der Peak des Spektrums in die Mitte gelegt. Aber warum muss ich auf N normieren?
Meine zweite Frage bezieht sich auf die Auswertung des Spektrums. (siehe Bild im Anhang)
Mein Ausgangsimpuls im Zeitbereich(siehe Anhang erster Beitrag) liegt ja im ns-Bereich und hat einen T(raise)=0.8 ns.
Müsste eine so schnelle Änderung des Signals nicht noch gewichtigere spektrale Anteile größer 1 GHz haben?
Hab eigentlich mit einen breiteren Spektrum gerechnet
Wenn ich ein Sinussignal mit einer Amplitude von 1 im Frequenzbereich darstelle, muss der Peak bei der Sinusfreq. ja auch den Wert 1 bzw. 0.5 haben (für ein beidseitiges Spektrum). Für das beidseitige Spektrum muss man dann eben auf Nfft normieren.
Bei einem Impuls sieht es aber anders aus...wenn man einem Impuls bei t=0 mit der Höhe 1 in den Frequenzbereich transformiert, sind im Spektrum über alle Frequenzen (0...fn) die Amplitudenwerte ebenfalls 1 bzw. 0 dB bei dB Skala. Damit sich dieses Ergebnis einstellt, darf man nicht mit Nfft normieren. Sorry...das habe ich nicht geändert. Also gut das du nachfragst.
Code:
% für Impuls ohne Normierung
amplitudengang = fftshift(amplH);
% bzw. für das Spektrum 0...fn
amplitudengang = [amplH(1:N/2)];
Wie kommst du eigentlich darauf, dass die Frequenzachse in GHz ist? Wenn du die Schrittweite oder Abtastrate Ta im Zeitvektor t von 0.001 nicht gändert hast, beträgt fn 500 Hz. Höhere Frequenzen können mit dem Spektrum dann auch nicht dargestellt werden. Wenn du der Meinung bist, dass dein Signal höhere Frequenzanteile enthält, musst du Ta weiter verringern.
Johannes_23
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 29.07.2011, 10:38
Titel:
Hi,
danke für die Info mit dem N.
Die tau-Angaben meiner Funktion sind eigentlich in ns. Wenn ich hier das *10^-9 weglass kann ich doch bei meinem t=[0:0.1:10] auch das *10^-9 weglassen. Dann ergibt sich doch GHz oder unterlieg ich da nen Irrtum.
t = [0:0.1:100]; %dann lass ich hier das ns auch weg
A = c1 .*(t./tau1).^1.8 ./(1+(t./tau1).^1.8) .*exp(-t./tau2);
B = c2 .*(t./tau3).^1.8 ./(1+(t./tau3).^1.8) .*exp(-t./tau4);
C = A + B;
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.