Scilab: wie FIR Filter mit nichtlinearer Phase entwerfen?

Gast #939239
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.
Gast #939349
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...
#939595
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.
Gast #939975
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
#967411
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
#967722
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.
Angehängte Dateien:
Gast #975375
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
Gast #979329
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren