Forum: Digitale Signalverarbeitung / DSP / Machine Learning Größe (Magnitude) eines Signals mit Verwendung eines 2-Ordungsfilter


von Preg M. (omegaprimus)


Lesenswert?

Hallo,

Ich beabsichtige, die Funktion freqz() zu verwenden, um die Größen 
(Magnitude) bei verschiedene Grenzfrequenzen zu zeichnen. Aber zuerst 
muss ich die Grenzfrequenzen bestimmen.

Alles, was ich habe ist:

 - Ein Bandpassfilter reicht von ungefähr 100 Hz (f_p) für die apikale 
Elektrode bis 8 kHz (f_s) für die basale Elektrode. (22 Elektroden 
insgesamt)
1
b=log10(8000);
2
yc1=logspace(2,b,23);
3
yd=stem(yc1);
4
grid on
5
xlabel('Borders','FontSize',12);
6
ylabel('F (Hz)','FontSize',12);
7
set(gca,'YScale', 'log')

Jetzt muss ich eine Bandpassfilterbank zweiter Ordnung mit den 
gefundenen Grenzfrequenzen unter Verwendung eines Butterworth-Filters 
(-3 dB bei den Grenzfrequenzen) implementieren.
Ich weiß nur, dass freqz () Grenzfrequenzen im Bereich (0 .. 1) 
benötigt. Dies bedeutet, dass die Abtastfrequenz, die hier benötigt 
wird, größer als f_s sein muss.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Preg M. schrieb:
> Dies bedeutet, dass die Abtastfrequenz, die hier benötigt
> wird, größer als f_s sein muss.

Die sollte sogar mindestens doppelt so gross sein. Wenns tatsaechlich 
auch in echt mit real aufzubauendem Antialiasing-TP vor dem ADC laufen 
soll, dann noch groesser.
Also solltest du dir da erstmal eine Samplefrequenz aussuchen/erfragen. 
Oft gibt die HW da schon was vor.
Wenn du die Samplefrequenz als Wert hast, normierst du deine 
Filterfrequenzen auf die Haelfte davon.
Beispiel: du nimmst 48kHz Samplefrequenz, dann entsprechen deine 8kHz 
dem Wert: 8kHz/(48Khz/2) = 1/3
Diese normierten Frequenzwerte kannst du dann z.b. in die "butter" 
Funktion einsetzen, die dir die Filterkoeffizienten fuer eines deiner 
Bandfilter zurueckliefert.

Edit: Kleine Betriebsblindheit meinerseits: Wenn du die Filterei eher im 
analogen machen willst, dann brauchst du keine Abtastfrequenz, aber dann 
wirds eher freqs() statt freqz() und hinten im butter() wird dann auch 
noch 's' stehen.

Gruss
WK

: Bearbeitet durch User
von Preg M. (omegaprimus)


Lesenswert?

Super danke dir für die Tolle Erklärung. Das werde ich mir jetzt 
probieren und sollte so klappen. Habe das Prinzip der Normierung 
vergessen.

Grüße

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Gerne. Wenn das eher eine theoretische Aufgabe ist, dann ist das mit den 
22 Bandfiltern OK. In der Praxis wird man's wahrscheinlich eher nicht 
mit 22 einzelnen Butterworth-Bandfiltern machen. Das waere wohl zuviel 
Rechenaufwand.

Gruss
WK

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.