Sprachsynthese mit PIC (ohne ext. Speicher)

#3566408
Lesenswert?

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.
Gast #3566452
Lesenswert?

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 ...
Gast #3566478
Lesenswert?

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.
#3566492
Lesenswert?

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.
Gast #3566662
Lesenswert?

>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.
#3566701
Lesenswert?

__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
Gast #3567163
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren