WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Spektrum eines Impuls

 

Johannes_23

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2011, 16:15     Titel: Spektrum eines Impuls
  Antworten mit Zitat      
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));


Code:

tau1 = 1.1;
tau2 = 2;
tau3 = 12;
tau4 = 37;
I1 = 16.6;
I2 = 9.3;
k1 = exp(-tau1/tau2 * (1.8*tau2/tau1).^(1/1.8));
k2 = exp(-tau3/tau4 * (1.8*tau4/tau3).^(1/1.8));
c1 = I1/k1;
c2 = I2/k2;

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;

plot(t, C, 'r--')  
xlabel('Zeit/ns')
ylabel('I/A')
title('Zeitbereich')
 
%%  

syms t;
A = (c1 * ((t/tau1)^1.8 /(1+(t/tau1)^1.8)) * exp(-t/tau2)) + (c2 * ((t/tau3)^1.8 /(1+(t/tau3)^1.8)) * exp(-t/tau4));

D = fourier(A);
ezplot(D)
 



Ich Danke jetzt schon allen, die versuchen mir zu helfen.

Grüße
Johannes

Zeitbereich Impuls.jpg
 Beschreibung:

Download
 Dateiname:  Zeitbereich Impuls.jpg
 Dateigröße:  48.91 KB
 Heruntergeladen:  1001 mal


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.07.2011, 16:38     Titel:
  Antworten mit Zitat      
Das geht auch ganz einfach mit der DFT.

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.

http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html



Code:

tau1 = 1.1;
 tau2 = 2;
 tau3 = 12;
 tau4 = 37;
 I1 = 16.6;
 I2 = 9.3;
 k1 = exp(-tau1/tau2 * (1.8*tau2/tau1).^(1/1.8));
 k2 = exp(-tau3/tau4 * (1.8*tau4/tau3).^(1/1.8));
 c1 = I1/k1;
 c2 = I2/k2;

 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;

figure(1)
plot(t, C, 'r--')  
xlabel('Zeit/ns')
ylabel('I/A')
title('Zeitbereich')

fa = 1/diff(t(1:2)); % Abtastfrequenz
N = length(t); % Anzahl Werte
df = fa/N; % Auflösung des Spektrums
fn = 0.5 * fa % Nyquistfrequenz

% Frequenzbereich
% ----------------------------------

% 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 -100 20*log10(a/2)+3])
axis([-fn fn -100 3])
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

% Ausgabe in dB
% ------------------
figure(4);
plot(x_fn, 20*log10(amplitudengang))
%axis([0 fn -100 20*log10(a)+3])
title('Amplitudengang')
ylabel('Amplitude in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid on
pause;
close all;
 



Du solltest dir am Besten noch mit axis() einstellen, dass nur der interessante Freq. Bereich dargestellt wird.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Johannes_"3

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2011, 19:21     Titel:
  Antworten mit Zitat      
vielen dank werd ich gleich mal ausprobieren...
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.07.2011, 19:30     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Johannes_23

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2011, 10:12     Titel:
  Antworten mit Zitat      
läuft so weit alles...

hab jetzt noch 2 kleine Fragen..

Code:
amplitudengang = fftshift(amplH/N);


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 Very Happy

Danke für Eure Antworten

Grüße
Johannes

Amplitudengang.jpg
 Beschreibung:

Download
 Dateiname:  Amplitudengang.jpg
 Dateigröße:  92.04 KB
 Heruntergeladen:  996 mal
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.07.2011, 10:55     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Johannes_23

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2011, 11:38     Titel:
  Antworten mit Zitat      
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.

fa=1/0.1 = 10 GHz


Code:
tau1 = 1.1;    %eigentlich 1.1ns
tau2 = 2;     %eigentlich 2ns
tau3 = 12;
tau4 = 37;
I1 = 16.6;
I2 = 9.3;
k1 = exp(-tau1/tau2 * (1.8*tau2/tau1).^(1/1.8));
k2 = exp(-tau3/tau4 * (1.8*tau4/tau3).^(1/1.8));
c1 = I1/k1;
c2 = I2/k2;

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;



Danke und Grüße
Johannes
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.