Hallo, ich sage gleich von Anfang: Ich habe wenig Ahnung von analogen Schaltungen/Filtern. Ich habe zwar versucht hier und da die nötigen Informationen zu finden, nur leider komme ich nicht weiter, daher wende ich mich nun an euch. Ich spiele mit einem uC (PIC24F) mittels PWM eine 8-bit 22050Hz WAV-Datei, die ich von einer SD-Karte lade. (nach dem Buch 'Learning to Fly the PIC24F') Hardwareseitig geht das PWM Signal vom PIC-uC Pin auf ein Sallen-Key Tiefpassfilter 2.Ordnung, von dort aus auf einen Audio-Booster an den dann ein kleiner Lautsprecher angeschlossen ist. (siehe Anhang für die Schaltung) Das ganze funktioniert. Das Problem dabei: Ich habe ein kleines Hintergrundrauschen während der Wiedergabe welches ich gerne beseitigen möchte. Als Stromversorgung dient einerseits ein Buck Converter (LTC3619 @ 2.25MHz) der 5V auf die 3.3V Betriebsspannung wandelt. Ich kann umschalten auf einen Boost Converter (LTC3539 @ 1MHz). Bei beiden ist das Rauschen identisch, ich höre keinen Unterschied. Bei anderen Schaltungen die ähnliches gemacht haben (von Microchip ein Starterkit zur Sprachausgabe) haben sie anstatt des MCP601 OpAmp den MCP617 verwendet, der anscheinend ein geringeres Rauschen aufweisen soll im unteren Frequenzspektrum (so zumindest meine Erkenntnis aus dem Datenblatt). 1. Frage: Welche Kriterien muss ein OpAmp am besten besser Erfüllen bei so einem Filter? Kommt es mehr auf 'Input Noise Voltage Density' oder auf 'Input Offset Voltage' mehr an? Mein verwendeter ist eher ungeeignet, denke ich/dachte ich, da das GBW extrem hoch liegt und dafür die anderen zwei Werte schlechter liegen. Ich habe den Filter aufgebaut (da er im anderen Gehäuse ist, habe ich die Schaltung extra aufgebaut), jedoch ohne Besserung. Stattdessen ist er 'wählerischer'. Ich habe unterschiedliche Sampleraten bei den WAV-Files probiert, wodruch die PWM Frequenz variiert wird. Alle werden ohne Störung außer dem Rauschen mit dem MCP601 abgespielt. Dass es bei 16kHz piepst ist, denke ich ist nachvollziehbar. Beim MCP617 hingegen knackst es bei 16kHz; 22kHz und 44kHz funktionieren sauber. Ebenso hat es auch wann anders hin und wieder geknackst, nur weiß ich nicht mehr genau die Parameter. 2. Frage: Warum? ;-) Um das Filter zu dimensionieren habe ich dieses Tool verwendet: http://sim.okawa-denshi.jp/en/OPseikiLowkeisan.htm Das Problem ist nun, dass ich nicht so genau weiß auf was ich achten muss. In meinem 2nd Order-Filter ist der Q-Faktor 0.5 und der Dämpfungswert 1. Die Cut-Off Frequenz liegt bei 8.8kHz. Wenn ich es mit dem Entwicklungsboard von Microchip vergleiche, so verwenden die einen 4th Order mit ganz anderen Parametern. Einmal Q=0.5, Damping=0.96, f=4kHz Und das zweite: Q=0.7 und Damping = 0.7, f=4kHz. Dass die Frequenz nur bei 4kHz liegt daran, dass nur Sprache ausgegeben werden soll. Also der Umstand ist mir ersichtlich. 3. Frage: Welche Kombination von Q und Damping ist empfehlenswert? Ich habe zwar schon einiges darüber gelesen, aber nur eben eine Beschreibung der Eigenschaft gefunden, nicht, welche Kombi Sinn- / Unsinn macht, d.h. ich bin kein bisschen schlauer geworden. Test: das Lied/Sprache wird abgespielt, das PWM Signal aber nicht an den OpAmp angeschlossen: Der Audio Booster ohne angeschlossenem Eingang rauscht nicht. Wird der OpAmp angeschlossen höre ich ein Rauschen (weiß aber nicht ob es das ist, das ich während der Wiedergabe raus höre). Wird GND entfernt ist das Rauschen immer noch da. Wird stattdessen VCC entfernt ist das Rauschen weg. Wird kein Lied abgespielt, PWM Leitung weiterhin nicht angeschlossen, Op an Audio Booster angeschlossen, höre ich ganz leicht ein Rauschen, sobald das PWM Modul im PIC startet wird das Rauschen deutlicher. Alles habe ich nur durch Hören getestet, kein Oszilloskop. Ich bin um jeden Vorschlag/Hilfe sehr dankbar, da ich im Moment nichts weiter weiß.
Du machst dir bei einer 8Bit-PWM echt noch Sorgen um das Rauschen? Google mal "Quantisierungsrauschen" ;) Wenn bei Ruhe auch Ruhe sein soll, ist die Voltage Density (nV/Wurzel-Herz) relevant. Der MCP601 ist mit seinen 29 da schon ein ziemlicher Wasserfall und damit AFAIR schlechter als der ua741. Die uuralten TL071/2/4 (die nur nicht für Low Voltage taugen) haben schon 18, MC33078 (auch nicht LV-tauglich) ist bei 4 rum.
Vielen Dank schon einmal für deine Einschätzungen bzgl. des OpAmp. Wenn Ruhe ist, schalte ich den Verstärker aus, somit hat sich das Problem erledigt. Macht sich die Voltage-Density nicht auch bei Betrieb bemerkbar, oder meintest du eher, dass Rauschen durch die 8-Bit das übertönen würde? :-) Mit der Audioqualität von 8-Bit bin ich eigentlich sehr zufrieden. Zwar entsteht bei der Umwandlung von 16-Bit auf 8-Bit mit bspw. Audacity schon ein Grundrauschen, da es am PC aber deutlich weniger rauscht, dachte ich, ich könnte meine Schaltung noch weiter optimieren, bspw. mit besserer Wahl der Filterparameter, ...
Frank M. schrieb: > Ich spiele mit einem uC (PIC24F) mittels PWM eine 8-bit 22050Hz > WAV-Datei, die ich von einer SD-Karte lade. (nach dem Buch 'Learning to > Fly the PIC24F') Hat das einen Grund, warum Du einen PIC24 und keinen dsPIC33 nimmst. Da gibts nämlich Typen, die gleich 14 Bit Stereo Audio out eingebaut haben. Schau Dir den dsPIC33F128GP802 (28 Pin) bzw GP804 (44 Pin) oder die MC802/MC804 an. Da hast Du die Probleme nicht - der spielt auch 48kHz 16 Bit stereo problemlos ab. fchk
Frank K. schrieb: > Hat das einen Grund, warum Du einen PIC24 und keinen dsPIC33 nimmst. Da > gibts nämlich Typen, die gleich 14 Bit Stereo Audio out eingebaut haben. > Schau Dir den dsPIC33F128GP802 (28 Pin) bzw GP804 (44 Pin) oder die > MC802/MC804 an. > > Da hast Du die Probleme nicht - der spielt auch 48kHz 16 Bit stereo > problemlos ab. > > fchk Sicherheit/Einfachheit. Ich kam von 8-Bit PICs mit Basic. Um sicher mit 16bit PICs in C umgehen zu können und es zu erlernen kam erst einmal kein dsPIC in Frage. Das oben erwähnte Buch diente mir auch als Einstieg. Hinzu kommt, dass im Microchip Forum hin und wieder nicht immer positiv über den dsPIC geredet wurde, zumindest ist das bei mir hängen geblieben. Und naja, eigentlich reicht der 24F auch aus. Ich brauche keine HiFi-Audioausgabe, ich habe auch nur Mono, es soll für Sprache und kurze vordefinierte Lieder sein. Er ist eingebunden in einem größeren Projekt, das USB, OLED, ... aufweist, dadurch muss auch ein größeres Modell mit genug I/O Pins benutzt werden. Hinzu kommt, dass alles auch mit Supercaps als Akku betrieben wird, wodurch der uC nicht allzu Stromfressend sein darf. Der dsPIC hat deutlich mehr Leistung, ob bei gleicher Leistung gleich viel verbraucht weiß ich nicht. Aber bevor ich mich in dsPICs einarbeiten wollte, die dann auch wieder 'nur' 16-Bit sind, wäre mein nächster Schritt, falls ich mehr Leistung und bessere Qualität brauche auf 32-Bit, vermutlich ARM sofern Microchip nichts besseres raus bringt, zu wechseln, was aber in ferner Zukunft liegt. Kurz und knapp: Ich hatte keine Lust mich in dsPICs und deren Eigenarten einzuarbeiten und wollte lieber mit dem 'Allerwelts' Modell arbeiten, für das ich deutlich mehr Einsätze mir Vorstellen kann und weniger Zeit investieren muss. Ich habe einmal einen passiven Tiefpass (30Hz) vor den Op Amp gesetzt, das Rauschen bei nicht angeschlossener PWM Leitung, aber Abspielen des Lieds, ist dadurch fast verschwunden. Einen Einfluss auf das Rauschen bei angeschlossener PWM Leitung hatte es aber nicht :-( Vermutlich hat Georg A. schon das richtige Stichwort mit Quantisierungsrauschen angesprochen gehabt. Bei 16-Bit WAV Files betrachtet in Audacity sieht man kaum ein Grundschrauen, umgewandelt auf 8-Bit und wieder mit Audacity betrachtet sieht man das Rauschen schon deutlicher, als Balken eben, da die Auflösung nur noch 8-Bit ist. Vielleicht kann ich also einfach die Audio-Files noch etwas optimieren. Hörbar ist es auch eher nur bei Sprache.
Georg A. schrieb: > Du machst dir bei einer 8Bit-PWM echt noch Sorgen um das Rauschen? > Google mal "Quantisierungsrauschen" ;) ich kenn mich jetzt bei audio (und wie genau des sein muss, damit mans nicht hört) nicht so aus, aber quantisierungsrauschen kriegt man doch mit nem rekonstruktionstiefpass weg, oder? der muss halt die frequenz, mit der sich die PWM-Taktung ändert, rausfiltern....
Frank M. schrieb: > Aber bevor ich mich in dsPICs einarbeiten wollte, die dann auch wieder > 'nur' 16-Bit sind, wäre mein nächster Schritt, falls ich mehr Leistung > und bessere Qualität brauche auf 32-Bit, vermutlich ARM sofern Microchip > nichts besseres raus bringt, zu wechseln, was aber in ferner Zukunft > liegt. Unsinn. Der Unterschied zwischen PIC24 und dsPIC sind einige zusätzliche Befehle für die DSP-Erweiterung. Mehr nicht. Punkt. Wenn Du PIC24 kennt, kennst Du dsPIC auch. Die Einarbeitung ist so ziemlich gleich 0, der Compiler ist ohnehin der gleiche. Die Unterschiede innerhalb der PIC24-Familie (z.B. zwischen einem PIC24F16KL401 und einem PIC24EP32MC203) sind wesentlich größer als die zwischen den korrespondierenden PIC24 und dsPIC-Familien (PIC24E-dsPIC33E, PIC24F/H-dsPIC33F,...) fchk
> aber quantisierungsrauschen kriegt man doch mit nem > rekonstruktionstiefpass weg, oder? Wenn das so einfach wäre, würde doch jeder nur noch Wandler mit 4Bit-PWM machen und nicht dieses hochkomplizierte Delta-Sigma-Zeug ;)
Ich würde mal vermuten, es muss halt ein möglichst steiler Tiefpass sein.... Natürlich kommt man mit weniger Auflösung nur zu schlechterer Tonqualität, das ist klar. Aber ich denke das könnte man trotzdem mit dem Tiefpass höherer Ordnung verbessern
Ich habe mal nach Rekonstruktionstiefpass gesucht, jedoch kaum etwas dazu gefunden. Bei manchen Quellen wird auch ein Tiefpass bspw. bei Rechtecksignalen so genannt, da eben die unerwünschten Oberschwingungen rausgefiltert werden und somit das Singal rekonstruiert wird. Das mit einem Tiefpass höherer Ordnung kann ich mal nächstes Wochenende ausprobieren, nur da stellt sich mir eben die Frage, wie den Q-Faktor und Dämpfungsparameter bei den Sallen-Key Filtern wählen? Nach welchen Kriterien geht man dort vor?
Frank K. schrieb: > Mal konkret: Welchen PIC24 benutzt Du denn genau? > > fchk Den PIC24FJ256GB108-I/PT
Was 8 Bit angeht: ich empfehle dir µ-law oder a-law-Kodierung, das ist nicht lineares sondern (grob) logarithmisches PCM. Damit hast du wesentlich bessere Tonqualität bei vergleichbarem Aufwand. Du brauchst natürlich PWM mit höherer Auflösung (12 Bit ist ne gute Hausnummer) und eine Lookup-Tabelle für log->linear, aber ansonsten war's das. Hat sich jahrzehntelang im Telefonnetz bewährt (z.B. ISDN).
Frank M. schrieb: > Frank K. schrieb: >> Mal konkret: Welchen PIC24 benutzt Du denn genau? >> >> fchk > > Den PIC24FJ256GB108-I/PT Aha. Also ziemliches Low-End, was PWM angeht - die MC (Motor Control) dsPICs können das deutlich besser. Aber Du hast Framed SPI, und damit kannst Du einen Codec per I2S oder TDM ansteuern. Frame Sync ist in diesem Fall !SS. Da gibts dann z.B. für Handys kleine Class D Audioverstärker mit digitalem Eingang, z.B. Analog Devices SSM2529 oder MAX98355A/B. Das sind zwar ziemliche Mikroteile, aber mit gelförmiger Lötpaste und Heißluft solltest Du die auf Deine Platine bekommen. Da kannst Du dann direkt ein kleines Lautsprecherchen ansteuern. Manche dsPICs haben zu diesem Zweck noch ein extra DCI Digital Codec Interface. Aber jetzt weißt Du ja hoffentlich, das aus Programmiersicht PIC24 und dsPIC nahezu identisch sind, wenn Du die DSP-Intrinsics und die beiden 56 Bit Akkus nicht benutzt. fchk
Frank K. schrieb: > Aha. Also ziemliches Low-End, was PWM angeht - die MC (Motor Control) > dsPICs können das deutlich besser. > > Aber Du hast Framed SPI, und damit kannst Du einen Codec per I2S oder > TDM ansteuern. Frame Sync ist in diesem Fall !SS. Da gibts dann z.B. für > Handys kleine Class D Audioverstärker mit digitalem Eingang, z.B. Analog > Devices SSM2529 oder MAX98355A/B. Das sind zwar ziemliche Mikroteile, > aber mit gelförmiger Lötpaste und Heißluft solltest Du die auf Deine > Platine bekommen. Da kannst Du dann direkt ein kleines Lautsprecherchen > ansteuern. > > Manche dsPICs haben zu diesem Zweck noch ein extra DCI Digital Codec > Interface. Aber jetzt weißt Du ja hoffentlich, das aus Programmiersicht > PIC24 und dsPIC nahezu identisch sind, wenn Du die DSP-Intrinsics und > die beiden 56 Bit Akkus nicht benutzt. > > fchk Vielen Dank. Das wäre natürlich die beste Lösung die optimalen Klang erzeugen würde, wodurch ich die ganzen Probleme mit Filter etc. nicht mehr hätte. Da gebe ich dir vollkommen recht. Nachdem ich mir die dsPICs gerade nochmal genauer angeschaut habe kann ich dir auch ganz genau den Grund nennen der damals gegen sie sprach: Zu der Zeit, vor zwei Jahren, als ich mich mit den PIC24F angefangen habe zu beschäftigen, gab es keine dsPICs mit USB und die die es gab auch nur mit weiteren Einschränkungen. Erst die dsPIC33E-Reihe die wohl Mitte 2011 oder noch später raus kam hatte das was ich brüchte, was ich aber nicht mitbekam, da ich auch nicht ständig auf der Jagd nach neuen Modellen bin ;-) Da aber momentan mit dem PIC24FJ alles funktioniert wie ich es gerne hätte, die Leistung gut ausreicht und die Schaltung so weit fertig ist, und ich eben ein bisschen Rauschen bei der Sprachausgabe bemerkte, dachte ich, dass ich das durch ein geeigneteres Filter, was leicht realisierbar gewesen wäre optimieren hätte können. Zeitlich bin ich momentan durch meine Abschlussprüfungen im Physikstudium auch extrem begrenzt, wodurch ich bei diesem Projekt, das ich in meiner reinen Freizeit realisiere, momentan nicht allzu viel weitere Zeit investieren kann. Zwar hast du mich überzeugt, dass ein Wechsel zu den dsPICs programmiertechnisch ohne Probleme von statten gehen sollte, für die Hardware, aufgrund eines anderen Packages, und kompletter Überarbeitung des Audioteils, braucht es aber eine komplett neue Schaltung, die Verdrahtung muss ggf. angepasst werden und meist übersieht man dann hier und dort ein paar spezielle Eigenarten, sodass es erst beim zweiten Anlauf perfekt wird. Ich bin dir wirklich dankbar für deine Tips, aber ich würde es gerne, momentan, bei dem momentane Aufbau belassen und versuchen das beste damit rauszuholen. Im Nachhinein ist man immer schlauer, hätte ich das gewusst, was du mir gerade geschildert hast und hätte ich den dsPIC33E vor zwei Jahren gesehen und hätte ich vor zwei Jahren den Wissensstand von heute gehabt, hätte ich den dsPIC gewählt.
Im Audiobereich werden gerne 5-polige Butterworth-Filter benutzt. Scheint das Optimum bezüglich Aufwand vs. Leistung zu sein. An deiner Stelle würde ich einfach mal bei den DAC-Herstellern kopieren gehen. Eine auch annähernd komplette psychoakustische Theorie ist mir nicht bekannt. Simulieren könnte man das, wenn man das Ohr spezifieren könnte. Die meisten werden das einfach durch Hörvergleichtests optimieren. Das obige wäre dann aber schon Oberklasse für richtige DACs. Vermutlich kommst du mit 2-polig als Sallen-Key bereits aus. Die Filterparameter für solch einfach Sachen finden sich an vielen Stellen im Netz.
Ich habe jetzt schon mehrere WAV Player und Rekorder auf MicroChip und Atmel Basis entwickelt und in Projekten implementiert. Das Hauptproblem ist immer, dass die Schaltungen die man im Internet findet zwar von Leuten mit Mikroprozessor Knowhow entwickelt wurden, diese aber keine Experten für Audio sind. Und so verwundert es nicht, dass die meisten Projekte die auch hier im Forum immer wieder zum Besten gegeben werden einfach unterirdisch schlechte Ausgabe/Eingabe haben. Ich weigere mich eigentlich langfristige Projekte mit Chips zu entwickelt die Morgen schon nicht mehr erhältlich sind. Das ist vergebliche Liebesmüh. Es reicht doch ein normaler AVR Tiny oder PIC16 für knapp 2 Euro völlig aus um klare Sprach- und Musikein-/ausgabe ohne Rauschen zu generieren sofern man die richtige Schaltung für den Verstärker bzw. Mikrofon-Eingang in bekannter und praxiserprobter Analog-Schaltung ohne IC's ausführt. Bequemer sind AMP natürlich, aber qualitätsmässig auch deutlich Schlechter. Und so summieren sich die Kosten auf nicht mal 10 Euro um einen tauglichen Player/Rekorder in CD-Qualität herzustellen, benutzt man einen kleineren Quartz dann reicht es allemal für Telefonqualität - manchmal sogar Pflicht wenn es um Projekte geht die Störstrahlung so gar nicht brauchen können ;-) Microchip bringt dieses Jahr noch einen neuen 8-Bit Chip, der über 28KB Programmspeicher und 1KB Ram verfügt (und der über 28 i/O im DIP Format verfügt, 32MHz Takt intern/20 Mhz Takt extern). Das dürfte dann ausreichen um gepuffert FAT lesen UND schreiben zu können und so nebenbei passt ein FAT Filesystem auch zum Schreiben auf die CPU. Und wem die Qualität der Samples nicht ausreicht der kann ja einen externen PWM mit 12-16 Bit nehmen, ist allemal besser als sein Design unnötig durch grössere CPU's aufblähen zu müssen. Klar könnte ich einen Raspberry PI nehmen oder ein Atmega/PIC24 aber der Chip allein ist schon grösser als die Platine für eine völlig ausreichende Lösung. Und wer MP3 nicht braucht (weil auch Qualitativ schlechter als WAV) hat sowieso mehr Möglichkeiten.
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.