Forum: Digitale Signalverarbeitung / DSP / Machine Learning Probleme mit CIC Filter


von Samuel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

ich versuche ein CIC Decimation Filter in VHDL zu implementieren, leider 
scheitere ich schon bei der Simulation mit SCILAB. Laut Dokument vom 
Xilinx 
http://www.xilinx.com/bvdocs/ipcenter/data_sheet/cic_compiler_ds613.pdf 
wird im vorderen Teil des CIC über mehrere Stufen integriert. Wenn ich 
das SCILAB Simuliere, wird es aber irgendwann einen Überlauf geben 
(siehe Bild). Was läuft hier falsch?

function [y] = cic_int(x)
  l=length(x);
  y(1)=x(1);
  for i=2:l,
    y(i)=y(i-1)+x(i);
  end;
endfunction;

x=linspace(0,10*%pi,1000);
y=sin(x);

subplot(3,1,1); // Sinus
plot2d(y);
subplot(3,1,2);
plot2d(cic_int(y)); // Sinus integriert
subplot(3,1,3);
plot2d(cic_int(cic_int(y))); // Sinus 2 * integriert

Gruss sam

von Detlef _. (detlef_a)


Lesenswert?

>>Was läuft hier falsch?
Nichts, offsetbehaftete Signale machen am CIC natürlich overflow. Das 
spielt aber keine Rolle, die Differenzierer 'bügeln das wieder aus', 
wenn man gewisse Bedingungen bzgl. der Bitbreiten einhält.

Google 'CIC Overflow' liefert z.B. das:
http://www.informit.com/articles/article.aspx?p=361985&seqNum=2&rl=1
Im Orginalpapier von Hogenauer, das mir im Moment nicht vorliegt, wird 
meiner Erinnerung nach auch erheblich auf die overflow issues 
eingegangen.

Cheers
Detlef

von Samuel (Gast)


Angehängte Dateien:

Lesenswert?

Danke für deine Hilfe, das CIC funktioniert tatsächlich auch wenn es zu 
einem Überlauf kommt. Hätte ich nicht gedacht.
Eine Frage hätte ich noch. Z.B. bei einem CIC Decimation Filter mit 
einer Reduktion von 10 (siehe Bild) wird die Datenrate um den Faktor 10 
Dezimiert. Kommt es dadurch nicht zu einer Spiegelung der Frequenzen von 
0.05 bis 0.10 wegen dem Aliasing? Das Signal bei 0.05 wird ja nur um ca. 
15dB gedämpft.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ja, kommt es. Die einfache Berechnung hat auch ihren Preis. Als Abhilfe 
könntest du weniger stark dezimieren und den Rest mit einem normalen 
FIR-Filter machen (der kann dann ggf. auch gleich den krummen 
Frequenzgang im Durchlassbereich korrigieren).

von Samuel (Gast)


Angehängte Dateien:

Lesenswert?

Kann man sich das so vorstellen (siehe Bild)? Die rote Linie sind die 
gespiegelten Frequenzen und die grüne der "Frequenzgang" des FIR 
Filters. Somit hätte das Filter ca. 45dB Dämpfung.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ja, das Bild sollte so stimmen, aber daran denken dass auch noch die 
anderen Nebenpeaks mit in dein "Nutzband" hineingeschoben werden. 
Allerdings passt das nicht mehr ganz du deiner Beschreibung, du hast ja 
schon mit dem CIC um Faktor 10 dezimiert und dann mit dem grünen Filter 
nochmal um einen Faktor 2. Um insgesamt 10 zu erreichen musst du das 
CIC-Filter auf einen Faktor 5 auslegen und dann das "grüne" FIR-Filter 
anwenden.

von Samuel (Gast)


Lesenswert?

Danke für die Bestätigung. Die Nebenpeaks sollten eigentlich keine 
Probleme machen, da diese auch von FIR abgeschnitten werden. Mit der 
falschen Reduktion hast du recht, aber die 10 diente nur als Beispiel. 
Inzwischen ist des Filter (CIC + FIR) im FPGA und reduziert die 
Samplerate von 50MHz auf 20kHz mit einer Dämpfung von ca. -55dB.
Leider ist es mir noch nicht gelungen mit dem FIR Filter den 
Frequenzgang des CIC zu kompensieren. Der gewünschte Frequenzgang sollte 
(x/sin(x))^N sein. Ich versuche schon seit Stunden die Koeffizienten des 
FIR Filters mit Hilfe der inversen Fouriertransformation zu berechnen, 
aber es funktioniert nicht. Ist das eigentlich mit diesen Ansatz 
möglich, oder wie berechnet man die  Koeffizienten eines solchen 
Frequenzganges?

von Samuel (Gast)


Lesenswert?

Bevor noch jemand auf meine Frage antwortet, ich habe eine Lösung für 
die Berechnung der Koeffizienten für das FIR Filters gefunden. Den 
Versuch (wie oben geschildert), den Frequenzgang des CIC direkt in das 
Fourier Integral einzusetzen hat nicht funktioniert, es war mir nicht 
möglich das Integral aufzulösen. Aber mit der Frequenzabtastungs Methode 
lassen sich die Koeffizienten nun berechnen.

Gruss sam

von tom (Gast)


Lesenswert?

Hallo,

ich stehe gerade vor dem gleichen Problem, ich weiß nicht wie das FIR 
Kompensationsfilter auszusehen hat.

Das das Filter einen Frequenzgang von (x/sin(x))^N haben sollte, ist mir 
klar, aber nicht wie ich auf die Koeffizienten komme.

Was genau ist denn die Frequenzabtastungs Methode?
Oder gibt es noch andere Arten die Filterkoeffizienten zu finden?

Gruß, Tom

von Ras F. (rasfunk)


Lesenswert?

Hi Tom,

Ich fand diese Application Note von Altera sehr hilfreich:

http://www.altera.com/literature/an/an455.pdf

(MATLAB-Script zum Koeffizienten generieren ist mit dabei)

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Hier noch eine m.E. gute Einführungen

Cheers
Detlef

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Und noch eine

von Cetec F. (ftec)


Lesenswert?

Hallo,

ich beschäftige mich im moment auch mit dem Thema.
Welche unterschied gibt es zwischen CIC Filter und Sinc3 Filter?

Gruß Ftec

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.