Verfasst am: 07.02.2015, 10:07
Titel: FFT Skalierung der Frequenzachse
Hi,
es geht um die richtige Skalierung von der Frequenzachse im Spektralbereich und den Zusammenhang mit der Grundschwingung.
Wenn ich bspw. zwei periodische Signalanteile habe, einen Sinus mit 0.2Hz und einen mit 0.25Hz Signalfrequenz (die ich kenne, weil ich die eigenhändig zu einem einzigen Signal addiert habe^^) dann kann ich da die Grundschwingung berechnen, indem im einfach den kleinsten gemeinsamen Teiler suche. Das wäre in dem Fall 0.05 Hz. Ich hätte bei meinem zusammengesetzten Signal also eine Grundwelle von 0.05Hz.
Ich hab gelesen, wenn man eine Fouriertransformation macht, erhält man Informationen von -Nyquistfrequenz bis +Nyquistfrequenz. Das heißt, prinzipiell kann ich schon Frequenzen aus einem Spektrum ablesen, wenn ich das richtig skaliere, oder? Mir sagte gerade jemand, das ginge nicht so einfach und das hat mich verwirrt. :-/
Taste ich mein zusammengesetztes Signal mit 200Hz ab, würde ich ein Spektrum bis 100Hz bekommen.
Jetzt hab ich gelesen, wenn ich genau eine Periodendauer (die kann ich in meinem Fall ja ausrechnen) von meinem Signal in den Fourierbereich transformiere, dann bekomme ich da einen Frequenzbereich, der mir genau die Grundschwingung aus dem Signal und die Oberschwingungen zeigt. Wenn ich jetzt also die Frequenzachse von dem Amplitudenspektrum skaliere, dann kommt das genau hin, dass die Schrittweite bei der Grundfrequenz von 0.05Hz liegt. Wenn ich nicht nur eine Periode transformiere, sondern meinetwegen 2, dann liegt die Schrittweite bei Grundfrequenz/2 usw... Stimmt das so überhaupt?
Mein Gesprächspartner meint, die Grundfrequenz im Spektralbereich hängt nur von der Abtastrate ab und hat nix mit der Signalgrundfrequenz zu tun, aber wie könnte man das dann rekonstruieren? Irgendwo muß die Grundschwingung von 0.05Hz doch im Spektralbereich zu finden sein, oder nicht? Ich bin verwirrt. :-/
Wenn ich bspw. zwei periodische Signalanteile habe, eins mit 0.2Hz und eins mit 0.25Hz Signalfrequenz (die ich kenne, weil ich die eigenhändig zu einem einzigen Signal addiert habe^^) dann kann ich da die Grundschwingung berechnen, indem im einfach den kleinsten gemeinsamen Teiler suche. Das wäre in dem Fall 0.05 Hz. Ich hätte bei meinem zusammengesetzten Signal also eine Grundwelle von 0.05Hz.
Ich verstehe nicht wie du auf eine Grundwelle kommst.
Code:
Fs = 200;
Ts = 1/Fs;
nfft = 8192;
t = 0:Ts:(nfft-1)*Ts; % Zeitvektor % Testsignal mit gegebenen Frequenzen
y = sin(2*pi*0.2*t)+sin(2*pi*0.25*t);
Die Auflösung des Spektrums ist also in diesem Bsp. 0.0244 Hz. NUR Frequenzen die ein GANZES Vielfaches dieser Auflösung sind, werden korrekt wieder gegeben. D.h. Im Spektrum wäre dann eine Spektrallinie bei 0.2 und 0.25 Hz zu sehen. Da diese beiden Frequenzen aber kein ganzes Vielfaches von df sind, tritt der sog. Leackage Effekt auf. Oder anderes ausgedrückt, die beiden Signale sind nicht mit vollen Perioden im Messfenster enthalten.
Die FFT berechnet immer nur die Signale an den diskreten Frequenzen df * N, wobei N =0,1,2,3...nfft/2 + 1.
Freuquenzanteile dazwischen kann es nicht berechnen. Beim Leakage entstehen nun neben der eigentlichen Signalfrequenz weitere lokale Maxima, die aber im Signal nicht enthalten sind.
Warum aber sollte von 0.2 und 0.25Hz die Grundschwingung 0.05Hz sein? Das Testignale genaz zwei Frequenzen, nicht mehr nicht weniger. Sind diese ein GANZES Vielfaches von df, werden sind im Spektrum auch richtig angezeigt.
ich hab gelesen, wobei das bei quellen aus dem internet ja immer so eine sache ist, dass die grundfrequenz von so einem zusammengesetzten signal der größte gemeinsame teiler ist. das wäre hier 0.05hz, hoffe ich zumindest. ich bin nämlich grad ziemlich durcheinander.^^
und wenn ich jetzt genau eine periode von so einem signal transformiere, habe ich bemerkt, dass ich als schrittweite immer 0.05hz auf der frequenzachse rausbekomme. da hab ich mich gefragt, ob es da einen zusammenhang gibt.
und wenn ich jetzt genau eine periode von so einem signal transformiere, habe ich bemerkt, dass ich als schrittweite immer 0.05hz auf der frequenzachse rausbekomme. da hab ich mich gefragt, ob es da einen zusammenhang gibt.
Und wie erfolgt deine Transformation und Darstellung des Spektrums?
Wie schon gesagt, ergibt sich die Schrittweite der Frquenzachse aus Abtastfrequenz zu Anzahl Messwerte.
Code:
Fs = % Abtastfrequenz in Hz
Fn = Fs/2% Nyquistfrequent
nfft = % Anzahl der Messwerte des Signals
df = Fs/nfft % Auflösung des Frequenzspektrums
f = 0:df:Fn % Frequenzvektor
hmm...also ich hab sowas ähnliches gesehen. http://web.fbe.uni-wuppertal.de/fbe.....itus/akustik/akustik3.htm
da sieht man einen zusammengesetzten sinus aufgeteilt in grundschwingung etc...und da dachte ich, man kann die grundschwingung bei einem zusammengesetzten sinus so berechnen. ist 0.05hz jetzt nicht die grundschwingung von meinem signal?
wenn ich jetzt ganz genau eine periode transformiere, erhalte ich die berechnete grundschwingung als schrittweite auf der frequenzachse, bzw. auch im transformierten bereich als grundfrequenz, auch wenn ich die abtastrate änder. ich habe mich gefragt, ob das zufall ist. ich hab grad aber ein ziemliches brett vorm kopf.^^
ich hab dann versucht bspw. genau zwei perioden zu transformieren und die schrittweite war grundschwingung/2 usw...also klar...die schrittweite ergibt sich wie du sagst, aber das schließt das andere ja nicht aus.
Da geht es um Klänge und nicht nur 2 addierte Sinusschwingungen. Nehmen wir das Klangbsp., dass sich aus der Grundschwingung sowie 1. und 2. Oberwelle zusammensetzt. Ich wähle die Abtastfrequenz und Anzahl Messwerte nun so, dass df = 1Hz ist und somit Grundschwingung sowie 1. und 2. Oberwelle ein ganzes Vielfaches davon.
Code:
clear;
fs = 4096; % Abtastfrequenz
Ts = 1/fs; % Auflösung des Spektrums
N = 4096; % Anzahl Messwerte
df = fs/N; %
t=0:Ts:(N-1)*Ts;
f1 = 440; % Hz
f2 = 2*440; %Hz
f3 = 3*440; %Hz
% Signal mit 3 sinus frequenzen
sig1 = 1*sin(2*pi*f1*t);
sig2 = 2*sin(2*pi*f2*t);
sig3 = 3*sin(2*pi*f3*t);
signal = sig1 + sig2 + sig3;
[Amplitude, Amplitude_dB, fv] = FFT_betragsspektrum( signal, N, fs, 0);
Zur Berechnung des Frequenzspektrums nutze ich folgende Funtkion:
Code:
function[mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa, scale) % Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % scale: 0 = keine Impulsantwort als Eingang, 1 = Impulsantwort % Output: % Magnitude des Spektrums linear und dB skaliert % Frequenzvektor fv in [Hz] von 0...fa/2
% un-,gerade Anzahl Messwerte? ifmod(nfft,2) == 0;
k = (nfft/2) + 1;
else
nfft = nfft + 1;
k = (nfft/2) + 1;
end
Der Plot zeigt nun 3 Spektrallinien bei 440, 880 und 1320 Hz. Wählst du nun Fs z.B. nur 4000Hz, siehst du weitere Nebenmaxima und die Maxima liegen dann nicht exakt bei 440, 880 und 1320 Hz wegen des anderen df. Dies ist der sogenannte Leackage Effeckt.
Bei deinem Bsp. aus dem 1. Post ist die Grundschwingung 0.2Hz, aber 0.25Hz ist keine Oberwelle, da folgende Bedingung nicht zutrifft.
Zitat:
Die Frequenzen der Einzelschwingungen müssen hierbei in einem ganzzahligen Verhältnis zueinander stehen.
Die 1. Oberwelle wäre dann 0.4Hz. Aber eine Grundschwingung von 0.05Hz gibt es in deinem Bsp. nicht, sonst müsste sie ja als Signalanteil vorhanden sein. Wenn sie es gäbe, wären 0.2Hz die 4. Oberwelle und 0.25 entsprechend die 5. Oberwelle. Dann müsste das Signal aber auch entsprechend gebildet werden:
Code:
f1 = 0.05; % Hz
f2 = 0.2; %Hz
f3 = 0.25; %Hz
% Signal mit 3 sinus frequenzen
sig1 = 1*sin(2*pi*f1*t);
sig2 = 2*sin(2*pi*f2*t);
sig3 = 3*sin(2*pi*f3*t);
signal = sig1 + sig2 + sig3;
wenn ich jetzt ganz genau eine periode transformiere, erhalte ich die berechnete grundschwingung als schrittweite auf der frequenzachse, bzw. auch im transformierten bereich als grundfrequenz, auch wenn ich die abtastrate änder. ich habe mich gefragt, ob das zufall ist. ich hab grad aber ein ziemliches brett vorm kopf.^^
So lange du mir kein Bsp. deiner Berechnung zeigst, kann ich dir nicht weiterhelfen wo dein Fehler liegt. 0.05Hz ist auf jeden Fall nicht die Grundschwingung und der Wert hat auch nichts mit der Schrittweite zu tun. Es gibt nur einen Weg, wie sich diese zusammensetzt. Den habe ich dir bereits genannt.
meine berechnung ist wie deine. ich hab nur genau eine periode transformiert und mir die werte angeschaut.
ich hab in einem skript gelesen, dass die amplitude der grundschwingung auch null sein kann und das es eben der größe gemeinsame teiler der teilschwingungen ist. der ggt ist 0.05. 0.2 ist zwar die erste schwingung mit amplitude, aber das ist nicht der ggt von den beiden anteilen. in dem tonbeispiel ist die erste schwingung die vorkommt, gleichzeitig auch der ggt.
was mich etwas stört ist, dass man die gesamtperiodendauer ja berechnen kann. angeblich als kleinstes gemeinsames vielfaches. und der kehrwert davon soll die grundfrequenz sein. :-/ irgendwie hat mich dieses skript durcheinander gebracht. ich guck gleich nochmal in ruhe.
ein beispiel ist in diesem skript auf der 15ten seite. https://www.google.de/search?q=grun.....df%22+harmonische+analyse
was mich etwas stört ist, dass man die gesamtperiodendauer ja berechnen kann. angeblich als kleinstes gemeinsames vielfaches. und der kehrwert davon soll die grundfrequenz sein.
Die Periodendauer T lässt sich ja bei einer einzelnen Sinusschwingung sehr leicht am Zeitdiagramm ablesen. Der Kehrwert f = 1/T ist somit die Frequenz der Schwingung. Das ist korrekt. Aber wenn es nur eine einzelne Schwingung ist gibt es da kein kleinstes gemeinsames vielfaches. Das gilt ebenso für dein Bsp. aus zwei überlagerten Sinusschwingungen von 0.2 und 0.25Hz. Sie haben keine einheitliche Grundfrequenz. Wo soll sie auch herkommen?
Die FFT zerlegt das Signal in seine Einzelteile nach gerade und ungerade Anteile, siehe Formel 11.15 die Fourierreihe. So kann z.B. eine Rechtecksignal aus vielen Einzelschwingungen nachgebildet werden. Daher hat das Frequenzspektrum des Rechtecksignals auch einen Anteil bei jeder diskreten Frequenz (df*N), wobei die Amplitude mit steigender Frequenz abnimmt. Für dein Bsp. aus zwei überlagerten Sinusschwingungen von 0.2 und 0.25Hz, liefert sie ohne Leackage Effekt genau 2 Spektrallinien bei den Freq. 0.2 und 0.25Hz, nicht mehr nicht weniger. Das von dir gegebene Bsp. eignet sich also nicht zur Anschauung von Grundwelle und Oberwellen. Es ist aus zwei Sinusfkt. zusammengesetzt, die in keiner Beziehung stehen. Deshalb wird die FFT auch lediglich zwei Spektrallinien liefen, da das Signal eben auch nur aus 2 Funktionen besteht.
Eine Grundschwingung von f=0 Hz halte ich für ziemlichen Blödsinn und das ist auch sicherlich nicht gemeint, wenn man von Harmonischen, Grundwelle und Oberwellen spricht. f=0 Hz ist der Gleichsignalanteil und somit keine harmonsiche Schwingung. Sie erzeugt je nach Wert eine Verschiebung um die Y-Achse.
hmm...von einer grundschwingung von 0hz steht doch nirgends was. ich hab das so verstanden, dass die grundschwingung eine amplitude von 0 haben kann und deshalb im spektrum bzw. im signal selber nicht auftaucht. das macht doch schon sinn.
Ich glaube, man kann nicht so einfach sagen, dass die signale von 0.2hz und 0.25hz keine gemeinsame grundschwingung haben. ich hab jetzt 3 skripte gelesen, wo die aus der gesamtperiodendauer berechnet wird, oder aus dem ggt. das kann doch nicht alles humbug sein irgendwie. das sind teilweise skripte von physikvorlesungen. wofür soll die formel grundschwingung=1/Gesamtperiodendauer denn sonst gut sein? :-/
hmm...von einer grundschwingung von 0hz steht doch nirgends was. ich hab das so verstanden, dass die grundschwingung eine amplitude von 0 haben kann und deshalb im spektrum bzw. im signal selber nicht auftaucht. das macht doch schon sinn.
Gut, dann habe ich deinen Post missverstanden. Aber ganz ehrlich, was soll eine Schwingung mit Amplitude und Phase Null sein? Sie ist nicht vorhanden und somit finde ich es sinnfrei so etwas dennoch als ein Harmonische, Grundwelle oder irgendeine Oberwelle anzusehen.
Ich behaupte auch nicht, dass die Ausführungen in dem Buch falsch sind. Es geht um dein Bsp aus dem ersten Post. Es setzt sich aus 2 Schwingungen zusammen und du versuchst dort die Regeln aus dem Buch in Bezug auf Klänge anzuwenden, die es nicht gibt. Harmonisch zueinander verhalten heißt, dass ein ganzzahliges Verhaltnis der Einzelschwingungen vorliegt. Du bildest nun einen GGT von 0.05 der nun aber in dem Signal nicht extistent ist. So einen Teiler kann man doch für x-beliebige Signale bilden. Das ist aber mit der Aufteilung von Klängen in den einzelnen Ton nicht gemeint.
Die Anwendung der Regeln auf dein Bsp. ist nicht sinnvoll. Hingegen das Bsp. mit den Frequenzen 440Hz, 880Hz, 1320 Hz ist zur Demonstration von Harmonsichen geeignet.
Deine erste Frage war nach der Skalierung der Frequenzachse, welche ich beantwortet habe. Du scheinst nach wie vor der Meinung zu sein, dass die Schrittweite in deinem Bsp. 0.05Hz ist. Den Rechenweg hast du aber nicht aufgezeigt. Ich weiß nicht wie ich dir hier noch helfen kann.
vergiss mal die töne. im zweiten skript geht es ja um harmonische analyse, wie in meinem beispiel mit 0.2hz und 0.25hz auch. ich glaube, es ist nicht ganz unerheblich, dass eine grundschwingung existiert, auch wenn sie eine amplitude von 0 hat, wenn ich die reine grundschwingung als schrittweite meiner frequenzachse erhalte, wenn ich genau eine periode transformiere.
ich habe ja so gesehen keine probleme mit meinem matlab code. der funzt prima. ich wollte nur sichergehen, ob es da einen zusammenhang zwischen grundschwingung und schrittweite gibt, aber irgendwie finde ich keine bestätigung in der literatur, außer lapidare forumseinträge, wo dann steht, ja wenn man genau eine periode transformiert, bekommt man die reine grundschwingung mit ihren oberwellen...das reicht mir leider nich. irgendwie hätte ich da gerne eine bestätigung, auf die ich mich verlassen kann. irgendeine quelle, oder so. verstehst du?
ob die grundschwingung selber im signal enthalten ist, oder nicht, is total wumpe. ich krieg die schrittweite von genau der grundschwingung ja auch, wenn ich bspw. 0.1hz und 0.2 hz transformiere. da ist sie dann eben 0.1.
ich glaube aber, es ist nicht so schlimm, wenn man mal ein beispiel zu tönen betrachtet. sinus is sinus, oder? ich bin aber nu echt kein experte. ^^
Mir personlich ist der Zusammenhang von Schrittweite eines Spekturms und einer Grundschwingung nicht bekannt. Aber das soll ja nichts heißen...
Zitat:
wenn ich jetzt ganz genau eine periode transformiere, erhalte ich die berechnete grundschwingung als schrittweite auf der frequenzachse, bzw. auch im transformierten bereich als grundfrequenz, auch wenn ich die abtastrate änder. ich habe mich gefragt, ob das zufall ist. ich hab grad aber ein ziemliches brett vorm kopf.^^
ich hab dann versucht bspw. genau zwei perioden zu transformieren und die schrittweite war grundschwingung/2 usw...also klar...die schrittweite ergibt sich wie du sagst, aber das schließt das andere ja nicht aus.
Im Grunde beantwortest du die Frage fast selber, lediglich deine Schlussfolgerung leuchtet mir nicht ein. Ich muss nur die Abtastrate ändern und somit ergibt sich bei der Transformation weiterhin lediglich einer Periode des Signals eine andere Schrittweite.
Ich würde diese Schrittweite nicht in Beziehung zu einer Grundwelle des transformierten Signals setzen, so wie es in dem Skript angegeben wird. Dort wird immer klar eine Grundwelle referenziert. In deinem Bsp. gibt es zwischen 0.2 und 0.25Hz keinen derartigen Zusammenhang. Ändere ich die Abtastfreq. oder die Anzahl von Perioden im Messfenster = Anzahl Messwerte, ergibt sich eine andere Schrittweite. Welche ist nun die richtige?
Ich spreche von Grund- und Oberwellen, wenn diese Anteile auch wirklich in dem Signal vorhanden sind und somit dann auch im Frequenzspektrum sichtbar. Eine theoretische Grundwelle kann man von zwei überlagerten harm. Schwinungen immer bilden. Aber wo ist der Sinn, wenn sie im Signal nicht vorkommt und man die Amplitude sich als Null denkt?
Mehr kann ich dir dazu nicht sagen. Es scheint das du die Thematik von Grund- und Oberwellen verstanden hast und nun ebenfalls wie sich die Frequenzachse eines transformierten diskreten Signals ergibt. Mir persönlich ist es zu theoretisch von Grundwellen mit Amplitude Null zu diskutieren. Das überlasse ich als Prakmatiker lieber anderen . Aber bitte deute das jetzt nicht als Kritik an deiner Person.
das sich die schrittweite bei veränderter abtastrate ändert, dachte ich auch. tut es aber nicht. wenn du mal langeweile hast, kannst du das ja mal probieren. vielleicht hab ich auch mal wieder einen blonden moment. ^^egal wie ich abtaste, die schrittweite bleibt immer gleich, nur der frequenzbereich wird natürlich breiter oder schmaler. je nachdem.
ach ich wollt das leuten erklären, die bald klausur schreiben, dachte mir wär alles klar und aufeinmal war ich total durcheinander, nur weil jemand was anderes behauptet hat. ich muss immer alles ausprobieren, um das zu verstehen. ich bin in diesem gebiet einfach kein genie und brauch echt lange, um mir was klar zu machen. manchmal klappts auch garnicht.^^
aber trotzdem danke für deine mühe! ist echt schwierig in dem bereich gesprächspartner zu finden.
hmm aber wenn ich so genauer drüber nachdenke, ist es ja irgendwie logisch, dass die schrittweite bei veränderter abtastrate gleich bleibt. die anzahl der samples bleibt ja im verhältnis zur abtastrate irgendwie gleich. ob ich jetzt bei abtastung durch 100hz bsp. 1000 samples erhalten, oder bei abtastung mit 200hz 2000 samples, is ja wumpe.
Wenn du nur die Abtastfrequenz oder die Anzahl Messwerte änderst, bleibt die Schrittweite df eben nicht gleich. Bespiel...
Fs = 100Hz
Ts = 1/Fs = 0.01s
Signalfrequenz f = 10 Hz
Periodendauer T=1/10 = 0.1s
Eine Periode des Signals f mit 100Hz abgetastet hat somit N=10 Messwerte.
df = Fs/N = 100/10 = 10 Hz
Wenn ich nun die Abtastfrequenz auf 200 Hz verdoppel, aber weiterhin nur 10 Messwerte nehme, ist doch nur noch eine halbe Periode im Messfenster. Um nun wieder auf eine volle Periode zu kommen, muss ich zwangsläufig auch die Messwerte verdoppeln. Aber NUR dann bleibt auch die Schrittweite gleich. Ändere ich nur N oder Fs, ergibt sich zwangsläufig ein anderes df. Und wer sagt denn, dass genau bei einer Periode die Schrittweite = der Grundfrequenz des Signals ist, aber bei doppelter Abtastfreq. -> Schrittweite = Grundfrequenz/2. Das leuchtet mir nicht ein.
Klar ist, dass die FFT bei 0,1*df,2*df,3*df...usw. die Signalanteile bestimmt. Kommt sie nicht vor, sind Phase und Amplitude = Null. Imho hat das aber nichts mit der Grundwelle der real-existieren Signalfreq. zu tun, die in dem transformierten Signal enthalten sind.
ich sprach ja von genauen perioden. mein beispiel hatte z.b. eine gesamtperiodenlänge von 20 sekunden. diese 20 sekunden müssen abgetastet werden, wenn man nur eine periode betrachten will. und da bleibt das verhältnis zwischen samples und abtastrate doch immer gleich. taste ich die 20 sekunden mit 200hz ab, hab ich grob 200*20=4000 samples. das gibt eine schrittweite von 200/4000=0.05. taste ich die 20 sekunden mit 400 hz ab, hab ich 400*20=8000 samples. das gibt eine schrittweite von 400/8000=0.05.
nicht die verdoppelung der abtastrate bringt die halbe grundschwingung als schrittweite, sondern wenn du jetzt genau zwei perioden abtastest. bsp. 40 sekunden mit 200 hz. 40*200=8000 samples. schrittweite ist dann ca. 200/8000=0.025. usw...
mir war das aufgefallen und dann hab ich gesucht, obs dafür irgendwie eine bestätigung gibt, aber wie gesagt, ich hab das so kurz zusammengefasst in einem forum gefunden, aber in foren steht halt auch viel unsinn und ich hab wie gesagt irgendwie andere talente und ich schließe nicht aus, dass ich mich mal irre.^^ ich dachte, dass is so ne frage, wo mir mal schnell jemand drauf antworten kann, war mir auch schon peinlich sowas zu fragen, aber ich wills ja nu wissen.
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
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.