C++ Frequenzverschiebung eines Sound Signals

Gandalf2210

Commodore
Registriert
Mai 2010
Beiträge
4.192
Hallo zusammen
In den Semesterferien wollte ich mich mal ein bisschen mit dem Vorlesungsstoff beschäftigen (ja, reichlich spät :evillol:) und die theoretischen Sachen, die wir zu fouriertransformation, Signalfaltungen und co gemacht haben praktisch ausprobieren.
Ich wollte ein Signal in der Frequenz verschieben.
Im Frequenzbereich ist das eine Faltung mit einem verschobenen delta Impuls, im Zeitbereich folgt daraus eine multiplikation mit einer komplexen e-funktion.
Da ich nicht wirklich weiß, was dieses ganze imaginärteile von Signalen auf sich hat, hab ich beschlossen anstatt der e-Funktionen einen einfachen Sinus zu nehmen. Der ist aber leider im Frequenzbereich ZWEI delta impulse, einen nach links und einen nach rechts verschobenen. Mein Signal ist also im Frequenzbereich nach links UND nach rechts verschoben

aus einem 701 Hz Signal, welches mit 441 Hz multipliziert wurde, wurde ein Signal mit 260 und 1142 Hz

Weiß einer von euch, ob, und wenn ja wie man eine Frequenzverschiebung in EINE Richtung implementieren kann?
Hoch/Tiefpass hinter schalten würde in dem Falle gehen, aber wenn ich z.B. ein Musikstück nehme, was von 20 bis 20.000 alles an Frequenzen hat würde der ja auch gewollte, verschobene Frequenzen raus filtern

mfg Gandalf2210
 
Zuletzt bearbeitet:
Ich kenne mich mit aktuell für C++ verfügbaren Bibliotheken nicht mehr ganz aus. Aber wäre es nicht sinniger für derartige Aufgabenstellungen Oktave oder Python als Entwicklungsumgebung zu nutzen ? Algorithmenentwicklung habe ich immer mit diesen Tools gemacht, weil diese eher der Algorithmusbeschreibung im mathematischen Sinne entsprechen als C++. Erst wenn ich in Oktave einen Algorithmus für ein Anwendungsproblem fertig entworfen und getestet hatte, erfolgte ggf. wegen GUI und Krams eine Portierung nach C++. Der ganze Klassen-"Overhead" macht es meiner Meinung sehr schwer, sich in C++ auf Algorithmen zu konzentrieren bzw. deren Verhalten zu verstehen.
 
das bekomm ich so einigermaßen hin, ein (zugegeben wackliges) Grundgerüst steht und ich kann die einzelnen Werte der wav datei bearbeiten und das ganze nachher wieder als wav exportieren.
Es scheitert gerade eher an so Sachen, das ich nicht weiß wie ich eine komplexe e-funktion in c++ realisieren soll (ok, würde gehen mit j*sin+cos), und was ich dann mit den komplexen signalanteilen anfangen sollte.
 
Gandalf2210 schrieb:
Ich wollte ein Signal in der Frequenz verschieben.
Im Frequenzbereich ist das eine Faltung mit einem verschobenen delta Impuls, im Zeitbereich folgt daraus eine multiplikation mit einer komplexen e-funktion.
Da ich nicht wirklich weiß, was dieses ganze imaginärteile von Signalen auf sich hat, hab ich beschlossen anstatt der e-Funktionen einen einfachen Sinus zu nehmen. Der ist aber leider im Frequenzbereich ZWEI delta impulse, einen nach links und einen nach rechts verschobenen. Mein Signal ist also im Frequenzbereich nach links UND nach rechts verschoben
aus einem 701 Hz Signal, welches mit 441 Hz multipliziert wurde, wurde ein Signal mit 260 und 1142 Hz

Weiß einer von euch, ob, und wenn ja wie man eine Frequenzverschiebung in EINE Richtung implementieren kann?

C++ ist schon OK (meine Meinung), die Sprache ist ein Werkzeug - sonst nichts.

Ich denke, Du musst Dich in die Fachpublikationen dazu einarbeiten und dann die entsprechenden C++Bibliotheken nehmen, die die jeweiligen Autoren auch genommen haben.

Komplexe Trigonometrie ist z. B. in Boost-C++ und neuerdings in der Standardbibliothek schon drin.
 
Zuletzt bearbeitet:
dann scheitert es aber leider immer noch an meinem mathematischen verständnis, da ich nicht weiß, was ich mit den reellwertigen und komplexen signalteilen anfangen sollte, wenn ich es schaffe diese zu berechnen.
 
Zurück
Oben