Forum: Digitale Signalverarbeitung / DSP / Machine Learning Implementierbarkeit eines Filter/Controller auf DSP


von Franziska (Gast)


Lesenswert?

Hei zusammen,
weiß jemand vielleicht was für ein Filter oder Controller mit der 
Übertragungsfunktion:

a*s/(s^2+(b*w)^4)

mit a, b Konstante und s Laplace-Faktor sowie w eine beliebige 
Kreisfrequenz wie z.B w=2*PI*50(Hz)

was wichtig ist hier (b*w)^4 mit der 4. Potenz (b kann z.B. mit b=3 
angenommen), möchte wissen ob diese überhaupt auf einen DSP 
implementiert werden kann.

Danke vorerst für alle Antwort und Hilfe.

Franziska

von Markus B. (russenbaer)


Lesenswert?

servus,

prinzipiell würde ich dir eine bilineartransformation empfehlen um dein 
system in den zeitdiskreten bereich zu konvertieren.
siehe:
http://de.wikipedia.org/wiki/Bilineare_Transformation_%28Signalverarbeitung%29

das w macht mich ein bisserl nervös - bist du dir sicher?- oder ist das 
sowieso nur eine konstante ( L(s) = a*s/(s^2+(b*w)^4) ), dann behandle 
sie auch wie eine ;)

ein schönes bild wie laplace und z transformation zusammenhängen findest 
du unter
http://de.wikipedia.org/wiki/Laplace-Transformation

hoffe das hilft,
markus

von Franziska (Gast)


Lesenswert?

Markus B. schrieb:
> servus,
>
> prinzipiell würde ich dir eine bilineartransformation empfehlen um dein
> system in den zeitdiskreten bereich zu konvertieren.
> siehe:
> http://de.wikipedia.org/wiki/Bilineare_Transformat...
>
> das w macht mich ein bisserl nervös - bist du dir sicher?- oder ist das
> sowieso nur eine konstante ( L(s) = a*s/(s^2+(b*w)^4) ), dann behandle
> sie auch wie eine ;)
>
> ein schönes bild wie laplace und z transformation zusammenhängen findest
> du unter
> http://de.wikipedia.org/wiki/Laplace-Transformation
>
> hoffe das hilft,
> markus

hi Markus,
danke vorerst für die Antwort.
die z transformation kenne ich, möchte nur wissen, was für ein Filter 
oder Controller diese ist, und mit der 4. Potenz im Nenner kann diese 
noch auf einen DSP implementiert werden(aufgrund hoher Ordnung)? (hab 
leider kenie Erfahrung mit DSP, aber für eine praxisnahe Implementierung 
muss wissen, ob diese möglich ist)

Franziska

von Markus B. (russenbaer)


Lesenswert?

Servus,

Der Term mit der 4. Potenz:
Wo kommt der her bei einer Laplacetransformierten? Ist hier w vielleicht 
nur eine Konstante (eventuell ein Einstellbarer Parameter)?

Wenn ja, berechne die Bilinear-Transformierte, da bekommst Du dann eine 
Systembeschreibende z-Transformierte das implementiert werden kann.


Grüße,
Markus

von Franziska (Gast)


Lesenswert?

Markus B. schrieb:
> Servus,
>
> Der Term mit der 4. Potenz:
> Wo kommt der her bei einer Laplacetransformierten? Ist hier w vielleicht
> nur eine Konstante (eventuell ein Einstellbarer Parameter)?
>
> Wenn ja, berechne die Bilinear-Transformierte, da bekommst Du dann eine
> Systembeschreibende z-Transformierte das implementiert werden kann.
>
>
> Grüße,
> Markus

w ist eine beliebige Kreisfrequenz wie z.B w=2*PI*50(Hz), für b kann 
z.B. mit b=3 annehmen. ergibt sich dann:

a*s/(s^2+(b*w)^4) = a*s/(s^2+7.89e+11)

mit a eine weitere Konstante.

wahrscheinlich hab meine Frage nicht richtig gestellt, da keine 
Erfahrung mit DSP hab...ich meine, mit so einem großen Wert (7.89e+11), 
kann der filter/cntroller (nach der z transformation) überhaupt noch auf 
einen DSP implementiert werden? ich weiß nicht genau, ob ein DSP eine 
Grenze hat, wenn der Wert diese überschreiten, dann funktioniert er 
nicht mehr

Grüße
Franziska

von Markus B. (russenbaer)


Lesenswert?

Hallo,

Franziska schrieb:
> w ist eine beliebige Kreisfrequenz wie z.B w=2*PI*50(Hz), für b kann
> z.B. mit b=3 annehmen. ergibt sich dann:
>
> a*s/(s^2+(b*w)^4) = a*s/(s^2+7.89e+11)
>
> mit a eine weitere Konstante.

Das bedeutet das deine Übertragungsfunktion
a*s / (s^2 + C) ist wobei C = (b*w)^4, also trotzdem eine Konstante ist, 
soweit ich Dich verstehe.

Die Frage die Du Dir stellst ist eher nach dem Zahlenbereich ob das ein 
DSP abbilden kann weil die Zahlen so "groß" sind, aber warum sollte er 
das nicht können.
Es kommt natürlich darauf an ob Du einen Festkommarechner oder 
Fliesskommarechner hast, welche Präzision benötigt wird und welcher 
Zahlenbereich abgedeckt werden soll.
Es ist ja auch möglich Koeffizienten zu Normieren (was Du bei einem 
Fixkommarechner sicher machen wirst müssen).

Deine Übertragungsfunktion ist noch immer im Zeitkontinuierlich - Du 
solltest Sie in den zeitdiskreten Bereich transformieren. Dann kannst Du 
auch Aussagen über die tatsächliche Übertragungsfunktion treffen und dir 
anhand der Koeffizienten den Wertebereich überlegen.


Ich hoffe das Hilft Dir,
Markus

von Uwe (Gast)


Lesenswert?

Es gibt durch 64Bit Fließkomma DSP die mit double rechnen können Der 
Wertebereich des Typs double erstreckt sich von ±5.0 × 10-324 bis ±1.7 × 
10308, bietet 15 bis 16 Nachkommastellen und entspricht dem IEEE 
754-Standard.

von Franziska (Gast)


Lesenswert?

Markus B. schrieb:
> Hallo,
>
> Franziska schrieb:
>> w ist eine beliebige Kreisfrequenz wie z.B w=2*PI*50(Hz), für b kann
>> z.B. mit b=3 annehmen. ergibt sich dann:
>>
>> a*s/(s^2+(b*w)^4) = a*s/(s^2+7.89e+11)
>>
>> mit a eine weitere Konstante.
>
> Das bedeutet das deine Übertragungsfunktion
> a*s / (s^2 + C) ist wobei C = (b*w)^4, also trotzdem eine Konstante ist,
> soweit ich Dich verstehe.
>
> Die Frage die Du Dir stellst ist eher nach dem Zahlenbereich ob das ein
> DSP abbilden kann weil die Zahlen so "groß" sind, aber warum sollte er
> das nicht können.
> Es kommt natürlich darauf an ob Du einen Festkommarechner oder
> Fliesskommarechner hast, welche Präzision benötigt wird und welcher
> Zahlenbereich abgedeckt werden soll.
> Es ist ja auch möglich Koeffizienten zu Normieren (was Du bei einem
> Fixkommarechner sicher machen wirst müssen).
>
> Deine Übertragungsfunktion ist noch immer im Zeitkontinuierlich - Du
> solltest Sie in den zeitdiskreten Bereich transformieren. Dann kannst Du
> auch Aussagen über die tatsächliche Übertragungsfunktion treffen und dir
> anhand der Koeffizienten den Wertebereich überlegen.
>
>
> Ich hoffe das Hilft Dir,
> Markus

- ja genau, (b*w)^4 ist eine Konstante.
- meine Übertragungsfunktion in z-Ebene (durch matlab funktion c2d und 
mit sample time Ts=1/2500[s], a=1, w=2*PI*50, b=3):

(-3.38e-007z + 3.38e-007)/(z^2 + 1.908z +1)

- kann die obige Übertragungsfunktion auf den DSP implementiert 
werden?(hab wirklich keine Ahnung von DSP, muss auch nicht wirklich auf 
einen DSP implementieren, aber muss sicherstellen, ob diese 
implementierbar ist) z.B. auf einen 16-bit fix point DSP?(oder 
wahrscheinlich andere günstige DSPs?)

danke nochmals für deine Hilfe!

Grüße
Franziska

von Franziska (Gast)


Lesenswert?

Uwe schrieb:
> Es gibt durch 64Bit Fließkomma DSP die mit double rechnen können Der
> Wertebereich des Typs double erstreckt sich von ±5.0 × 10-324 bis ±1.7 ×
> 10308, bietet 15 bis 16 Nachkommastellen und entspricht dem IEEE
> 754-Standard.

64bit floating point DSP? kann man nicht mit dem günstigen DSP 
implementieren?

danke für deine Antwort!
Grüße
Franziska

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


Lesenswert?

Sicher, aber Du musst dennoch deine Datenbreite aufrecht erhalten, um 
genau genug zu sein. Eine simple Multiplikation bläht da schon auf, wenn 
Du sie in Terme zerlegen willst.

(A63..32 & A31..0) * (B63..32 & B31..0) = C3 & C2 & C1 & C0

C3 = A63..32 * B63..32 + U3 (Überlauf)
C2 =
C1 =
C0 =

U3 = (A31..0 * B63..32 + () ) / 2hoch32  etc.

Normalerweise sollte aber der Compiler die Aufdröselung auf 32 Bit 
können.

Es gibt eine Lib von/Visual DSP++, die auf 16 Bit und 24 Bit DSPs läuft 
und bis zu 96 Bit genau rechnet.

von Franziska (Gast)


Lesenswert?

R. K. schrieb:
> Sicher, aber Du musst dennoch deine Datenbreite aufrecht erhalten, um
> genau genug zu sein. Eine simple Multiplikation bläht da schon auf, wenn
> Du sie in Terme zerlegen willst.
>
> (A63..32 & A31..0) * (B63..32 & B31..0) = C3 & C2 & C1 & C0
>
> C3 = A63..32 * B63..32 + U3 (Überlauf)
> C2 =
> C1 =
> C0 =
>
> U3 = (A31..0 * B63..32 + () ) / 2hoch32  etc.
>
> Normalerweise sollte aber der Compiler die Aufdröselung auf 32 Bit
> können.
>
> Es gibt eine Lib von/Visual DSP++, die auf 16 Bit und 24 Bit DSPs läuft
> und bis zu 96 Bit genau rechnet.

danke!
kannst du nochmal erklären, warum für
(-3.38e-007z + 3.38e-007)/(z^2 + 1.908z +1)
braucht ein 64bit floating point DSP?

Grüße!
Franziska

von Markus B. (russenbaer)


Lesenswert?

Hallo,

Franziska schrieb:
> kannst du nochmal erklären, warum für
> (-3.38e-007z + 3.38e-007)/(z^2 + 1.908z +1)
> braucht ein 64bit floating point DSP?

robident sagt ja nichts von floating point DSP.
Er sagt Dir das es eine Bibliothek in VisualDSP gibt die Code produziert 
der auf 16 und 24 bit DSPs läuft un bis zu 96 bit genau rechnet!

Mit Deinen Koeffizienten (besonders +/- 3.38e-007) hast Du halt ein 
Problem. Als Erklärung bzw. wenn Du nicht VisualDSP verwendest (und Du 
solch einen komfortablen Compiler zur Verfügung hast):

In klassischer Zweierkomplementdarstellung interpretiert für Fix-Point 
ergibt sich:
bei 16 bit -> Interpretation [1.15] signed (1 Vorkommastelle, 15 
Nachkommastellen, Zahlenbereich [-1 1[ ) :  3.38e-7 => 0x0000 als 
Koeffizient im DSP

bei 24 bit -> Interpretation [1.23] signed (1 Vorkommastelle, 23 
Nachkommastellen, Zahlenbereich [-1 1[ ) : 3.38e-7 => 0x000002  als 
Koeffizient im DSP

bei 32 bit -> Interpretation [1.31] signed (1 Vorkommastelle, 31 
Nachkommastellen, Zahlenbereich [-1 1[ ) : 3.38e-7 => 0x000002D5  als 
Koeffizient im DSP


Für den anderen Koeffizienten musst Du Dir auch etwas überlegen.
Entweder Du teilst die Multiplikation auf in 2*0.908 = 1.908 und 
realisierst die Multiplikation als Multiplikation und Linksshift
(Achtung vor Überläufen!)
oder
Du spendierst mehr Bits vor dem Komma, das dein Zahlenbereich größer 
wird
z.B. [2.30] signed Format, Zahlenbereich [-2 2[ aber 3.38e-7 => 
0x0000016A
oder
Du überlegst Dir etwas an der Filterstruktur und positionierst den Shift 
an einer anderen Stelle (Bei IIR Direct form 2 nach dem Summationspunkt, 
VOR der Rückkopplungsabzweigung) und normierst alle Koeffizienten 
dementsprechend
Hinweis
 beziehungsweise in Deinem Fall:
mit dieser Struktur werden Deine Koeffizienten:
 und ein
Linksshift nach dem Summationspunkt, vor der Rückkopplungsabzweigung. 
(Koeffizienten sind für IIR DF2 ! )

Ich hoffe das hilft Dir und verwirrt nicht.

Grüße,
Markus

von Franziska (Gast)


Lesenswert?

Markus B. schrieb:
> Hallo,
>
> Franziska schrieb:
>> kannst du nochmal erklären, warum für
>> (-3.38e-007z + 3.38e-007)/(z^2 + 1.908z +1)
>> braucht ein 64bit floating point DSP?
>
> robident sagt ja nichts von floating point DSP.
> Er sagt Dir das es eine Bibliothek in VisualDSP gibt die Code produziert
> der auf 16 und 24 bit DSPs läuft un bis zu 96 bit genau rechnet!
>
> .....
> Du überlegst Dir etwas an der Filterstruktur und positionierst den Shift
> an einer anderen Stelle (Bei IIR Direct form 2 nach dem Summationspunkt,
> VOR der Rückkopplungsabzweigung) und normierst alle Koeffizienten
> dementsprechend
> Hinweis beziehungsweise in Deinem Fall:
> mit dieser Struktur werden Deine Koeffizienten: und ein
> Linksshift nach dem Summationspunkt, vor der Rückkopplungsabzweigung.
> (Koeffizienten sind für IIR DF2 ! )
>
> Ich hoffe das hilft Dir und verwirrt nicht.
>
> Grüße,
> Markus

Vielen Dank für deine detaillierten Erläuterungen!
Aber für mich ist das alles bisschen kompliziert :-)
Wichtig für mich ist, auf welchen DSP-Typ (16 bit fix Point, 32 bit 
floating point oder andere...) mein Filter implementiert werden kann.
da ich auswerten muss, ob es sich lohnt so ein filter auf einen teuren 
DSP oder liebe ein einfacher Filter auf einen günstigen DSP. kann du mir 
nochmal kurz erklären?

danke nochmals für die hilfe
beste Grüße!
Franziska

von Markus B. (russenbaer)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich denke das Du das Filter in einem 16bit DSP Fix-Point realisieren 
kannst.
Es wird aber nicht geradeaus komplett einfach wie aus dem Lehrbuch.

Du müsstest:

1) Den FIR Teil (b-Koeffizienten) in DOPPELTER Präzision gestalten (=32 
bit)

2) Für den Koeffizienten mit dem Wert 1.908 eine der drei Lösungen die 
ich Vorgeschlagen habe verwenden, wobei die eleganteste für mich die 
dritte Lösung ist (Ändern der Filterstruktur, Linksshift und Normierung 
der Koeffizienten)

Wenn Du weniger LimitCycles-Rauschen haben willst:
3) Den IIR Teil auch in Doppelter Präzision ausführen.

Doppelte Präzision Rechnen ist kein Problem, kostet halt nur mehr 
Rechenzyklen.

Ich habe mir Dein Filter einmal in Matlab angeschaut -> siehe Anhang 
(mit fs=2500Hz, verwendeter MATLAB Befehl ist der Titel von dem Plot), 
bist Du Dir sicher das Du das brauchst?

Beste Grüße,
Markus

von Franziska (Gast)


Angehängte Dateien:

Lesenswert?

Markus B. schrieb:
> Hallo,
>
> Ich denke das Du das Filter in einem 16bit DSP Fix-Point realisieren
> kannst.
> Es wird aber nicht geradeaus komplett einfach wie aus dem Lehrbuch.
>
> Du müsstest:
>
> 1) Den FIR Teil (b-Koeffizienten) in DOPPELTER Präzision gestalten (=32
> bit)
>
> 2) Für den Koeffizienten mit dem Wert 1.908 eine der drei Lösungen die
> ich Vorgeschlagen habe verwenden, wobei die eleganteste für mich die
> dritte Lösung ist (Ändern der Filterstruktur, Linksshift und Normierung
> der Koeffizienten)
>
> Wenn Du weniger LimitCycles-Rauschen haben willst:
> 3) Den IIR Teil auch in Doppelter Präzision ausführen.
>
> Doppelte Präzision Rechnen ist kein Problem, kostet halt nur mehr
> Rechenzyklen.
>
> Ich habe mir Dein Filter einmal in Matlab angeschaut -> siehe Anhang
> (mit fs=2500Hz, verwendeter MATLAB Befehl ist der Titel von dem Plot),
> bist Du Dir sicher das Du das brauchst?
>
> Beste Grüße,
> Markus

mein Filter soll wie in Abbs in s- und z-Ebene aussehen.
wenn der Filter auf einen kostengünstigen DPS implementiert werden kann, 
brauche den sicher.
bist du sicher der auf einen 16 bit fix point DPS implementiert werden 
kann? hab noch eine einfacher version die sicher auf einen 16 bit fix 
point DSP implementiert werden kann.

Grüße
Franziska

von Markus B. (russenbaer)


Lesenswert?

Hallo,

Hast Du auf Deinem z-Plane Plot gesehen das dein Filter INSTABIL ist?
Habe es mit MATLAB kontrolliert, die Pole liegen außerhalb des 
Einheitskreises!

Weiters ist etwas seltsam das Du den plot fs=2500 Hz nennst aber 
augenscheinlich eine andere Abtastrate hast.

Was soll denn Deine Abtastrate sein?

Weiters: Ein Filter dessen Betragsfrequenzgang ÜBER die 0dB Linie kommt 
ist ungut wenn dein Eingangssignal auch bis 0dB kommen kann, falls Du 
keine Extension-bits in Deinem Zahlenformat/auf Deinem DSP hast 
(Clipping!!!).

Was willst Du eigentlich machen? Einen Bandpass (schmalbandige 
Resonanz)?

Du könntest Dein Filter auch direkt im zeitdiskreten Bereich 
dimensionieren ->
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

Ist für Biquad Filter recht gut.

Beste Grüße,
Markus

von Franziska (Gast)


Lesenswert?

Markus B. schrieb:
> Hallo,
>
> Hast Du auf Deinem z-Plane Plot gesehen das dein Filter INSTABIL ist?
> Habe es mit MATLAB kontrolliert, die Pole liegen außerhalb des
> Einheitskreises!
>
> Weiters ist etwas seltsam das Du den plot fs=2500 Hz nennst aber
> augenscheinlich eine andere Abtastrate hast.
>
> Was soll denn Deine Abtastrate sein?
>
> Weiters: Ein Filter dessen Betragsfrequenzgang ÜBER die 0dB Linie kommt
> ist ungut wenn dein Eingangssignal auch bis 0dB kommen kann, falls Du
> keine Extension-bits in Deinem Zahlenformat/auf Deinem DSP hast
> (Clipping!!!).
>
> Was willst Du eigentlich machen? Einen Bandpass (schmalbandige
> Resonanz)?
>
> Du könntest Dein Filter auch direkt im zeitdiskreten Bereich
> dimensionieren ->
> http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt
>
> Ist für Biquad Filter recht gut.
>
> Beste Grüße,
> Markus

hi Markus,
du hast recht, der Filter (oder kann man ihn genau als Resonanz 
controller nennen) ist jetzt instabil, weil die Parameter noch nicht 
richtig angepasst werden.
ob die Übertragungsfunktion, Plot oder Abtastrate richtig sind nicht so 
wichtig in diesem Beispiel, möchte nur zeigen, auf welchen Zahlenbereich 
mein Filter/Controller liegt. dann möchte nur wissen auf welchen DSP-Typ 
kann er implementiert werden. Meine Aufgabe ist nur Auswertung des 
Implementierungsaufwands dieses Filters/Controllers, wenn er auf einen 
günstigen DSP implementiert werden kann, werde weiter untersuchen, wenn 
nicht, dann werden mit ihn aufhören.

tausend dank für deine hilfe
beste Grüße!
Franziska

von Markus B. (russenbaer)


Lesenswert?

servus,

wie schon gesagt denke ich das du mit 16 bit wortbreite auskommen 
kannst.
wie billig der DSP werden soll hängt aber auch von anderen sachen ab:
* abtastrate
* eingebaute peripherie (z.b. ADCs/DACs, andere schnittstellen, interner 
oszillator,..)
* entwicklungsumgebung (ist eine vorhanden, gratis oder kostenpflichtig)
* was soll der DSP noch tun.

Beste Grüße und Viel Glück mit der Suche,
Markus

von Franziska (Gast)


Lesenswert?

Markus B. schrieb:
> servus,
>
> wie schon gesagt denke ich das du mit 16 bit wortbreite auskommen
> kannst.
> wie billig der DSP werden soll hängt aber auch von anderen sachen ab:
> * abtastrate
> * eingebaute peripherie (z.b. ADCs/DACs, andere schnittstellen, interner
> oszillator,..)
> * entwicklungsumgebung (ist eine vorhanden, gratis oder kostenpflichtig)
> * was soll der DSP noch tun.
>
> Beste Grüße und Viel Glück mit der Suche,
> Markus

Servus!

Tausend dank für deine Hilfe!!!

beste Grüße!
Franziska

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


Lesenswert?

Markus B. schrieb:
> 1) Den FIR Teil (b-Koeffizienten) in DOPPELTER Präzision gestalten (=32
>
> bit)

Das wird nicht reichen. Die Dynamik seiner Rechung ist aufgrund der 
Koeefizienten wenigstens 10E5 und die muss man mindestens als Auflösung 
zusättzlich haben. -> 14 bit. Hinzu kommt die Koeffizientenzahl als 
Rechentiefe = kumulkativer Fehler. -> 32 -> 5.

Ich schlage 20 bit Genauigkeit vor + Dynamik der Werte (16 +1) -> 38 
Bit.

Dass kann man mit 16+16+16 machen, hat dann freilich den Aufwand bei 
Quadirerungen etc.

von Edi M. (Gast)


Lesenswert?

Robert Kuhn schrieb:
> Ich schlage 20 bit Genauigkeit vor + Dynamik der Werte (16 +1) -> 38
> Bit.

Könntest du das bitte nochmals ausführen, wie du die Breite abschätzt?

Bei der grossen Zahl der Koeffizienten mitteln sich die Rundungsfehler 
auch wieder weg, oder?

> Dass kann man mit 16+16+16 machen, hat dann freilich den Aufwand bei
> Quadirerungen etc.

oder man nimmt einen 24 Bit DSP. Vor Zeiten habe ich mal einen 56301 im 
Gebrauch. Damit ging das recht flott.

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.