www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Höhe eines Signals verändern


Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich steh grad ein wenig auf dem Schlauch. Ich lese in c Inputsignale in 
einen Integer ein, jezt will ich die Tonhöhe verändern aber irgendwie 
komm ich nicht darauf wie ich das realisieren kann. Ich bin mir sicher 
das es etwas ganz einfaches sein muss aber ich stehe wie gesagt momentan 
total auf dem Schlauch.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entspricht dabei das t dem Eingangssignal? Wenn ja kann man die Tonhöhe 
mit
sin(2*pi*n*t) verändern? (Das n wäre dann ein vorher eingesezter Wert)
Danke für deine schnelle Antwort

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

Bewertung
0 lesenswert
nicht lesenswert
Die Tonhöhe einer Tonaufzeichnung nachträglich zu ändern ist nicht so 
einfach, geht es darum?
Da gibt es den "Pitch-shifter", das geht ähnlich der Zeitlupe/-raffer 
beim Film. Alle Frequenzen sind mit einem Faktor multipliziert.
Dann gibt es noch die Einseitenbandmischung, da wird eine Frequenz 
addiert, das klingt bei Musik anschließend sehr seltsam. Der 
"Ringmodulator" war in der experimentellen Musik mal ein beliebtes 
Spielzeug.

Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht darum die Tonhöhe in echtzeit zu verändern. Ich lese den 
Integerwert in c ein bearbeite ihn und gebe ihn gleich danach wieder 
aus, am besten wäre ein kleines code Beispiel wie das aussehen könnte.

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

Bewertung
0 lesenswert
nicht lesenswert
wie gesagt, das geht nicht so einfach, hab schon öfters den "voice 
changer" von ELV genannt, der arbeitet mit einem MSM6722 von OKI:
http://www.alldatasheet.com/datasheet-pdf/pdf/1348...
http://www.elv.de/Voice-Changer,-Komplettbausatz/x...

Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die hilfe
ein kompletter Baustein kommt leider nicht in Frage der Aufbau ist 
unveränderlich es muss leider alles softwareseitig erledigt werden. An 
Rechengeschwindigkeit oder Ram mangelt es nicht aber am verständnis.

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

Bewertung
0 lesenswert
nicht lesenswert
Zum Frequenz-Verdoppeln wird je ein Stück von einigen Millisekunden 
zwischengespeichert, und doppelt so schnell zweimal ausgegeben. Genauso 
macht es der Zeitlupe im Film, jedes Bild wird doppelt gezeigt. Die 
Störung, die sich dadurch ergibt sollte im Infraschallbereich liegen, 
dann hört man sie nicht so stark.

Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also muss das auf jeden Fall auf mehrere Threads verteilt sein das man 
gleichzeitig aufnnehmen und abspielen kann? Ab eiw vielen samples 
funktioniert das ganze denn einigermasen? (Es geht um sehr schwache 
Instrumentensignale also darf die latenz nicht zu hoch werden)

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

Bewertung
0 lesenswert
nicht lesenswert
Nein das geht kontinuierlich mit einem Ringpuffer, der mit einem 
Schreibzeiger z.B. mit einer festen Geschwindigkeit beschrieben wird und 
mit einem Lesezeiger mit variablem Tempo wieder ausgelesen. Eine kleine 
Verzögerung ergibt sich immer. Der Lesezeiger überholt bei 
Frequenzerhöhung immer wieder des Schreibzeiger, bei Erniedrigung kommt 
er nicht nach und überspringt Stücke aus dem Datenstrom, die schon 
wieder überschrieben wurden.

Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm das sind alles Sachen die mir neu sind ich habe bisher nur in 
diversen Hochsprachen programmiert oder eben direkt mit logikbausteinen 
gearbeitet daher habe ich ein komplett falsches denkmuster. Ich dachte 
mir das Schreib und Lesezyklen paralell aber mit unterschiedlicher 
geschwindigkeit erfolgen müssen => Multithreading. Wie der Ringpuffer 
(wenn ich es richtig verstanden hab ist das ja nur ein Integer Arrayin 
dem die Werte ständig überschrieben werden)seriell ablaufen soll ist mir 
schleierhaft.

Autor: nur ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Methode mit dem Pitch Shift hört sich auch recht interessant an. Wie 
schwer ist es in etwa das zu lernen und dann umzusetzen? Ich bin 
udrhcuas bereit einige Stunden zu investieren um mich in die Materie 
einzuarbeiten aber ich finde zu solchen sachen immer nur beschreibungen 
für die ein mathestudium als grundkenntnis nicht übel wäre

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

Bewertung
0 lesenswert
nicht lesenswert

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.