www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Frequenz shift


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.