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

Daten aus fvtool oder fdatool entnehmen

 

boondock85
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 04.08.2010, 10:18     Titel: Daten aus fvtool oder fdatool entnehmen
  Antworten mit Zitat      
Hallo!

Ich generiere Filter mit dem FDATool, egal ob in der GUI oder per Befehle. Nun hätte ich gerne die Werte des Amplituden- und Phasengangs extrahiert.

Genauer: Im FDATool wird ja das Bodediagramm des erstellten Filters gezeichnet. Da ich für verschiedene Frequenzen ja dann eine entsprechende Phasenverschiebung erhalte, würde ich die gerne im nachhinein z.B. durch ein Delay wieder korrigieren. Dazu brauche ich aber die Phase in Abhängigkeit der Frequenz.

Wie kann ich denn diese Werte aus dem Bodeplot innerhalb des FDAtools oder auch aus dem FVTool auslesen?

Die Daten solllten demnach ein Frequenz-, ein Amplituden- und einen Phasenvektor enthalten. Daraus könnte ich dann mit einem Fit eine Funktion für Phase und Amplitude in Abhängigkeit der Frequenz erstellen. Oder hat sonst jemand eine Idee?

Gruß und Danke
Private Nachricht senden Benutzer-Profile anzeigen


Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 04.08.2010, 10:40     Titel:
  Antworten mit Zitat      
Hallo,

ich kann gerade bei mir keine tests machen, aber einen Vorschlag hätte ich vlt:

eins bin ich mir sicher von der FDATool kann man die Filterkoeffs (b und a) extrahieren (export).

b: Num
a: Den

du kannst dann die funktion freqz anwenden:
Code:

[h,f]=freqz(b,a,n)   % n: anzahl der frequenzen.
 


in f sind dann deine frequenzen, Amplitude und Phase kriegst du dann so:
Code:


Amp=abs(h);
Phas=angle(h);
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 04.08.2010, 11:09     Titel: Funktioniert
  Antworten mit Zitat      
hi,

ich hatte das freqz nur gekannt um den bode wieder zu zeichnen, aber nie output arguments genutzt!

Vielen Dank dir.

Falls es noch jemand interessiert.

f - also die Frequenzen liegen normalisiert vor.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 04.08.2010, 11:20     Titel:
  Antworten mit Zitat      
Hallo,

falls es weiter noch jemanden interessiert, wenn die abtastfrequenz mitgegeben wird, dann hat der vektor f Frequenzen in Hz (nicht mehr normaliziert) und zwar von 0 bis fs/2.
Code:

[h,f] = freqz(b,a,n,fs)
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 04.08.2010, 11:52     Titel: Verwendung mit Filterobjekt
  Antworten mit Zitat      
Ich habe soeben festgestellt, dass die extrahierten Werte doch nicht vollständig mit denen im Plot des FDATools übereinstimmen?! Woran kann das nun liegen?!

Falls es dann noch jemand interessiert:
Sollte die Erstellung des Filters nur ein Filterobjekt zurückgeben, dann kann folgendermaßen vorgegangen werden:

Code:

% Butterworth Bandpass filter designed using FDESIGN.BANDPASS.
% All frequency values are in Hz.
Fs = 1000;  % Sampling Frequency
N   = 20;  % Order
Fc1 = 40;   % First Cutoff Frequency
Fc2 = 80;  % Second Cutoff Frequency
% Construct an FDESIGN object and call its BUTTER method.
h  = fdesign.bandpass('N,F3dB1,F3dB2', N, Fc1, Fc2, Fs);
Hd = design(h, 'butter');
[h,f]=freqz(Hd);
% plot magnitude and phase
figure
subplot(2,1,1);
plot(f/2/pi*Fs, 20*log10(abs(h)));
grid on;
title('Amplitudengang des generierten Filters');
xlabel('Frequenz in [Hz]');
ylabel('Amplitude in [dB]');
subplot(2,1,2);
plot(f/2/pi*Fs, 180/pi*unwrap(angle(h))+360);
title('Phasengang des generierten Filters');
xlabel('Frequenz in [Hz]');
ylabel('Phase in [°]');
grid on;
set(gcf, 'Color', [1,1,1]);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 04.08.2010, 12:37     Titel:
  Antworten mit Zitat      
Zitat:

Ich habe soeben festgestellt, dass die extrahierten Werte doch nicht vollständig mit denen im Plot des FDATools übereinstimmen?! Woran kann das nun liegen?!


wir brauchen schon bisschen mehr info. inwiefern unterscheiden sie sich?
lade mal 2 bilder hoch, eins von deinem plot, und andere vom fdatool plot.
vlt sieht man dann was.
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 05.08.2010, 14:08     Titel: Vergleich FDATool und extrahierte Daten
  Antworten mit Zitat      
Hi,
erstmal dir vielen Dank für deine Ratschläge und Antworten:

Anbei also nun der Vergleich. Der Quellcode ist der Gleiche wie oben zu sehen. Nur die gewählten Frequenzen, deshalb hier ein Ausschnitt:
Code:

% All frequency values are in Hz.
Fs = 500;  % Sampling Frequency

N   = 10;  % Order
Fc1 = 3;   % First Cutoff Frequency
Fc2 = 12;  % Second Cutoff Frequency
 

Ich habe sowohl im Amplituden- als auch im Frequenzgang jeweils 2 Punkte ausgewählt, der Unterschied ist doch deutlich.
Woran kann sowas liegen?!

Gruß

VglFDA_Extract.jpg
 Beschreibung:

Download
 Dateiname:  VglFDA_Extract.jpg
 Dateigröße:  206.86 KB
 Heruntergeladen:  731 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 05.08.2010, 14:31     Titel:
  Antworten mit Zitat      
Hallo,

bin mir nichts o sicher ob die namen eine rolle spielen oder nur die reihenfolge. ich kanns gerade nicht testen, aber ich hab ein verdacht und zwar in:

Code:

h  = fdesign.bandpass('N,F3dB1,F3dB2', N, Fc1, Fc2, Fs);


vlt muss es so heissen:
Code:

h  = fdesign.bandpass('N,Fc1,Fc2', N, Fc1, Fc2, Fs);
 

_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 05.08.2010, 14:35     Titel:
  Antworten mit Zitat      
Fourier hat Folgendes geschrieben:
.., aber ich hab ein verdacht und zwar in:
Code:

h  = fdesign.bandpass('N,F3dB1,F3dB2', N, Fc1, Fc2, Fs);
 


Dieser Quellcode wurde so vom FDATool erstellt. Also ich hab im FDATool den Filter erstellt. Daher kommt auch der linke Plot im vorherigen Post.
Im FDATool kann ich ein m-File generieren. Ich habe dann einfach in das File noch die DatenExtraktion mit frequz gemacht. Die Filtergenierung wird so von Matlab vorgeben.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 05.08.2010, 14:37     Titel:
  Antworten mit Zitat      
2.Verdacht:
Code:

plot(f/2/pi*Fs, 20*log10(abs(h)));


mach mal folgendes ohne pi.
Code:

plot(f/2*Fs, 20*log10(abs(h)));
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 05.08.2010, 14:53     Titel: Falsche Frequenzachse
  Antworten mit Zitat      
Fourier hat Folgendes geschrieben:

mach mal folgendes ohne pi.
Code:

plot(f/2*Fs, 20*log10(abs(h)));
 


Nein, also da stimmt dan die Frequenzachse überhauptnicht mehr! Siehe Bild im Anhang.
Ich denke das generieren der Frequenzachse stimmt schon.
Sonst noch eine Idee?

VglFDA_Extract2.jpg
 Beschreibung:

Download
 Dateiname:  VglFDA_Extract2.jpg
 Dateigröße:  212.09 KB
 Heruntergeladen:  696 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 05.08.2010, 15:18     Titel:
  Antworten mit Zitat      
irgendwas ist nicht in ordnung, wenn du Fs=500 eingibst,
muss die FVtool eigentlich bis Fs/2 plotten.
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 05.08.2010, 15:20     Titel: Einstellungen im FDATool
  Antworten mit Zitat      
Ich hab bei dem Plot gezoomt. Er plottet automatisch schon auf Fs/2 = 250 Hz. Mich interessiert aber eben der PassBand-Bereich!

Hier mal ein Screenshot des FDATools, dass meine Einstellungen eingesehen werden können.

Gruß

FDASetup.jpg
 Beschreibung:

Download
 Dateiname:  FDASetup.jpg
 Dateigröße:  154.43 KB
 Heruntergeladen:  698 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 05.08.2010, 15:25     Titel:
  Antworten mit Zitat      
okay erste Frage, warum ist in der FDAtool chebyshev als design method
und bei dir im programm butter ?
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
boondock85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 08.12.08
Wohnort: Stuttgart
Version: 2007b
     Beitrag Verfasst am: 05.08.2010, 15:33     Titel: Gelöst
  Antworten mit Zitat      
Sowas blödes...

Betriebsblindheit.
Da muss ich wohl das m-file generiert haben, und danach nochmal das verändert haben! Es funktioniert also nun.
Danke dir für deine Hilfe und Zeit.
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2025 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.