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


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 Preg M. (omegaprimus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.