Hallo, ich würde gerne eine Sprachsynthese der Ziffern 0..9 (englisch) realisieren. Ziel wäre ein kleiner PIC mit vielleicht 7k oder 14k Flash. Ohne zusätzlichen Speicher. Kennt jemand so ein Projekt? gb
Ich denke, mit nur 14k Flash ist es nicht so einfach möglich. In Telefonqualität, hat ein Audiosignal 8000 Byte/s (8Bit * 8000Sampel/s). Wenn man davon ausgeht, dass eine Ziffer 0,5 Sekunden dauert, wären das 40kBytes. Für eine Codierung wie MP3 wird so ein kleiner PIC zu wenig Rechenleistung habe und es wäre ein externer MP3-IC notwendig. Mit einem 18F26k22 (64k Flash) für <2€ wäre es möglich. Wenn 0.35s pro Ziffer reichen, könnte man auf einen PIC18F25K20 für <1,50€ umstiegen. 10*0,35*8000=28kB, dann wären noch 4kB = 4kWorte für das Programm übrig. Ich habe getestet, 0.35s könnten riechen.
:
Bearbeitet durch User
Es geht mit deutlich weniger Speicher bzw. gespeicherten Samples. Ich habe eigene Versuche mit einem Arduino Uno gemacht. Die Soundschnipsel (ebenfalls Zahlen, aber deutsch) habe ich mit Audacity bearbeitet (hauptsächl. Höhen und Tiefen beschnitten und alle Samples gleich lang) und dann als unkomprimierte WAVE-Files gesichert. Eine Samplingrate von 4kHz 8 Bit Mono Länge je ca 0,3 s ergab immer noch hinreichende Verständlichkeit. Das ergibt für die Ziffern 0..9 und "Komma" ca. 15 kB (von 32kB ROM des Arduino Uno). Die Ausgabe erfolgte über eine PWM mit 32 kHz. Die Header der Wavefiles sind nur ein par Byte, die kann man ignorieren, sie haben keinen wahrnehmbaren Einfluss auf den Sound. Ich habe die Daten mit einem selbstgeschriebenen Tool in Dezimalzahlen (ASCII) umgewandelt und als Datenblock in den Programmcode hineinkopiert ...
Max H. schrieb: > Ich denke, mit nur 14k Flash ist es nicht so einfach möglich. > In Telefonqualität, hat ein Audiosignal 8000 Byte/s (8Bit * > 8000Sampel/s). Wenn man davon ausgeht, dass eine Ziffer 0,5 Sekunden > dauert, wären das 40kBytes. Für eine Codierung wie MP3 wird so ein > kleiner PIC zu wenig Rechenleistung habe und es wäre ein externer MP3-IC > notwendig. Es gibt auch noch andere Kompressionsverfahren als MP3. Unter anderem auch welche, die um Größenordnungen geringere Anforderungen an die Rechenzeit stellen als MP3, gegenüber Raw-PCM aber trotzdem erheblich Speicherplatz/Bandbreite sparen, ohne die Qualität dabei allzusehr in Mitleidenschaft zu ziehen. Ein sehr einfach zu implementierender Vertreter dieser 1. Generation der Audio-Codecs ist z.B. ADPCM. Bringt die gleiche Speicherplatzersparnis wie die Halbierung der Samplerate oder die 16telung der Auflösung, wirkt sich aber auf die Tonqualität längst nicht so verheerend aus wie diese beiden Ansätze... Das mag ein Grund dafür sein, daß er (bzw. vergleichbare Technologien) zumindest als Fallback bis heute noch eingesetzt werden, z.B. bei GSM und ISDN.
http://www.romanblack.com/picsound.htm "BTc is a sound conversion and compression algorithm. 1-bit sound is always "compressed" ie, 8 times smaller data than normal 8-bit PCM sound. It is also a much lower sound qualit" "Voice at 19.5kHz (above) is more of a challenge. [..] The noise artifacts are mainly bitrate /2 /3 /4. At 19.5kHz bitrate these are quite low noise frequencies of 9.7kHz, 6.5kHz and 4.8kHz which are loud to the ear so a fairly heavy hardware filter was used at about 5kHz [..] The sound of the voice was gritty and fizzy but was still fully understandable and suitable for simple applications." D.h. bei 1-Bit und 19.5kHz macht das 2.4kB/s. Wenn man mit dem 0.35s von Max. H rechnet, brauchst du damit für deine 10 Zahlen 8.4kB. D.h mit deinem 14kB PIC kommst du aus. Probier einfach aus, ob dir die Soundqualität reicht.
Danke schoen, Jungs. Das klingt ja gar nicht so schlecht. Also kein deutliches "NEIN". Ich werde experimentieren.
Und dann gibt es ja auch noch Sprachsynthese. Dann braucht man die Samples nicht auf dem Chip zu speichern, weil man sie bei Bedarf erzeugt - klingt aber dafür wie ein Roboter.
>Und dann gibt es ja auch noch Sprachsynthese.
Gibts für den PC Tools, mit denen man sagen wir 10 Schieberegler hat.
Der erste erzeugt ein 100Hz Sinus, der zweite einen 200Hz ... so dass
ich praktisch 100Hz Ton und die entsprechenden Oberwellen hab.
Um so Klänge zu erzeugen.
__gb__ schrieb: > Hallo, > ich würde gerne eine Sprachsynthese der Ziffern 0..9 (englisch) > realisieren. Ziel wäre ein kleiner PIC mit vielleicht 7k oder 14k Flash. Warum diese Beschränkung? Es gibt den dsPIC33FJ128GP802. 40MHz, 16k RAM, 128k Flash, Stereo Audio DAC, DSP Extensions. Der ist für solche Aufgaben gemacht, und das Ergebnis wird mit Sicherheit besser klingen. Für die Sprachdatenkompression gibts von Microchip ADPCM, G.726 und SPEEX Libraries. http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en532298 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en023610 fchk
__gb__ schrieb: > Der PIC mit 7k kann halt anderes, was der dsPIC33FJ128GP802 nicht kann. Und was wäre das? Sind die Kosten wichtig?
ist der pic ein 7k mal 8bit oder 7k mal 14bit und kommt man an die 14bit ran ? Denn dies ist ein riesen Unterschied. Hast du dir die AN643 mal angesehen ? Wenn man sie von 16bit auf 10bit umschreibt dann passt sie gut zu den einfacheren pics.
16F-PICs haben 1k, 2k, 4k oder 8k-Worte a 14bit. Das PICsound-Programm gibt u.a. die Daten per retlw+Bitmuster aus, so werden 6bits pro Wort verschwendet. Wenn man perl kann, könnte man sich die Daten umrechnen lassen, sodass alle 14bit eines Wortes mit dem DA-Pseudobefehl genutzt werden ( http://www.sprut.de/electronic/pic/assemble/pseudo.html#daten ) Man muss dann aber darauf achten, dass der PIC in der Lage ist, seinen eigenen Flash zu lesen, der PIC16F886 zb. kanns. Ebenso ist dann etwas mehr Rechenleistung gefragt, denn während der Zeit zwischen den Sample-Ausgaben muss der Flash gelesen, "entpackt" und der Ausgaberoutine übergeben werden. Da du aber relativ langsam samplen musst damit alles in den Flash passt, sollte genug Zeit sein.
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.