Verfasst am: 04.08.2010, 10:18
Titel: Daten aus fvtool oder fdatool entnehmen
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?
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.
Verfasst am: 04.08.2010, 11:52
Titel: Verwendung mit Filterobjekt
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]);
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.
_________________
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);
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.
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?
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.
Einstellungen und Berechtigungen
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.