|
ping |
Forum-Anfänger
|
|
Beiträge: 17
|
|
|
|
Anmeldedatum: 09.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.08.2012, 14:20
Titel: Filter
|
|
|
|
|
Hallo,
ich bin neu hier und habe zwei Fragen
Die erste handelt davon, dass ich ein Signal filtern möchte. Den Filter habe ich mir bereits gebaut nur leider verstärkt er mein Signal. Im fvtool sieht man, dass die Magnitude nicht auf 0 sondern auf 131 dB liegt. Gibt es eine Möglichkeit mit Hilfe eines Skalierungsfaktors die Magnitude auf 0 zu bekommen, sodass es nicht verstärkt. Hier mein Quellcode:
[code]
fD = 2000;
fS = 2800;
fA = 20000;
Wp = 2*fD/fA;
Ws = 2*fS/fA;
Rp = 1;
Rs = 30;
x = fdesign.lowpass(Wp,Ws,Rp,Rs);
xl = design(x,'butter');
sos.Matrix = [xl.sosMatrix];
sosl = sos.Matrix;
[b,a] = sos2tf(sosl);
fvtool(b,a)
[/code]
Die zweite Frage ist eher eine Verständnisfrage, Ich möchte mit einem zeitsignal eine FFT durchführen. Also muss ich es vorher fenstern um den Leak-Effekt zu vermeiden. Vorzugsweise mit einem Hanning-Fenster. Jetzt möchte ich aber nicht das ganze Signal einer FFT unterzeihen sondern nur einen Ausschnitt, also wäre es doch angebracht vorher mit einem Rechtecktfenster den gewünschten Zeitabschnitt herauszufenstern. Wäre dass dann eigentlich doppelt gemoppelt oder ist das eine mögliche lösung für mein problem? Das Rechteckfenster ist eigentlich eine Funktion, die mir die jeweiligen Samples in eine neue Matrix schreibt um damit weiterzuarbeiten.
Vielen Dank für eure Hilfe
ping[code][/code]
|
|
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 09.08.2012, 15:23
Titel:
|
|
Der Fehler beim Filterdesign scheint wohl hier zu liegen..
Ich habe folgendes getestet, was auch das richtige Filterverhalten liefert
Du hast hier jetzt allerdings ein Filterobjekt Hd. Die SOS Matrix ist schon zwischen Hd und xl verschieden. Aber von Hd die SOS Matrix abspeichern und dann die Koeff. a und b erstellen, liefert bei fvtool(a,b) ein falsches Ergebnis. Nachvollziehen konnte ich es aber noch nicht.
Zur 2. Frage: Beim Rechteckfenster ändert sich doch nichts (w(1:N) = 1)...also kannst du doch auch einfach so den gewünschten Bereich aus dem Signal per Indices herausnehmen. Anschließend kannst du dann die Fensterung mit dem Hann-Fenster durchführen.
|
|
|
ping |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 17
|
|
|
|
Anmeldedatum: 09.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.08.2012, 15:42
Titel:
|
|
Hallo und vielen Dank für die schnelle Antwort, sehr nett!
Ich bin jetzt unsicher, kann ich mir aus meinem Filterobjekt Hd jetzt die Filterkoeffizienten a und b generieren oder tritt dort immer wieder ein Fehler auf? Ich wollte mein Signal gern nach diesem Vorgehen (siehe Code) filtern.
[code]y=filtfilt(b,a,Signal);[/code]
Vielen Dank für die Hilfe.
Achja, zur zweiten Frage bin ich schon ein Stück weitergekommen...wichtig ist die Amplitudenkorrektur nach der Fensterung mit dem Faktor [code]N/sum(window) [/code]
|
|
|
ping |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 17
|
|
|
|
Anmeldedatum: 09.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.08.2012, 16:06
Titel:
|
|
Hallo und vielen Dank für die schnelle Antwort, sehr nett!
Ich bin jetzt unsicher, kann ich mir aus meinem Filterobjekt Hd jetzt die Filterkoeffizienten a und b generieren oder tritt dort immer wieder ein Fehler auf? Ich wollte mein Signal gern nach diesem Vorgehen (siehe Code) filtern.
Vielen Dank für die Hilfe.
Achja, zur zweiten Frage bin ich schon ein Stück weitergekommen...wichtig ist die Amplitudenkorrektur nach der Fensterung mit dem Faktor
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 09.08.2012, 16:07
Titel:
|
|
Leider habe ich bisher noch nicht herausfinden können, wie man b und a richtig erstellt. Es gibt in dem Filterobjekt Hd ja noch die ScaleValues
Wenn ich diese aber bei sos2tf(Hd.sosMatrix,Hd.ScaleValues) mit übergebe, gibts ein Problem beim Multiplizieren...sosMatrix.*ScaleValues funktioniert nicht. sosMatrix ist 6x6 und ScaleValues 7x1...das kann also nicht gehen. Wozu die Werte allerdings sind weiß ich auch nicht.
Nur die sosMatrix zu verwenden, liefert jedenfalls falsche Koeffs.
Zum Thema FFT kann ich dir auch dieses Skript empfehlen...
http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html
|
|
|
ping |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 17
|
|
|
|
Anmeldedatum: 09.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.08.2012, 16:13
Titel:
|
|
schade, gibt es einen Befehl mit dem Filterobjekt an sich zu Filtern?
[code]Filter(Hd,Signal) [/code]gibt es ja als Befehl, aber mit [code]filtfilt [/code](also vor und rückwärts filtern) habe ich noch keinen Befehl gefunden. Vllt kann man ja das generieren der Filterkoeffizienten so umgehen.
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 09.08.2012, 16:23
Titel:
|
|
Und wenn du das Filter erstmal so erstellst
Soweit ich das gesehen habe, unterscheiden sich die beiden Filter erstmal nur im Sperrbereich über 7000 Hz. Aber das war nun kein qualitativer Vergleich. Die Grenzfreq. passt aber.
|
|
|
ping |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 17
|
|
|
|
Anmeldedatum: 09.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.08.2012, 16:48
Titel:
|
|
OK. Vielen Dank erstmal. Wenn ich noch eine Möglichkeit finde die Sache anders zu beheben melde ich mich.
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|