Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frequenz shift


von Benedikt (Gast)


Lesenswert?

Mit einem ARM7 als Low-Cost DSP versuche ich gerade einen Voice Changer
zu programmieren.
Dafür gibt es zwei Ansätze:
- Samplerate zwischen Ein und Ausgang unterschiedlichen wählen. Das ist
sehr einfach und schnell, hat aber den nachteil dass es bei den Daten
einen Sprung gibt, da der Samplepuffer über oder unterläuft. Man kann
den Übergang zwar etwas entschärfen indem man die Werte langsam
überblendet, aber man hört dies trotzdem. Bei diesem Verfahren werden
die Frequenzen mit einem Faktor multipliziert, also faus=fein*x
- Das Frequenzspektrum mit einem Einseitenbandmodulator verschieben.
Dazu verwendet man meist eine Hilberttranformation um das
Eingangssignal  komplex zu machen. Anschließen mischt man das Signal
mit der zu verschiebenden Frequenz. Die Frequenz wird also nru
verschoben: faus=fein+x;

Gibt es sonst noch einen nicht alzu komplizierten Ansatz, der etwas
weniger Rechenaufwendiger ist als die Hilberttransformation, sich aber
besser anhört als die erste Methode ? Da ich die Hilbertranformation
mit einem FIR Filter mit 126 Werten mache, ist der ARM nämlich ziemlich
ausgelastet.

Für Real und Imaginärteil ist je ein FIR Filter nötig, um das
Eingangssignal komplex zu machen. Die Koeffizienten habe ich aus einem
Beispielprogramm von einem dsPIC Board übernommen. Bei den
Koeffizienten ist jeder zweite Wert 0. Die Werte für Real und
Imaginärteil sind gleich, nur ist die Richtung umgekehrt.
Da 126 Werte sehr viel Rechenaufwand sind, habe ich versucht mit Matlab
neue Werte für eine Hilbert Transformation zu erzeugen, aber damit
funktioniert das ganze nicht (es ist dann ein DSB Modulator und kein
SSB). Die mit Matlab erzeugten Werte sind in der ersten Hälfte negativ
und in der zweiten positiv, sehen also etwas anderst aus.

Was mache ich falsch, bzw. was habe ich übersehen ?

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Hallo Benedikt,
ichh habe mir gerade den "Voice-Changer"-Bausatz von ELV geleistet,
da ist ein OKI-Chip drin, der alles enthält (MSM6722 ?), aber das
Datenblatt sagt nicht viel über die Methode aus. Die Samplerate ist für
das Heruntersetzen um eine Oktave auch nur etwa 4 kHz.
Bei der konventionellen SSB-Erzeugung gibt es drei Methoden, die
(üböliche) Filtermethode mit steilflankigem Quarzfilter, dann die
Phasenmethode, das entspricht der Hilpertfunktion, und schließlich die
sogenannte dritte Methode nach Weaver, die benutzt eine doppelte
Umsetzung mit zwei sin/cos-Frequenzen, zunächst auf eine niedrige
Zwischenfrequenz, die sogar im NF-Bereich liegen kann. Damit spart man
sich den breitbandigen Niederfrequenz-90Grad-Phasenschieber.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

ein englichscher Wikipedia-Artikel
http://en.wikipedia.org/wiki/Single_sideband
führt zur Seite
http://www.microtelecom.it/ssbdex/ssbdex-e.htm
wo die SSB-Erzeugung nach der Weavermethode in einem Spartan II-FPGA
gezeigt wird

von Benedikt (Gast)


Lesenswert?

Die ELV Schaltung arbeitet nach dem Samplerate-Umwandlungs Prinzip. Das
ist das einzige was sich billig und ohne großen Aufwand machen lässt,
man benötigt (im einfachsten Fall) nur einen Ringpuffer Schreib/Lese
pointern die mit unterschiedlicher Taktfrequenz laufen.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Die Ringpufferlänge muß wohl so groß sein, dass die Übergangsknackse im
Infraschallberich liegen.
Ich habe schon mal hier erwähnt, in Heinz Richters Buch "Tonaufnahme
für alle" wird ein Diktiergerät beschrieben, das mit rotierenden
Tonköpfen sozusagen einen elektromechanischen Ringpuffer benutzt, um
variable Abspielgeschwindigkeiten bei konstanter Tonhöhe zu erreichen.

von Benedikt (Gast)


Lesenswert?

Wenn man den Ringpuffer aber zu groß macht, kann es passieren dass
einzelne Stücke komplett übersprungen werden. Die optimale Länge liegt
bei wenigen 10 Milisekunden, und dieses Brummen hört man mehr oder
weniger (je nach Filteraufwand).

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Zwischen Ringpuffer und SSB besteht aber der prinzipielle Unterschied:
Der Ringpuffer multipliziert alle Frequenzen mit einem konstanten
Faktor, während SSB einen konstanten Frequenzversatz addiert. Die
Harmonischen liegen danach nicht mehr auf ganzzahligen Vielfachen der
Grundfrequenz, alles bekommt einen röhrenden Glockenklang. Der
Ringpuffer klingt natürlicher. Bei geringem Versatz z.B. gegen
akustische Rückkopplung, fällt das vermutlich nicht auf.

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
Noch kein Account? Hier anmelden.