Hallo,
ich würde gerne ein Sprachsignal von einem ATMega32 zum anderen
Übertragen und von diesem aus per RS232 zum PC und sich dieses dort
anhören.
Die Sprachqualität soll gut bis mäßig sein.
Nun habe folgende Möglichkeit wie man es angehen könnte:
An ATMega einen Mikrophon anschließen, die analogen Signale dann mittels
AD-Umsetzer in digitale umwandeln und diese anschließend an den anderen
ATMega mit RFM12 übertragen.
Jedoch kann ich mir vorstellen, das es einen riesen Aufwand darstellt,
oder irre ich mich?
Kann ich dies mit dem ATMega32 und RFM12 realisieren oder sind diese
dafür ungeeignet?
Gibt es eine weitere einfachere Möglichkeit das Sprachsignal zu
übertragen, vielleicht gibt es bereits fertige Funkmodule, die schon das
Signal ins digitale umwandeln oder ähnliches?
Danke
Mega8 nach Mega8 ist kein Problem. Eng wird es eher bei der Übertragung
auf den PC. Normalerweise kriegt man max. 115000 Baud, bei
8-Bit-Auflösung sind das also noch gut 10 kHz Samplingrate und somit
noch rund 5 kHz echte Bandbreite. Sprache kann man damit verständlich
übermitteln, aber 'gute' Qualität ist das nicht mehr.
Ich hab mal so ne Messreihe angelegt. Ab circa 4kHz Sampling wirds
verständlich, bisserl dumpf (klar, fehlt ja Bandbreite), aber man kanns
verstehen (siehe...ähhm..höre Anhang, das ist ein Text mit 5kHz).
Dann wärn da natürlich noch allerhand Codecs, die deine Audiodaten
schrumpfen lassen:
* PCM
* MELP
* Speex
..und wie sie alle heißen.
Speex funktioniert angeblich schon ab 600 Bytes/sec mit recht guter
Sprachqualität, der AVR dürfte dafür aber etwas knapp sein.
uLaw und ALow sind von der Kompression her aber bescheiden (2:1), ebenso
ADPCM (bei mehr als 2:1 wird die Qualität sehr schlecht).
Alles was besser als etwa 3:1 komprimiert läuft entweder nicht auf einem
AVR, oder die Qualität ist unbrauchbar.
Ich hatte auch schon mit dem Gedaknken gespielt, Audio über RFM12 zu
übertragen, aber es mangels passender Komprimierung dann doch sein
lassen.
Das einzige was ich gefunden hatte, das ohne größeren Aufwand möglich
wäre ist ein Speex Codec für einen dsPIC. Der braucht aber >20MIPs und
eine Menge RAM usw.
Hallo,
es gibt auch resourcensparende Modulationsverfahren, die z.B. mit einem
Bit relativ gut verständliche Übertragungen hinbekommen. Suche mal im
Web unter dem Stichwort "Delta-Modulation". Dabei wird ein Kurvenverlauf
in der 1. Ableitung (steigt, bleibt, fällt) abgebildet ...
Frank
Hans wrote:
> Könnte man evtl. zwei günstig ersteigerte DECT Telefone mit dem ATMega> steuern?
Die Idee hatte ich auch schon, das kann man vergessen (außer man nutzt
das Telefon komplett und gibt das Audiosignal analog rein). Die
verbauten ICs stammen fast immer von Siemens/Infineon und sind alles
proprietärer Mist, zu denen man keine Datenblätter bekommt. Das einzige
was ich bisher rausgefunden habe ist, dass die PLLs ein paar hundert mal
pro Sekunde neu programmiert werden, also alleine schon für die
Datenübertragung der Steuerdaten ein ziemlicher Aufwand notwendig ist.
Frank Esselbach wrote:
> Hallo,>> es gibt auch resourcensparende Modulationsverfahren, die z.B. mit einem> Bit relativ gut verständliche Übertragungen hinbekommen. Suche mal im> Web unter dem Stichwort "Delta-Modulation". Dabei wird ein Kurvenverlauf> in der 1. Ableitung (steigt, bleibt, fällt) abgebildet ...
Allerdings verschwendet die noch mehr Bandbreite, die Samplerate muss
nämlich sehr viel höher sein, als bei den mit 8 oder 16bit
digitalisierten Rohdaten. Beispiel: 8bit Wert -> 1bit, bei gleicher
Bitrate kann die Samplerate also 8x höher liegen. In den 8bit kann man
aber gerade mal einen Wertebereich von +/-8, also 3bit überwinden.
"Bleibt" gibt es übrigends meistens nicht, sondern man verwendet nur
steigt/fällt, was ein zusätzliches Rauschen erzeugt.
Es gibt zu ADPCM auch was für den AVR. Ich glaube, ein Cornell Projekt
und eine AN zum Dekodieren. Man findet im Netz auch Samples, Audacity
kann einige Kompressionsarten beim Export.
http://www.mikrocontroller.net/search?query=adpcm
Tom wrote:
> Vorverstärker zwischen Mikrofon und ATMega muss sein.
Sehr glorreicher Beitrag, der 1.) nicht in dieses Forum passt (weil's
hier eher um die übertragungstechnischen Aspekte geht) und 2.) nicht
stimmt. Der ATmega32 hat einen internen Verstärker am ADC, der die
Sache (für ein gängiges Elektretmikro) durchaus erledigen kann.
Beitrag "Re: uC gesucht; Funktionsumfang; Anfängerfrage"
Hi!
Wie wärs mit einem externen Codec für den AVR? Ein VS1053 kann En- und
Decodieren und das sogar im OggVorbis Format. Damit sollte man dann auch
eine brauchbare Qualität hinbekommen.32kB/s für ein Monosignal bringen
schon eine recht gute Qualität in OggVorbis. Ist halt nicht ganz billig.
Grüße
Fasti
Ja das ist das D-Star-Modem, das von ICOM im Amateurfunk propagiert
wird, leider ist auf dem Verfahren ein Copyright des Herstellers, sodaß
man keine Softwarelösung, z.B. mit Soundkarte veröffentlichen darf.
http://de.wikipedia.org/wiki/D-STAR
Digitale Sprachübertragung mit 3600 bits/s (3.6 kbps) inkl.
Fehlerkorrektur
Im BOS-Funkbereich (Polizei, Hilfsdienste) ist ein anderer Standard
üblich, der zuverlässiger sein soll
http://de.wikipedia.org/wiki/Bos_funk#Digitaler_BOS-Funk
Wow soviele Infos, ich hatte mir die Sprachübertragung weniger aufwändig
vorgestellt. Aber das klingt nach einer MENGE Arbeit!
Jetzt kenne ich aber zumindest den konkretten Wegweiser.
Danke nochmals an alle für die Infos!
RichieRich wrote:
> Wow soviele Infos, ich hatte mir die Sprachübertragung weniger aufwändig> vorgestellt.
Sie wird weniger aufwändig, wenn du mehr Kanalbandbreite zur Verfügung
hast. Dann musst du keine irgendwie gearteten Kompressionsalgorithmen
mehr anwenden, und wenn der Kanal zuverlässig ist, dann brauchst du
auch keine Fehlerkorrektur.
Selbst ISDN benutzt aber halt schon µ-law-,,Kompression'', um mit nur
8 bit pro Sample auszukommen, zusammen mit 8 kHz Abtastrate macht das
dann die ISDN-typischen 64 kbit/s. Zum Vergleich, für CD-Qualität
braucht man 1411200 kbit/s (2 Kanäle je 16 bit, keine Kompression,
44,1 kHz Abtastrate).
Jörg Wunsch wrote:
> Zum Vergleich, für CD-Qualität> braucht man 1411200 kbit/s (2 Kanäle je 16 bit, keine Kompression,> 44,1 kHz Abtastrate).
1411200 bit/s, Faktor 1000 kleiner aber immer noch eine ganz dicker
Datenstrom.
Gruß Katherine
Der Thread ist zwar schon alt, aber anstatt mit Kanonen auf Spatzen zu
schießen könnte man auch einfach einen sehr einfachen Codec mit Delta
Modulation verwenden, der sich locker in einem AVR unterbringen lässt
und schon ab 16 kBit/s brauchbare Ergebnisse liefert (passende analoge
Filterung des Eingangs und Ausgangssignal wird vorausgesetzt).
Ein AVR mit Harware Multiplizierer ist optimal, ohne geht es aber auch
(es sind nur 2 (16 Bit) Multiplikationen pro Abtastwert nötig), dazu
zwei Vergleiche (8 Bit), 1 (ggf. 2) Additionen/Subtraktionen und eine
Schiebeoperation.
Encoder und Decoder sind identisch, mit dem Unterschied dass der Decoder
einen Vergleich weniger durchführen muss.
Der Codec ist fehlertolerant, da die Information eines (fehlerhaften)
Bits über einige ms "abklingt". Wenn man es sich anhört, erhöht sich
(ähnlich wie bei einer analogen Funkverbindung) das Rauschen im
Hintergrund.
Weblinks:
http://en.wikipedia.org/wiki/Continuously_variable_slope_delta_modulationhttp://www.gamearchive.com/General/Data_Sheets/cvsd_speech_info/an1544_cvsd.pdf
> wie wäre es mit einem extra Sprachcodec (sowas wie für GSM, Baudraten> bis 4,8kbps).
GSM "schätzt" nur was jemand sagt, ansich schickt GSM keine
Sprachinformationen, sondern nur einen Index. Dieser Index ist für eine
Liste gedacht, in der die menschliche Sprache in 20ms Laute unterteilt
ist. Der Empfänger sucht sich dann mittels Index diesen Sprachton aus
seiner Datenbank wieder raus. Damit spart man viel Übertragungsaufwand!
>Damit spart man viel Übertragungsaufwand!
...und tauscht das gegen nur "minimalen" Aufwand für den GSM Codec ein.
Mal im Ernst: Ein AVR ist der falsche Prozessor für hochkomprimierende
(Sprach)Codecs.