Verfasst am: 05.08.2012, 15:58
Titel: Fourietransformation eines abgetasteten Sinus
Ich hab 2 Sinusschwingungen :
1.mit der Grundschwinung
2.erste Oberschwingung
da die Abtastung findet nicht exakt zu den Zeitpunkten statt, sondern etwas früher oder später. Dieser Fehler wird wie folgt moduliert : nTs+deltan
(wobei deltan eine gleichverteilte Zufallszahl ist in einem Intervall [-alpha/2,alpha/2]). Somit hat das (fehlerhaft) abgetastet Intervall folgende Form: x = sin(w0*(n*Ts +deltan))
Die Aufgabe ist nun herrauszufinden bis zu welchen Samplingfehler die beiden Schwingungen in der FFT unterschieden werden können.
Leider find ich einfach kein alpha ab dem sie gleich sind
Hier mein Code:
Code:
fs = 1000; % abtastfrequenz
>> alpha = 100; %meine Zufallszahl liegt also im Intervall [-50,50]
>> t = 0:2*pi/fs:2*pi;
>>
>> %für jedenzeipunkt eine Zufallszahl generieren
>> for i=1:1001
deltan(i) = -alpha/2+alpha*rand(1,1); % eine Zufallszahl generieren und im Vektor speichern end
>> w0= 50; % Grundfrequenz -> Frequenz der ersten Schwingung
>> w1 = 100; % erste Oberschwingn -> Frequenz der zweiten Schwinung
>>
>> N = 1001; % anzahl der Punkte für die FFT
>>
>> x1 = sin(w0*(t*fs +deltan));
>> x2 = sin(w1*(t*fs+deltan));
>>
>> X1 = abs(fft(x1,N));
>> X2 = abs(fft(x2,N));
Ich verstehe nicht, warum hier noch mit fs multipliziert wird. Außerdem schreibst du ja oben noch x = sin(w0*(n*Ts +deltan)) wobei n wohl ein Laufindex sein soll und somit n*Ts der diskrete Zeitvektor t ist.
liefert hingegen bei w1 = 100 Hz eine diskrete Frequenzlinie. Das Gleiche gilt natürlich auch für w0.
Nun zu deinem deltan...hier sind ja nun Werte im Bereich -50..+50 enthalten. Durch das Hinzuaddieren zu t entsteht ein neuer "Zeitvektor", der erstens keine äquidistanten Schritte mehr enthält und zweitens auch nicht in aufsteigender Reihenfolge ist. Es ergibt daraus ein Rauschen, wobei die ursprünglichen Freq. w0 und w1 nicht mehr im Spektrum zu sehen sind. Es soll nun herausgefunden werden, bis zu welchem alpha Wert diese Freq. noch erkannt werden können...richtig?
Ich habe mal deltan vor dem Addieren zu t sortiert und erhalte nun eher, was ich erwartet habe. Aber evtl. ist das ja doch nicht gewollt. Allerdings ist hier auf jeden Fall ein riesen Unterschied zwischen x1 und x2, wobei die Freq. gleich w0 ist und nur der sortierte bzw. unsortierte deltan Vektor verwendet wird. Es fällt auf jeden Fall auf, dass bei alpha = 1 zwar noch eine deutliche Spektrallinie zu erkennen ist, aber diese schon einiges von der ursprunglichen Frequenz von 50 Hz abweicht.
Außerdem solltest du eines nicht vergessen. Das Freq.spektrum hat eine feste Auflösung df = Abtastfrequenz / Anzahl Messwerte. Man sollte sich daher bewusst machen, dass Frequenzen innerhalb dieser Schrittweite nicht mehr unterschieden werden können. Bei dir ist es etwas weniger als 1 Hz. Hinzu kommt, dass alle Freq. die kein ganzes Vielfaches von df sind, nicht richtig dargestellt werden können...hier tritt dann nämlich der Leakage Effekt auf.
Hier noch dein Skript mit meinem Test...ich habe auch mal noch die Darstellung des Betragsspektrums hinzugefügt. Dazu musst du dir einfach nur die Funktion aus dem Anhang ins work Verzeichnis laden.
Code:
clear
fs = 1000; % abtastfrequenz
alpha = 1; %meine Zufallszahl liegt also im Intervall [-50,50]
N = 1001; % Anzahlmesswerte
t = 0:2*pi/fs:2*pi;
%für jedenzeipunkt eine Zufallszahl generieren
for i=1:N
deltan(i) = -alpha/2+alpha*rand(1,1); % eine Zufallszahl generieren und im Vektor speichern end
w0= 50; % Grundfrequenz -> Frequenz der ersten Schwingung
w1 = 100; % erste Oberschwingung -> Frequenz der zweiten Schwingung
%N = ; % anzahl der Punkte für die FFT
Danke dir schon vielmals!!! Ich bin gerade in der Arbeit und habs nur kurz überflogen ich werds mir am abend genauer durchlesen! Danke nochmal für die mühe.
1.) Da hast du vollkommen recht das fs hat da nichts verloren.
2.) Du hast mich grad aufmerksam gemacht auf etwas, dass ich gar nicht bedacht habe. Es muss gelten alpha < 1/fs weil sonst wie du gesagt hast die Zeitpunkte nicht aufsteigend sortiert sind.
Die Zeitpunkte werden bei der fehlerhaften Abtastung sowieso nicht mehr äquidistant sein.
Irgendwie komm ich aber trotzdem nicht auf ein alpha bei dem sich die FFTS der beiden Schwingungen unterscheiden
Ok...mit der Aufgabenstellung und deinem Hinweis auf fs und alpha wurde es dann klar. Das Sortieren wäre dann auch nicht mehr nötig, da die Schwankung von t_se nur innerhalb von Ts liegt.
Allerdings zeigt sich bei diesem Test (siehe code), dass alpha bis etwa das 16 fache von Ts gewählt werden kann um noch die Frequenzen zu erkennen. Damit ist der Zeitvektor t_se aber nicht mehr aufsteigend...da muss ich nochmal drüber nachdenken, warum das dennoch geht. Fakt is aber auch, je niedriger f0 und f1 gewählt werden, desto größer kann der Abtastfehler sein...bei noch höheren Freq. genau umgekehrt. Hier kommt dann sicherlich auch das Abtasttheorem mit ins Spiel.
f0 und f1 wurden nun so gewählt, dass der kleinstmögliche Abstand, der auf Grund der Freq.-auflösung überhaupt gewählt werden kann, vorliegt.
Code:
clear
fs = 1000; % Abtastfrequenz
alpha = 0.016; % meine Zufallszahl liegt also im Intervall [-50,50]
N = 1024; % Anzahl Messwerte: 2er Potenz damit FFT verwendet wird
df = fs/N; % Frequenzauflösung des Spektrums % Zeitvektor
t = 0:1/fs:(N-1)/fs;
%für jedenzeipunkt eine Zufallszahl generieren
for i=1:N
deltan(i) = -alpha/2+alpha*rand(1,1); % eine Zufallszahl generieren und im Vektor speichern end
% Frequenzen so wählen, dass kein Leakage ensteht % Forderung: f0 und f1 müssen ein ganzzahliges Vielfaches von df sein % Abtasttheorem: fs > 2*fmax...ansonsten Aliaseffekt
f0 = df*50; % Grundfrequenz -> Frequenz der ersten Schwingung
f1 = df*51; % erste Oberschwingung -> Frequenz der zweiten Schwingung
w0 = 2*pi*f0;
w1 = 2*pi*f1;
t_se = t + deltan; % Zeitvektor mit Abtastratenfehler
Klasse!!!!! Ich habs geplottet und es wurde genau das gewünschte dargestellt.
Du bist der Beste!!!! Ich bin leider zu übermüde um jetzt es mir jetzt noch genauer anzusehen. Ich werde morgen mir alles genau ansehen und melde mich dann wieder.
Vielen vielen vielen Dank noch einmal!!!!
niki
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 07.08.2012, 18:53
Titel:
Hallo,
also habs jetzt bisschen im Internet recherchiert und auf folgenden Satz gestoßen : Im Spektrum werden Frequenzen nur differenziert, wenn
deren Abstand größer als die Frequenzauflösung ist.
Die Frequenzauflösung des diskreten Spektrums ist df = Fs/N
Man kann ja in einem digitalen System (hier PC) kein kontinuierliches Signal verwenden, sondern nur ein abgetastetes (endliches und diskretes). Aus einem diskreten Zeitsignal kann auch nur ein diskretes Frequenzspektrum werden. Je höher die Auflösung df jedoch ist (also je niedriger die Schrittweite zwischen 2 Spektrallinien) desto mehr geht es in ein kontinuierliches Spektrum über. Dennoch bleibt die Einschränkung, das Signalfreq., die zwischen einer Schrittweite liegen, nicht unterschieden werden können. Hier tritt dann eben der Leakage oder Leck-Effekt auf.
Hab mir nur den Code angeschaut und das ganz überlesen !! Danke dir, jetzt ist es klar
Einstellungen und Berechtigungen
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.