WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Verschiebung der Frequenz

 

Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2010, 10:55     Titel: Verschiebung der Frequenz
  Antworten mit Zitat      
Hallo zusammen,

ich kenne mich mit Matlab / Simulink zwar bisschen aus, aber was Signalverarbeitung angeht bin ich ein Neuling!
Ich habe über die Soundkarte eine 10sek. Aufnahme gemacht, die ich anschließend in Zeit und Frequenbereich darstellen lassen habe. Die Aufnahme wurde in "Stereomix" modus und durch Abspielen eines Geigentons als Datei durchgeführt.

ich habe dabei festgestellt, dass die Frequenz sich bei derselben Audiodatei verschiebt, wenn SampleRate von bspw. 5000 auf 32000 erhöht wird. (siehe beide Bilder)

Zum einen weiss ich nicht woran das liegt und zum anderen würde ich gerne wissen wie ich das Problem umgehen kann!

zwar ist mir klar dass die höheren Frequenzen bei geringerer Abtastrate nicht mehr dargestellt werden können aber alles unterhalb von 2,5kHz müsste ja identisch sein , oder? Kann es daran liegen dass ich ohne Fensterung und in einem Schlag meine FFT berechnen lasse?

FFT32000.jpg
 Beschreibung:

Download
 Dateiname:  FFT32000.jpg
 Dateigröße:  77.21 KB
 Heruntergeladen:  939 mal
FFT5000.jpg
 Beschreibung:

Download
 Dateiname:  FFT5000.jpg
 Dateigröße:  75.61 KB
 Heruntergeladen:  887 mal
Private Nachricht senden Benutzer-Profile anzeigen


Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2010, 12:58     Titel:
  Antworten mit Zitat      
Hallo,

poste doch bitte mal Teile von deinem Code. Ansonsten ist es relativ schwer dir zu helfen. Vielleicht liegt der Fehler ja auch einfach nur in deiner Achsenbeschriftung.

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2010, 13:36     Titel:
  Antworten mit Zitat      
Hallo Ajax
Danke für dein Feedback!
ich habe schnell was zusammengebastelt. Da ich später über Line-In aufnehmen will habe ich hier eine Wavdatei importiert, abspielen lassen und über Stereomix aufgenommen. Die Ergebnisse dann in Frequenzbereich übertragen und darstellen lassen.

PS. Die zu M-File dazugehörige Wavedatei befindet sich im Zip-Ordner, da man hier im Forum Wave-Format nicht direkt hochladen kann.

PlayRec.m
 Beschreibung:
Der Quellcode

Download
 Dateiname:  PlayRec.m
 Dateigröße:  2.2 KB
 Heruntergeladen:  890 mal
Violin.zip
 Beschreibung:
Die Wavedatei

Download
 Dateiname:  Violin.zip
 Dateigröße:  757.49 KB
 Heruntergeladen:  816 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2010, 15:16     Titel:
  Antworten mit Zitat      
Mmmh... sorry, ich kann deinen Code nicht laufen lassen und ich habe leider auch nur ein paar Grundkenntnisse mit Matlab und der Fouriertransformation. Ein paar "Anregungen" trotzdem: Du plottest den Betrag der Funktion. Teste das ganze mal nur mit dem Realteil und schau dir die Ergebnisse an.
Versuche dann mal als Alternative noch: fftshift(fft(fftshift(signal)))
In diesem Fall ist das Ergebnis symmetrisch um den Ursprung verschoben, d.h. du musst deine Achsen anpassen. Aber schau dir trotzdem dazu mal die Bilder an und überprüfe, ob es daran liegt.
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
ElBarto
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 27.09.10
Wohnort: Bamberg
Version: R2009b
     Beitrag Verfasst am: 22.12.2010, 10:30     Titel:
  Antworten mit Zitat      
Ich hatte ein ähnliches Problem. Bei mir wurde aufgrund unterschiedlicher Signallängen immer die x-Achsen-Skalierung verschoben.

Ich habe das gelöst, in dem ich mein FFT-Skript auf ein bekanntes Signal mit festgelegter Länge normiert habe, wo ich den Frequenzgang kenne.
Um nun auch längere Signale einzulesen interpoliere ich diese einfach mit interp1 auf die Länge des Referenzsignales.
Funktioniert wunderbar, wenn du möchtest kann ich dir auch mal Codeteile zukommen lassen.

Gruß
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2010, 10:46     Titel:
  Antworten mit Zitat      
Hallo Michael
danke für deine Antwort,

bei mir ist die X-Achse fest vorgegeben (0-5kHz). Deshalb dürfte sich die Frequenz ja eigentlich nicht verschieben. Fakt ist aber dass man mit höherer Abtastrate und derselben Aufnahmedauer die Länge des Signals (Vektors) sich verändert und anscheinend auch die Frequenz.
Es wäre nett wenn du mir deinen Code zukommen lassen würdest
Besten Dank
Kia
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast-Scriptor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2010, 03:20     Titel:
  Antworten mit Zitat      
Kia hat Folgendes geschrieben:
Hallo Michael
danke für deine Antwort,

bei mir ist die X-Achse fest vorgegeben (0-5kHz). Deshalb dürfte sich die Frequenz ja eigentlich nicht verschieben. Fakt ist aber dass man mit höherer Abtastrate und derselben Aufnahmedauer die Länge des Signals (Vektors) sich verändert und anscheinend auch die Frequenz.
Es wäre nett wenn du mir deinen Code zukommen lassen würdest
Besten Dank
Kia


Tut sie aber. Der Grund ist recht einfach. Du hast ein Signal mit einer bestimmten Signallänge, die mit eins angenommen wird, bei einer FFT.

Wenn du dir die Formel der FFT anschaust

F(w) = sum_über_alle_Samples f(t)*exp(-i*2*pi*f*t)

muss man sich doch fragen wie das f und t vereinbart werden. Deine Signallänge T wird dabei mit eins angenommen und der Abstand zweier Frequenzen im Spektrum mit delta_f = 1 und die Anzahl deiner Freequenzen = die Anzahl deiner gesampleten Daten N. Im Allgemeinen gilt aber delta_f = 1/T.

Daraus ergibt sich für deinen Fall folgendes:

Du hast eine Signallänge von 10 s ergo delta_f = 0.1Hz. Bei einer Samplefrequenz von 5kHz ergibt das 50k Samples. Ergo ergibt sich ein Spektrum im Bereich 0 - 5 khz. Das passt also,

Bei 32k Hz Samplerate ergibt sich das gleiche. Wieder 10 Sekunden abgetastet ergibt das 320 k Samples. Du erhälst also ein Spektrum von 0 - 32 khz.

Merke: Das Spektrum ist nicht wirllkürlich und entspricht also immer 0 : Samplefrequenz-1 oder nach Shiftung (fftshift Befehl) -Samplefrequenz/2:Semplefrequenz-1. Beachte aber bitte, dass bei Zeropadding sich die Abtastlänge erhöht und daher auch die Spektrumsbreite!!

Fazit,

du scheinst alles richtig gemacht zu haben, dir fehlt nur ein bissel Theorie. Mach doch mal folgendes, ich habe mir die Dateien nicht angesehen. Extrahiere aus dem 32er Spektrum die ersten 5000er und vergleiche sie mit dem ursprünglichen. Es müsste dabei das Gleiche rauskommen.

Mfg, Scriptor
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2010, 13:33     Titel:
  Antworten mit Zitat      
Hi Scriptor
wie ich schon oben erwähnt habe, kenne ich nur paar Grundlagen aus diesem Bereich und deshalb auch paar Fragen zu deinem Kommentar, der mir nicht 100% klar ist, obwohl ich ihn paar mal gelesen habe!
Zitat:

Tut sie aber. Der Grund ist recht einfach. Du hast ein Signal mit einer bestimmten Signallänge, die mit eins angenommen wird, bei einer FFT.


Wenn du dir die Formel der FFT anschaust

F(w) = sum_über_alle_Samples f(t)*exp(-i*2*pi*f*t)

muss man sich doch fragen wie das f und t vereinbart werden. Deine Signallänge T wird dabei mit eins angenommen und der Abstand zweier Frequenzen im Spektrum mit delta_f = 1 und die Anzahl deiner Freequenzen = die Anzahl deiner gesampleten Daten N. Im Allgemeinen gilt aber delta_f = 1/T.

Daraus ergibt sich für deinen Fall folgendes:
Du hast eine Signallänge von 10 s ergo delta_f = 0.1Hz. Bei einer Samplefrequenz von 5kHz ergibt das 50k Samples. Ergo ergibt sich ein Spektrum im Bereich 0 - 5 khz. Das passt also,


1. Ich verstehe zwar nicht warum die Signallänge mit Eins angemommen wird, aber davon ausgehend ändert sich wie du schon sagtest die Anzahl der Werte im Zeitvektor und entsprechend auch die Auflösung der Frequenz.
2. Mein Spektrum ist bei 5kHz Abtastrate 2,5kHz, was auch aufgrund des Nyquist-Shannon-Abtasttheorem passend ist, oder verstehe ich dich falsch?
Zitat:

Bei 32k Hz Samplerate ergibt sich das gleiche. Wieder 10 Sekunden abgetastet ergibt das 320 k Samples. Du erhälst also ein Spektrum von 0 - 32 khz.

3. Das Spektrum ist zwar anders, und das führt dazu, dass man auch Signale höherer Frequenzen (<16kHz) sehen kann, die Frequenzen kleiner 2,5kHz müssen aber identisch sein und zwar sowohl in der Apmlitude als auch im Betrag, ODER???
Zitat:

Merke: Das Spektrum ist nicht wirllkürlich und entspricht also immer 0 : Samplefrequenz-1 oder nach Shiftung (fftshift Befehl) -Samplefrequenz/2:Semplefrequenz-1. Beachte aber bitte, dass bei Zeropadding sich die Abtastlänge erhöht und daher auch die Spektrumsbreite!!

wäre dir dankbar, wenn du diesen Abschnitt bisschen ausführlicher beschreiben könntest


Ergänzung

ich habe mir auch die Aufnahmen im Zeitbereich angeschaut. Was mich wundert ist auch dass selbst dort die Amplituden nicht identisch sind. (siehe Bild)


Zeitbereich.jpg
 Beschreibung:

Download
 Dateiname:  Zeitbereich.jpg
 Dateigröße:  96.96 KB
 Heruntergeladen:  897 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2010, 15:19     Titel:
  Antworten mit Zitat      
Um die Verschiebung besser darstellen zu können habe ich nun für verschiedene Abtastraten (5000 bis 48000) die FFT berechnet und die Amplitude normiert. Dabei habe ich weder was geshiftet noch was gefenstert! Ich benutze hierfür eine Datei, die kurzzeitig Geigenton abspielt (abspielen über Matlab mit 44100Hz). Diese soll bei 294 Hz sein Maximum haben (Quelle Wikepdia: http://de.wikipedia.org/wiki/Freque.....ektrum_eines_Audiosignals )


Anschließend habe ich für alle Abtastraten jene Frequenz bestimmt, bei dem der FFT-Vektor sein Maximum hat. Diese Werte habe ich mit entsprechender Abtastrate dargestellt (siehe Bild)


wie man sehen kann hat eigentlich nur die 48kHz die tatsächliche 294Hz als Maximum und alle anderen schwenken um diesen Bereich! Ich kann mir aber nicht erklären warum diese Frequenz abhängig von der Abtastrate variiert

FrqVerschiebungjpg.jpg
 Beschreibung:

Download
 Dateiname:  FrqVerschiebungjpg.jpg
 Dateigröße:  79.84 KB
 Heruntergeladen:  871 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor_Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.01.2011, 13:04     Titel:
  Antworten mit Zitat      
Aloah und eine glückliches und erfolgreiches neues Jahr in allen Belangen an alle erstmal!!

Ich habe ein kleines Tut geschrieben dass sich mit der Materie ein wenig beschäftigt. Meist dreht es sich hier darum, da habe ich das Problem mal versucht näher zu erläutern. Da findeste bestimmt einige Antworten.

Dennoch will ich kurz auf deine Problemstellung eingehen.

Kurz vorweg:
Ich schaue mir in der Regel nie die Programmierungen an, da der Fehler in der Regel in der Theorie liegt. Daher versuche ich dir mit Theorie Hilfe zur Selbsthilfe zu geben. Sonst lernt man nicht unbedingt viel und gerade die FFT ist sauwichtig, wo sich die Arbeit auch lohnt. Daher nimm mir es nicht übel, wenn ich deine Quelltexte nicht lese oder durchlaufen lasse.


zu 1.Ich habe das unglücklich formuliert. Die Matlab FFT Routinen rechnen damit, dass die Zeitdaten sich zwischen 0 und 1 befinden. Dies ist so normiert und aus der Formel die die FFT benutzt herauszulesen (Habe ich auch ins tutorial gepostet.

zu 2. Nach Shannon kannst du nur Frequenzen die maximal der Hälfte der Abtastfrequenz entsprechen wirklich ausleuchten. Daher ist die Darstellung von 0 : 5000 khz an sich schwierig aber auch ok.

Wie gesagt kann man maximal nur die Frequenzen bis 2,5 kHz darstellen, aber auch die bis -2,5 kHz. Es kann ja schließlich auch negative Frequenzen geben zumindest mathematisch. Diese haben aber die gleichen Amplituden, daher erscheint ein an der y Achse gespiegeltes Spektrum.

Nun denken wir uns mal ein Spektrum von -2.5 kHz bis 2.5kHz und den Fakt hinzu, dass das Spektrum periodisch ist. Wenn wir nun über 2,5kHz hinausgehen bis 7,5kHz, erhalten wir genau das selbe Spektrum nochmal.

Du kannst auch ganz einfach aus den mit der FFT erstellten Spektrum von 0 : 5 kHz, eins von -2.5:2.5 kHz machen,indem die Werte aus deinem Spektrum von 2,5 : 5kHz so nimmst wie sie sind und setzt sie vor den ersten Wert des Arrays wo f = 0 ist. Das geht aufgrund der Periodizität. Diese Verschiebung der Daten (shift) wird mit dem Befehl fftshift in Matlab durchgeführt.

Nim einfach mal ein Spektrum her, führe es so aus:

shift_spec = fftshift(spec)

und plotte das mal. Spaßenshalber kannst du ja auch die ifftshift mal testen.

Zu 3.
Nein, sie können um einen Faktor größer oder kleiner sein, der von der Anzahl der Elemente abhängt. Aber das Ergebnis müsste proportional sein.

Wenn du die FFT korrekt ausgeführt hast(wie es mir eigentlich scheint), dann schau evtl mal deinen Messaufbau an. Vll macht ja dein ADU irgendwas anders bei Verstellung der Abtastfrequenz. Wie tastest du eigentlich ab? Hast du ein Mikrofon oder sowas? Vll ist das ja nicht richtig eingestellt. Denn die Spektren müssten eigentlich proportional sein...
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2011, 15:47     Titel:
  Antworten mit Zitat      
Danke für die ausführliche Antwort. Ich denke auch dass die Erklärung in der Theorie oder Berechnungsvorgang bei Matlab liegt und nicht im Quellcode


Abgetastet wird über "Streomix" Modus der Soundkarte! D.h. dass man ein internes Mikrofon, es wird quasi nur das aufgenommen was die Soundkarte gerade auch abspielt.


Richtig proportional sind die Frequenzen zueinander nicht! wenn man sich das letzte Bild, was ich hochgeladen anschaut) sieht man dass die eine bekannte Frequenz , die eigentlich bei 294Hz liegen sollte (sofern die Wikipedia-Quelle zuverlässig ist) je nach Abtastfrequenz unterschiedlich wo anders liegt und nur bei 48kHz auch wirklich dem richtigen Wert entspricht! und genau das stört mich! weil:


Hintergrundgeschichte dieser FFT ist die, dass ich bestimmte Phänomene anhang ihrer Frequenzen nachher erkennen will! dazu muss ich zunächst diese Phänomene demonstrieren, Aufnahmen machen und die charakteritrische Frequenz der jeweiligen Phänomenen festlegen. Diese werden dann im Algorithmen integriert um diese Phänomenen später erkennen zu können! Um jedoch die Rechenaufwand möglichst klein zu halten möchte ich nachher dann versuchen mit weniger Messwerte auszukommen. Würden sich diese Frequenzen jedoch verschieben, wäre das nicht so machbar!
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2011, 11:54     Titel:
  Antworten mit Zitat      
Es scheint an Stereo Mix Modus von XP zu liegen! wenn ich über normales Mikrofon aufnehme habe ich zwar auch andere Amplituden und mein Maxima liegt wo anders aber eine Verschiebung ist nicht mehr zu sehen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.