Forum: Digitale Signalverarbeitung / DSP / Machine Learning IIR Bandpass ohne Multiplikation


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von chris (Gast)


Lesenswert?

Hallo Zusammen,

für IIR Filter lassen sich für bestimmte Filtereigenschaften die 
Multiplikationen durch Schiebeoperationen ersetzen.

Ich suche Koeeffizienten für einen Bandpass ( erstmal beliebige 
Mittenfrequenz ), die sich mit wenigen Schiebeoperationen realisieren 
lassen.

Hat von euch jemand Informationen dazu?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

http://www.mikrocontroller.net/articles/Hilbert-Transformator_%28Phasenschieber%29_mit_ATmega#Hilbert_ohne_Multiplizierer

der Link zum Original ist leider verwaist

aber Lutovac hat sich in seinen Büchern noch öfters damit befasst
http://home.etf.rs/~tosic/readmedf.htm

von chris (Gast)


Lesenswert?

>http://www.mikrocontroller.net/articles/Hilbert-Tr...
Danke für die Antwort.
Ein schönes Beispiel für die gesuchten Koeffizienten. Leider ist der 
Hilbertransformator ein "Phasenschieber" um analytisches Signal zu 
erzeugen und kein Bandpass.
Aber vielleicht tauch ja doch noch ein Link auf.

von Klaus H. (Gast)


Lesenswert?

Die einfache Version:

ValAccu1(t+1) = ValNew(t) * k1 + ValAccu1(t) * (1-k1)

ValAccu2(t+1) = ValNew(t) * k2 + ValAccu2(t) * (1-k2)

FilterVal = ValAccu1 - ValAccu2

mit k2 >> k1

von chris (Gast)


Lesenswert?

Interessant. Du hast 2 Tiefpassfilter 1.ter Ordnung und berechnest aus 
den Ausgangssignalen die Differenz.

Bei einem einfachen 2 poligen Bandpassfilter scheint mir der Aufwand 
ähnlich groß:

H(z)=(1-z⁻1)(1+z⁻¹)/(1+a*z⁻1+b*z⁻2)

Hier sind es allerdings nur 2 Multiplikationen mit Koeefizienten anstatt 
4 Multiplikationen wie bei Deinem Verfahren oben.

Warum micht das Thema interessiert: Ich will einen Bandpassfilter auf 
einem Attiny13 realisieren. Dieser MC hat keinen Multiplizierer.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das Buch von Lutovac et al., Prentice Hall, ISBN 0201361302 Filter 
Design for Signal Processing using MATLAB and Mathematica
enthält auch "multiplierless IIR Halfband filters":

http://home.etf.rs/~tosic/preface.htm
Chapter 9...We conclude this chapter with several important application 
examples in which we design low-sensitivity selective multiplierless IIR 
filters...

Zeitschriften-Veröffentlichungen von ihm gibts nur gegen Bares oder per 
Fernleihe, z.B. ergoogled mit "Miroslav D. Lutovac multiplierless":

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.33
"Design of Multiplierless Elliptic IIR Filters (1999)"

http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=823523&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F97%2F17831%2F00823523.pdf%3Farnumber%3D823523
lange URL... "Approximate linear phase multiplierless IIR halfband 
filter"(2000)
oder auch
"Design and VHDL description of Multiplierless Half-Band IIR Filter"
und so weiter

Nachtrag:  der Preis des Buches bei Amazon ist auch für Fachbücher sehr 
happig.
    EUR 447,25 neu (2 Angebote)
    EUR 166,94 gebraucht (3 Angebote)

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Vielleicht ist es analog oder teilanalog per sampling einfacher als 
superteure Spezialistenbücher?

Was für Designkriterien brauchst du?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das Buch kann man leihen, im genannten Kapitel 9 ist eine 
Schritt-für-Schritt Anleitung zur Berechnung. Eine Tabelle der kleinsten 
Zweierpotenz-Zahlen, die in Frage kommen, gibt es auch.

Aber ich finde es auch sehr mutig, auf einen ATtiny DSP zu machen, das 
ist schon "minimal art".
Die Literatur stammt aus der Zeit, als FPGAs noch keine oder nur wenige 
Hardware-Multiplizierer enthielten. Damals was das die einzige 
Möglichkeit, in FPGAs Digitalfilter platzsparend aufzubauen. Diese Kunst 
stirbt wohl ebenso aus, wie die der alten Mikrocontroller-Artisten, die 
umfangreiche Programme in Assembler auf wenigen Kilobyte unterbringen 
konnten. Man hat es heute einfach nicht mehr nötig.

von chris (Gast)


Lesenswert?

Die Differenzengleichung von Klaus H. gefällt mir ziemlich gut. Diese 
Art von Filter hat den Vorteil, dass es keine Instabilitäten gibt, 
solange k1 und k2 zwischen 0..1 liegen.
Allerdings meine ich, dass man das Ausgangssignal noch skalieren müsste, 
damit die Amplitudenverstärkung bei der Mittenfrequenz bei 1 liegt.

Ich habe mir überlegt, die Shiftkoeffizienten einfach durch einen 
Algorithmus suchen zu lassen. Damit sollte sich ein geeigneter Filter 
finden.

@Christoph Kessler
Dank für den Buchtipp. Aber so lange ich es nicht beruflich brauche, 
werde ich noch selber rechnen müssen.

>Was für Designkriterien brauchst du?

sagen wir mal
fab=31kHz
fmitte= 100...10kHz
fbreite= 50..5kHz
MCU:Attiny13

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Was ist denn "fab"?

Schonmal über ein Comb-Filter nachgedacht? Vielleicht denkst du auch 
erstmal über den Phasengang nach. Vor allem, wenn es um Datenübertragung 
gehen sollte.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

f-abtast...
Die Abtastfrequenz sollte etwa das vierfache der Mittenfrequenz sein 
(halbe Nyquistfrequenz) daher auch Halbbandfilter genannt. Der arme 
ATtiny bekommt viel zu tun. Über die Bitbreite wurde noch nichts gesagt, 
8 Bit oder 16 oder noch mehr?
Meinen Artikel hast Du gelesen?
http://www.mikrocontroller.net/articles/Digitalfilter_mit_ATmega

von Achim S. (achims)


Lesenswert?

Hallo Cristoph
klinke mich mal in das Them mit ein.
Habe deine und andere Artikel schon einige Zeit verfolgt und so ziemlich 
aklles gelesen, was ich dazu gefunden habe. Auch deinen Artikel mit 
Atmega. Da ich selber mit einem Atmega arbeite, interessiert mich die 
Sache. In deinem Artikel hast einiges an Berechnung und Beispiele drin. 
Leider ist es in ASM. Da ich in C arbeite, komme ich damit nicht klar. 
Hast du was konkretes in C für mich?
achim

von Robert K. (Firma: Medizintechnik) (robident)


Lesenswert?

chris schrieb:
> Ich will einen Bandpassfilter auf
>
> einem Attiny13 realisieren. Dieser MC hat keinen Multiplizierer.

Du kannst doch den Faktor so wählen, dass es ein bInärwert wird.

y = y * (1-1/16) + x * 1/16

  = y - y/16  + X/16

  = y - LSR4(Y) + LSR4(X)

von chris (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein kleines Matlab-Scribt zur Darstellung des Frequenzganges des 
Filters von Klaus H. ( Ich hoffe, dass ich mich bei den Koeffizienten 
nicht verrechnet habe.
Weis jemand, wie man den Filter auf 0dB normiert?
1
% band pass filter with one pole filters
2
%
3
%  y1(n-1)=ax+(1-a)y(n)
4
%  y2(n-1)=bx+(1-b)y(n)
5
%  y=y1-y2
6
%
7
8
fab=31000;
9
flow=400;
10
fhigh=600;
11
12
a=2*pi*flow/fab;
13
b=2*pi*fhigh/fab;
14
15
c=1-a;
16
d=1-b;
17
18
B=[a-b b*c-a*d]
19
A=[1 -c-d c*d]
20
21
freqz(B,A,200,fab);
22
ax=axis;
23
ax(4)=10;
24
ax(2)=5000;
25
ax(3)=-40
26
axis(ax);

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.