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
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
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
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
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
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
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.
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
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
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.
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
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
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
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
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
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
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
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.