Forum: Digitale Signalverarbeitung / DSP / Machine Learning Gaußfilter(Tiefpassfilter) - Kann Vorgehen nicht nachvollziehen.


von gruml gruml (Gast)


Lesenswert?

Hallo!

Ich soll in Assembler einen Tiefpassfilter realisieren. Der Alogrithmus 
oder viel mehr das Vorgehen ist mir vorgegeben:


1
Die eigentliche Filteroperation entspricht der diskreten
2
Faltung. Bei dieser Operation werden die Koeffizienten des Filters, die man sich als Maske
3
vorstellen kann, an den in einem eindimensionalen Array aufgeführten Messwerten entlanggeschoben.
4
Jedes Element der Messwerte, das von einem Maskenelement überdeckt wird, wird
5
mit eben diesem Element multipliziert. Diese Operation wird f¨ur jedes Maskenelement ausgef
6
¨uhrt. Die einzelen Produkte werden dann aufsummiert und mit dem eventuell vorhandenen
7
Skalierungsfaktor gewichtet. Das Ergebnis dieser Operation wird einem Ausgangselement (in
8
der Datenstruktur als Element ’Center’ gekennzeichnet) zugeordnet. Daraufhin wird die Maske
9
um eine Position weiter geschoben und die ganze Prozedur beginnt von neuem."


Allerdings habe ich arge Probleme damit.
Was zB meint?:

"Jedes Element der Messwerte, das von einem Maskenelement überdeckt 
wird, wird mit eben diesem Element multipliziert."

Angenommen, meine Messwerte wären 1,2,3,4,5,6,7 und meine Maske 4. Wie 
genau soll nun 4 eines der Messwerte überdecken?



Oder hier:

"Das Ergebnis dieser Operation wird einem Ausgangselement (in
der Datenstruktur als Element ’Center’ gekennzeichnet) zugeordnet."

Center ist im C-Programm ein int und wird an das Asm-Unterprogramm 
übergeben.
Wenn ich jede Summe nun in Center schiebe, dann überschreibe ich doch 
einfach den vorigen Wert.


Wüßte da einer Rat?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das klingt nach einer ziemlich umständlichen Beschreibung eines 
FIR-Filters. Lies mal die Application note AVR223 durch:
http://www.atmel.com/dyn/resources/prod_documents/doc2527.pdf
"AVR223: Digital Filters with AVR" dazu gibts noch gezippte Quelltexte 
in AVR-Assembler

von Jan Bruns (Gast)


Lesenswert?

Naja, halt für jedes Ausgabeelement die Summe bilden aus den Produkten 
des zugehörigen Eingabelements mit der maskenmitte, bzw. der Nachbarn 
mit den passenden Maskenstellen.


Ausgabe[i] := SUMME( Maske[j]*Eingabe[i+j], j=-n..n )

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.