mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Filterberechnung


Autor: Michael P. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich muß den im Anhang gezeigten Betragsfrequenzgang in einen digitalen
Filter umsetzten, habe aber Probleme mit den Wurtzeln. Wie sieht die
digitale Übertragungsfunktion aus. Das Filter soll in einem TAS3103
realisiert werden, bräuchte die koefizenten also als SOS.

thx

Michael

Autor: Michael P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlen noch Daten oder Frage zu allgemein?
Es kann doch nicht sein das hier niemand etwas weis.

Mfg

Michael

Autor: Detlef A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael, rette mich, was sind denn SOS Koeffizienten? Ebenfalls extrem
hilfreich wären Angaben zu zu f (normiert? aufwas, sampling Frequenz)
und natürlich f1-4.

Cheers
Detlef

Autor: Michael P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SOS sind Second-Order Sections d.h. das Filter wird nachdem es berechnet
wurde in viele kleine IIR Filter 2.Ordnung überführt. Das ist relelativ
einfach und nicht mein Problem.

f ist die Eingangsfrequenz des Filters. Mit der obrigen Formel kann man
für jede Frequenz f die gewünschte Dämpfung berechnen.

f1 bis f4 sind die Pole des Filters. Dies sind feste Freqenzen die in
der Formel als Konstanten stehen und die Eigenschaften des Filters
beschreiben.

In dieser Anwendung ist z.B.

f1 = 30.5 Hz
f2 = ca. 100 Hz
f3 = ca. 170 Hz
f4 = 12178 Hz

Meine aktuelle Lösung, die leider noch nicht Perfekt ist:

1. Beim Filter einfach die Wurzelterme weglassen und mit einer
Bilinearen Transformation in die Digitalebene übersetzten.

2. Den Würzelteil duch ein digitales Filter hoher Ordnung nähern (IIR
Filter 20. Ordnung, Minimale Fehlerquadrate)

Das Problem die Näherung ist nicht perfekt.

Nächster Versuch: Genetischer Algoritmus zur Näherung.

Ach ja die Anwendung ist ein dbA Bewertungsfilter nach DIN.

Michael

Autor: Detlef A (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ja, aber samplerate noch, ohne samplerate geht bei Entwürfen digitaler
Filter garnix!

Cheers
Detlef

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, nützt es Dir denn etwas, wenn Du die Wurzeln in den Zähler
beförderst?

Autor: Michael P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sample Rate ist 48kHz, sorry habe ich noch vergessen. Würde mich aber
auch eher der Lösungsweg interessieren.

Mfg

Michael

Autor: Michael P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist vieleicht nicht klar das die obrige Formel ein Analoger
Betragsfrequenzgang ist? Mann kann direkt eine Frequenz f in Herz
einsetzen und bekommt die gewünschte Dämpfung heraus. Dieses Analoge
Filter soll nun digital Realisiert werden. Die Phasenlage ist bei
dieser Anwendung egal und ist deshalb auch nicht definiert.

Michael

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon klar, was Du willst. Naja, aber keine Erfahrung damit... ;-)

Naja, wenn Du eh numerisch arbeitest, kannst Du dann nicht gleich die
komplette Filterkurve durch "SOS" annähern?

Wie geht das eigentlich genau?

Naja, also angenommen, Du hättest genügend Rechenleistung, könntest Du
doch auch mit Convolution filtern. Also die Übertragungsfunktion in
einen entsprechend großen Kernel überführen und dann eben per Faltung
filtern. Ist eben ein gigantischer Rechenaufwand. Allerdings könntest
Du statt im Zeitbereich zu falten natürlich auch im Frequenzbereich
multiplizieren (FFT und IFT).

Aber das willst Du vermutlich nicht. Du willst IIR-Filter kaskadieren.
Aber wie gesagt: Kein Plan wie das geht! ;-\

Autor: Detlef A (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

habe den von Dir vorgegebenen Amplitudenfrequenzgang mit Matlab
Funktion 'yulewalk' gefittet. Alles von 500Hz bis 24kHz ist ok, unter
500Hz sieht aber nicht so gut aus. Deine vorgegebene Genauigkeit kenne
ich nicht, Matlab-skript ist angehängt, Ordnung war 20, also 10 mal
rette-mich (SOS). Bilder vom vorgebenen Frequenzgang liegen auch bei.

Cheers
Detlef

clear
f1=30.5;
f2=100;
f3=170;
f4=12178;
fs=48000;
%f=[0:fs/16 fs*(0.07:0.0005:1)]/2;
f=[0:fs]/2;
n=20;
Hreal=(f4*f4*f.^4)./((f.^2+f1*f1).*sqrt(f.^2+f2*f2).*sqrt(f.^2+f3*f3).*( 
f.^2+f4*f4));
[fb,fa]=yulewalk(n,2*f/fs,Hreal);
Hist=abs(freqz(fb,fa,length(f)))';
subplot(2,1,1);
v=1;b=length(f);
plot(f(v:b),Hreal(v:b),'b',f(v:b),Hist(v:b),'r');
subplot(2,1,2);
v=1;b=1000;
plot(f(v:b),Hreal(v:b),'b',f(v:b),Hist(v:b),'r');
xlabel('Frequenz');
ylabel('Betrag');
title('rot: ist, blau: soll')
%v=1;b=5000;
%plot(f(v:b),Hreal(v:b)-Hist(v:b));
return

Autor: Michael P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diesen Ansatz habe ich auch schon probiert. Ist aber nicht genau genug.
Schau dir deine Kurven mal in dB Skalliert und die Frequenzachse
logaritmisch an, die Unterschiede sind schon extrem. Nach Din darf ich
bei 31.5 Hz +-2dB Abweichung haben, daeüber nur noch 1.5 bis 1.1 dB
erst bei 5kHz werden die Anforderungen wieder lascher. Yulewalk hat
anscheinend genau da Probleme wo die Wurzeln sind. Ausserdem ist DC
unterdrückung ein muß. Mich wundert das Yulewalk hier nicht besser ist,
fällt wohl bei der Optimierung nicht ins Gewicht da nur der mittlere
Quadratische Fehler zählt.

Danke für deine Mühe.

Ich Rätsele aber immernoch an der besten Löung. Hat vieleicht jemand
einen Schaltplan für ein dBA Messgerät, auch daraus könnte man sich die
Parameter abschauen.

Die Frequenzen sind genau:

f1: 20.6
f2: 107.7
f3: 737.9
f4: 12194

Die lezten Angaben waren aus dem Gedächtniss, ändern aber nichts am
Problem

Mfg Michael

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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