Forum: Digitale Signalverarbeitung / DSP / Machine Learning Scilab: wie FIR Filter mit nichtlinearer Phase entwerfen?


von Gerd G. (gege)


Lesenswert?

Hallo,

könnte mir jemand einen Tip geben, wie man in Scilab FIR Filter mit 
nichtlineare Phase (kurzer Antwortzeit auf Impuls-Signal) realisiert?

Gruß

Gerd.

von Noura H. (noura)


Lesenswert?

hi

ich will nur fragen ob du eine Lösung gefunden hast.
ich muss das gleiche machen, und ich habe noch keine Idee.
ich wäre sehr dankbar, wenn du mir dabei helfen konntest!

von Gerd (Gast)


Lesenswert?

Hi Noura,

Ich hab das so "gelöst" daß ich keine FIR-Filter mehr benutze sondern 
IIRs - hab nicht herausbekommen/verstanden wie nicht-lineare FIRS zu 
berechnen sind.

Gruß

Gerd.

von Noura H. (noura)


Lesenswert?

hi Gerd
danke für deine Antwort!
kannst du mir trotzdem das zeigen und ich versuche mal anders mit 
FIR-Filter.

Gruß

Noura

von Gast (Gast)


Lesenswert?

FIR Filter sind per Definition linearphasig. Wenn man die Phase ändern 
will (z.B. Allpass) muss man IIR Filter benutzen.

von Gerd (Gast)


Lesenswert?

FIR-Filter können - nach meinem Verständnis - linearphasig als auch 
nictlinearphasig sein - je nachdem wie man die Koeffizient wählt.

Oder?

Die Frage war welche Designprinzipien/Algorithmen es gibt um 
nichtlineare FIR-Koeffizienten zu finden.

von joep (Gast)


Lesenswert?

>FIR Filter sind per Definition linearphasig. Wenn man die Phase ändern
>will (z.B. Allpass) muss man IIR Filter benutzen.

Auch FIR-Filter können einen nichtlinearen Phasengang haben. Die lineare 
Phase kommt eigentlich nur von der Symmetrie der Koeffizienten.

Leider kenne ich mich mit Scilab überhaupt nicht aus, weshalb ich beim 
ursprünglichen Problem auch nicht weiter helfen kann...

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich hab mal ins Matlab-Buch geschaut,( ISBN 9783486584271 ) da steht, 
alle in Tabelle.. aufgelisteten FIR-Filter sind linearphasig außer 
"cfirpm". In der Tabelle steht dazu "Equiripple FIR-Filter mit 
beliebigem Frequenzgang (Filter evtl. komplexwertig und mit 
nichtlinearer Phase"
Jetzt müßte es nur einen vergleichbaren Befehl in Scilab geben.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die 13-stelligen ISBN-Nummern funktionieren immer noch nicht direkt zu 
Amazon. Es ist das Buch "Signalverarbeitung mit MATLAB und SIMULINK von 
Josef Hoffmann und Franz Quint, Verlag http://www.oldenbourg.de 2007

hier die Online-Hilfe von Matlab zu cfirpm:
http://www.mathworks.com/access/helpdesk/help/toolbox/signal/index.html?/access/helpdesk/help/toolbox/signal/cfirpm.html
Complex and nonlinear-phase equiripple FIR filter design
aber in scilab und octave ist der Befehl wohl unbekannt.

von Daniel S. (theoretiker)


Lesenswert?

verzeiht mir meine dumme Frage ..
aber wie genaue ist diese Eigenschaft "lineare Phase" definiert?
Ich kenne nur lineare DGL und sich daraus ergebende lineare Systeme.
Aber lineare Phase hab ich noch nie gehört.

Grüsse, Daniel

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Lineare Phase = konstante Gruppenlaufzeit = alle Frequenzen werden um 
die selbe Zeit verzögert, die Signalform wird nicht verzerrt.

von FL (Gast)


Lesenswert?

Die "dümmste" Möglichkeit, ein FIR Filter mit nicht-linearer Phase zu 
entwerfen:

- Nimm ein IIR-Filter mit nichtlinearer Phase, berechne die 
Impulsantwort dieses Filters.
- Schneide diese Impulsantwort an geeigneter Stelle ab (evtl. mit einem 
"fade out").
- Nimm die resultierende endliche Impulsantwort als Koeffizienten Deines 
FIR-Filters.

Gruß
FL

von Ali K. (lernen)


Lesenswert?

FL wrote:
> Die "dümmste" Möglichkeit, ein FIR Filter mit nicht-linearer Phase zu
> entwerfen:
>
> - Nimm ein IIR-Filter mit nichtlinearer Phase, berechne die
> Impulsantwort dieses Filters.
> - Schneide diese Impulsantwort an geeigneter Stelle ab (evtl. mit einem
> "fade out").
> - Nimm die resultierende endliche Impulsantwort als Koeffizienten Deines
> FIR-Filters.
>
> Gruß
> FL

Ich hätte eine Frage, was meinst du mit "Fade out". Ich habe das gleiche 
Prblem aber anderes um, ich habe ein IIR filter der nicht linear Phasig 
ist, und ich möchte daraus linear phasig machen, 3 Möglichkeiten:
1)Fir statt IIr: leider wegen der höhen Filter Ordnung passt nicht.
2)Vorwärts rückwärts filtereung: leider passt nur für "offline"
3)Vielleicht mit Allpass: weiss jemand wie ich das in matlab realisiere 
und wie ich es danach in c++ umsetze. in matlab help habe ich den befehl 
"dfilt.allpass(c)" aber wie ich weiss es nicht wie es mit dem Vector c 
geht, wenn ich diese vector c habe, wie soll ich es mit meinem Filter 
kombiniere,und wie soll ich es danach in c++ umsetze.
Momentan komme ich nicht mehr weiter, ich werde mich freuen wenn mir 
jemand dabei hilft. vielen dank im voraus.

Gruss Ali

von joep (Gast)


Lesenswert?


von Ali K. (lernen)


Angehängte Dateien:

Lesenswert?

joep wrote:
> hi,
> versuchs mal hiermit:
> 
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=59&objectType=file

Hallo Joep,
ich habe ein kleine Simulation mit dem Befehl allpass gemacht.ich habe 
sie angehängt, es zeigt mir einen fehler weiss nicht wieso.
ich habe Tiefpass filter mit fp=4hz und fs=4.5hz.was ist falsch bei mir?
kannst du mir genauer antworten.
Danke.

von Ali K. (lernen)


Angehängte Dateien:

Lesenswert?

joep wrote:
> hi,
> versuchs mal hiermit:
> 
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=59&objectType=file

das ist mfile dazu

von julian (Gast)


Lesenswert?

Aaaalso:

bei FIR Filtern ist das folgendermaßen.
wie schon oben erwähnt hängt die linearphasigkeit von den Koeffizienten 
ab.

ein FIR ist Linearphasig, wenn seine Koeffizienten symmetrisch um die 
Mitte aufgebaut sind. Also muss er auf jeden fall auch eine ungerade 
anzahl an Koeffizienten haben, da es sonst keine mitte gibt.

Beispiel:

Koeff: 0.25, 0.5, 0.25 => Linearphasig

Koeff: 0.25, 0.5, 0.75 => Nicht Linearphasig

Koeff: 0.25, 0.5, 0.5, 0.25 => Nicht Linearphasig

von Dipl.-Ing. Markus (Gast)


Lesenswert?

Hallo!

Ich muss das etwas korrigieren - ein FIR-Filter muss nur eine
symmetrische* Impulsantwort besitzen. Die Koeffizientenanzahl kann
auch gerade** sein.

Das FIR-Filter [0.25, 0.5, 0.5, 0.25] ist daher auch linearphasig.


Dieses Filter besitzt die Ordnung 3 (siehe **, gezählt wird von Null 
weg). Die Gruppenlaufzeit beträgt 1.5 Samples. Wegen dieser nicht 
ganzzahligen Verzögerung wird in DSP-Systemen eben davon abgesehen. Das 
Filter ist
aber sehrwohl linearphasig.

Gruß
    Markus



* Um etwas weiter auszuholen: Die Impulsantwort kann auch schiefsym. 
sein.
  Siehe dazu Oppenheim/Schafer. Dort werden linearphasige Filter
  je nach Typ (symmetrisch/schiefsymmetrisch, gerade oder ungerade
  Koeffizientenanzahl) eingeordnet.

** Da muss man ebenfalls in der digitalen SV etwas aufpassen, weil in
   der Literatur beginnt die Zählung der Koeffizienten oft mit Null.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.