Forum: Digitale Signalverarbeitung / DSP / Machine Learning Filterberechnung


von Michael P. (Gast)


Angehängte Dateien:

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

von Michael P. (Gast)


Lesenswert?

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

Mfg

Michael

von Detlef A (Gast)


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

von Michael P. (Gast)


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

von Detlef A (Gast)


Lesenswert?

Hi,

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

Cheers
Detlef

von Unbekannter (Gast)


Lesenswert?

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

von Michael P. (Gast)


Lesenswert?

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

Mfg

Michael

von Michael P. (Gast)


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

von Unbekannter (Gast)


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! ;-\

von Detlef A (Gast)


Angehängte Dateien:

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

von Michael P. (Gast)


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

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.