BF256A Konfusion

Am 07.01.2011 19:55, schrieb Winfried Salomon:

Nein. Ich hatte das so implementiert:

y= (-106*x)/128;

Die Division durch 128 hat ewig gedauert, woraus ich schloss, dass der Compiler nicht mit Shifts arbeitet. Deshalb habe ich nun vorab geprüft, ob x positiv oder negativ ist und die Shifts dann entsprechend ausgeführt. Ist deutlich schneller.

Michael

Reply to
Michael Rübig
Loading thread data ...

Hallo Olaf,

Olaf Kaluza schrieb:

es wurde früher gesagt (Vorlesung vor einigen Jahren), aber jetzt scheint es wohl nicht mehr so klar zu sein. Ich selbst habe nur mit TI-DSPs zu tun gehabt, selber aber kaum was damit gemacht. Im Code Composer für unseren fixed point DSP tms320C62xx (weiß jetzt nicht genau) wird aber auch weder mit float noch integer in C gearbeitet, sondern im gebrochenen 2er-Komplement-Zahlenformat. Der bräuchte die Umnormierung nach Integer also nicht, sondern der C-Compiler kennt dieses Format.

Bei TI hab ich 2 Links als Beispiel gefunden: floating point:

formatting link
Datenblatt:
formatting link

fixed point:

formatting link
Datenblatt:
formatting link

Ich meine fast den Faktor 3 zu sehen, es ist aber nicht so leicht zu vergleichen. Mit DSPs habe ich mich insgesamt in der Praxis wenig beschäftigt, kann also nicht so viel dazu schreiben.

mfG. Winfried

Reply to
Winfried Salomon

Waldemar Krzok schrieb:

Ja, vielleicht, eventuell. Weiss man's? Oder wie machen das andere Funkwecker? Wissen die vorher, wenn auf Winterzeit umgestellt wird, oder lassen die das drauf ankommen? Kann man ja schlecht testen, wenn man nicht grössere Basteleien auf sich nehmen will. Tip aus Erfahrung: Wenn man zur Zeitumstellung um 0300 aufstehen will/muss, dann besser einen konventionellen Wecker hinstellen. Jedenfalls ist letzten Herbst meine Frau eine Stunde zu früh aufgestanden. (Bitte keine Diskussionen, warum $Frau auf die Idee kommt, Frühschicht am Sonntag freiwillig zu machen, so was kann man nicht diskutieren, völlig zwecklos/hoffnungslos).

--
mfg Rolf Bombach
Reply to
Rolf Bombach

horst-d.winzler schrieb:

Und es nicht mal gemerkt!!!11!1

--
mfg Rolf Bombach
Reply to
Rolf Bombach

Hallo Michael,

Michael Rübig schrieb:

die numerischen Effekte sind immer wieder verwirrend. y= (-106*x) >> 7; Vermutlich hast Du bei negativem Ergebnis eine 1 addiert, dann ist es IMHO identisch mit der Division. Das müßte eigentlich dem Betragschneiden entsprechen, dann hast Du keine kleinen Grenzzyklen mehr.

mfg: Winfried

Reply to
Winfried Salomon

Nö. ((-106*64) >> 7) + 1 == -52, (-106*64)/128 == -53.

Man muß sowas wie

(-106*x + (x>0 ? 127)) >> 7 nehmen.

--
David Kastrup
Reply to
David Kastrup

Am 07.01.2011 20:47, schrieb Michael Rübig:

Boaahh, ewig gesucht. Meine uralten 16MB SD-Karten formatiert Windows automatisch in FAT12 statt FAT16 und damit kommt die AVR Lib nicht klar. Mit "format x: /a:2048" formatiert Windows dann auch in FAT16. Stunden habe ich für diese Erkenntnis gebraucht ...

Jetzt sind wir aber weit vom Thema ...

Michael

Reply to
Michael Rübig

Bezogen auf ein 2pol Allpaßfilter und Biquads würde man die Sättigungslogik häufiger aufrufen als nötig und damit das Signal mehr demolieren als nötig. Es werden ja mehrere signed Worte addiert. Nach der 1. Addition kann die Summe in Überlauf gehen, aber nach der 2. Addition zurück in den darstellbaren Bereich klappen.

Ist in der ominösen Zeitschrift in Heft 13 beschrieben. Ich wiederum habs aus: Stroud, Dumm "Comment on Overflow in Two-Complement Addition" IEEE ASSP Aug. 1981

MfG JRD

Reply to
Rafael Deliano

Hallo David,

David Kastrup schrieb: [.....]

ja, das mit der Addition der 1 war ein Schnellschuß, so einfach ist es nicht ;-). Aber Deinen Vorschlag versteh ich wieder nicht, ist das eine Art Pseodocode? Jetzt hab ich's aber, hier als C-Codeschnipsel:

y = -106*x; if(y < 0) { y= (~y + 1) >> 7; //2er-Komplement und Rechts-Shift, y ist positiv y= (~y + 1); //2er-Komplement, y ist negativ } else y = y >>7;

Als Wortlänge habe ich mal signed short int, also 16 Bit genommen, paßt auch mit x=64. Im Grunde ist das hier Betragsschneiden nach dem 7. Bit von rechts, was der Division /128 entspricht. Ohne die doppelte

2er-Komplementbildung hat man den mit Offset behafteten einfachen rechts-Shift.

In einem IIR-Filter ist obiges Betragsschneiden durchaus sinnvoll, weil es Offset und Schwingneigung (kleine Genzzyklen) unterdrückt. Der Code wird aber langsamer, meist stört ein kleiner Offset nicht und bei etwas Grundrauschen ist das Schwingen auch weg, also beläßt man es oft bei einem einfachen Rechts-Shift. Das entscheide ich normalerweise durch eine Simulation oder man probiert es direkt in Hardware aus.

mfG. Winfried

Reply to
Winfried Salomon

Lediglich syntaktisch falsches C. Sollte eher

(-106*x + (x>0 ? 127 : 0))>> 7

sein.

[...]

Eine ziemlich komplizierte Art,

y = - (-y >> 7);

zu schreiben.

--
David Kastrup
Reply to
David Kastrup

Hallo Michael,

Michael Rübig schrieb:

davon habe ich keine Ahnung, FAT zerschießen war früher der absolute Horror. Ich beneide reine Programmierer nicht, mir reicht schon die GNU-Entwicklungsumgebung für das Eval-Kit des LPC2468, mit der ich alle naselang die tollsten Effekte erlebe. Manchmal glaube ich, die enden alle in der Gummizelle mit auf dem Rücken zusammengebundenen Ärmeln ;-).

.......

mfG. Winfried

Reply to
Winfried Salomon

Hallo Michael,

Michael Rübig schrieb: [.....]

wenn sich beim Ergebnis Carry- und Vorzeichenbit unterscheiden ist Überlauf vorhanden und das Vorzeichenbit ist das Carrybit. Wie man da von der Hochsprache aus drankommt, weiß ich auch nicht, Assembler einbinden? Sowas hab ich vor langer Zeit beim 68000er von Fortran aus gemacht, damals kannte ich die Parameterübergabe und wie man das mit Registern und Stack macht. Das muß heute auch gehen, normalerweise kann man Assembler in C einbinden, habe das selbst aber noch nicht gemacht.

Dann würde ich es bei einfachen Shifts belassen, bei einem binären Signal kommt es nicht drauf an.

Dann ist es wohl unkritisch, Hauptsache es funktioniert.

Das Problem hab ich seit kurzem mit der 2er-Version des Seamonkey auch, es werden wohl die Blanks gelöscht. muß mal suchen wo ich mich da beschweren kann.

Man kann mit V die Wortlänge der Integer-Koeffizienten a1' und a2' einstellen mit der Anzahl der Shifts. Die Koeffizienten b0, b1 und b2 waren bei mir schon integer, deshalb habe ich sie nicht geshifted, das müßte man bei Bedarf noch erweitern.

Eigentlich ist es ganz einfach, ich habe es so gemacht, weil ich bei 32 Bit sehr wenig Luft hatte und die effektiven Wortlängen der Daten schnell optimieren mußte.

Deshalb hab ich mal was mit einem super-schmalbandigen Quarzfilter versucht, nur simuliert.

o 5 V | o------------. | | .-. .-. 470 K | | 470 K| | | | | | '-' '-' | | || o------------)-------||-----o | | || Ausgang | | +-| | 1 nF BF256A ||BF256A | |_| | | |-+ | Antenne | | | | C| | o-----. | 2.2 mH C| | | |100 nF| C| | 330 K.-. | .-. | --- | | --- | | | --- | | --- | | 100 K .-. | '-' | '-' | | | | | | 7 Ohm| | | | | | '-' === === === === | GND GND GND GND | === 1.91696 nF GND (created by AACircuit v1.28.6 beta 04/19/05

formatting link

Diese Eingangsstufe hat eine Verstärkung von ca. 32 dB und eine Bandbreite von ca. 20 Hz. Die Kaskode war hier notwendig, damit die Rückwirkung des unteren FET kleiner wird, sonst ist die Güte des Bandfilters nicht mehr haltbar, es steigert die Eingangsimpedanz ziemlich deutlich.

Ob man so einen Quarz mit Q=20000 bekommen kann, weiß ich jetzt nicht. Wie das mit der Streuung von L und C am Filter ist, hab ich noch nicht untersucht. Für eine Simulation könnte ich Dir die Spice-Modelle des BF256A und des Quarzes kopieren.

Wieviel Verstärkerstufen dahinter müssen, hängt wohl vom Pegel an der Antenne ab, mit 3 solcher Kaskoden erreiche ich fast 100 dB. Ich habe diese Stufe mal untersucht, weil ich wissen wollte, wieviel Verstärkung maximal möglich ist und das Deine ursprüngliche Frage war. Mehr wie hier geht wohl nicht mehr wegen der parasitären Kapazitäten, die Bandbreite wird zu klein. Was man dahinter setzt ist völlig offen, weil es keinen Einfluß auf das S/N mehr hat, das hier recht gut sein sollte. Aber dieses Problem hast Du ja schon gelöst.

mfG. Winfried

Reply to
Winfried Salomon

Bei der Addition stellt man vorher fest, ob die Vorzeichen verschieden sind, dann ist das Ergebnis korrekt. Sind die Vorzeichen gleich, prüft man, ob das Vorzeichen des Ergebnisses ebenfalls gleich ist. Dann ist wiederum das Ergebnis korrekt.

Bei der Subtraktion ist das Vorgehen vergleichbar. Man kann die Subtraktion hierbei _nicht_ durch Negierung und Addition ersetzen, weil schon bei der Negierung ein Überlauf auftreten kann.

--
David Kastrup
Reply to
David Kastrup

Am 09.01.2011 15:38, schrieb David Kastrup:

Und wie macht man es bei einer Multiplikation?

Michael

Reply to
Michael Rübig

Mixed precision, und nachsehen, ob das Ergebnis in der oberen Hälfte nur Vorzeichen ist, bevor man reduziert. Macht man auch nicht anders in Assembler.

--
David Kastrup
Reply to
David Kastrup

Henning Paul schrieb:

Leute, die ihre MFT nicht mit gefühlten 17'000 Files vollballern möchten.

*duck*
--
mfg Rolf Bombach
Reply to
Rolf Bombach

Bei NTFS macht das nichts aus, denn man kann 2^32-1 Dateien anlegen, was auch gut ist, denn die neue 12.4 Xilinx WebPack-Installation, die ich eben installiert habe, ist 145.469 Dateien groß, in 8,5 GB. Da fallen die bei meiner Installation 17.958 Cygwin-Dateien nicht mehr ins Gewicht.

--
Frank Buss, http://www.frank-buss.de
piano and more: http://www.youtube.com/user/frankbuss
Reply to
Frank Buss

Hallo David,

David Kastrup schrieb: [.....]

meine C-Kentnisse sind leider nur rudimentär, was bedeutet denn der Operator "?" und diese Form "127 : 0"?

Wer sich mit C beschäftigen möchte:

formatting link
;-).

Ich hatte hier wohl die Realisierung im FPGA im Kopf, es sieht unelegant aus, wird aber IMHO auf der Hardware- bzw. Registerebene zum gleichen Ergebnis führen.

mfG. Winfried

Reply to
Winfried Salomon

A ? B:C bedeutet A wird als boolscher Ausdruck interpretiert. Wenn A wahr ist, dann ist das Ergebnis B, sonst C

--
Gruß, Raimund
Mein Pfotoalbum 
Mail ohne Anhang an  wird gelesen. Im Impressum der Homepage
findet sich immer eine länger gültige Adresse.
Reply to
Raimund Nisius

Am 07.01.2011 22:32, schrieb Rolf Bombach:

Dass umgestellt wird, wird bereits eine Stunde vor der Umstellung mit einem Flag gesendet. Bei stündlichem Synchronisieren reicht das...

Michael

Reply to
Michael Rübig

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.