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

Fourietransformation eines abgetasteten Sinus

 

nicole
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2012, 15:58     Titel: Fourietransformation eines abgetasteten Sinus
  Antworten mit Zitat      
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 Crying or Very sad


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 habs jetzt mit etlichen alphas versucht finde aber keins wo sie gleich sind. Wär echt dankbar wenn mir jemand weiter helfen könnte.
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 05.08.2012, 21:03     Titel:
  Antworten mit Zitat      
Hallo,

ich bin mir noch nicht so sicher, ob ich dich auch verstanden habe. Aber mal folgende Anmerkungen...

Ich habe mal zum Test dein deltan weggelassen und erhalte hier schon nicht die Grund- und Oberschwingung im Frequenzspektrum.

Code:
x1 = sin(w1*( t * fs ));


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.

Code:
x1 = sin(w1*( t ));


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

phi = sort(deltan); % aufsteigend Sortieren
% Test: Frequenz konstant
x1 = sin(w0*(t + phi));
x2 = sin(w0*(t + deltan));

figure(1)
plot(t,x1,t,x2);
grid on;
xlabel('Zeit [s]');
ylabel('Amplitude')


[mag, mag_dB, fv] = FFT_betragsspektrum( x1, N, fs) ;
figure(2)
plot(fv,mag);
hold on;
[mag, mag_dB, fv] = FFT_betragsspektrum( x2, N, fs) ;
plot(fv,mag,'r');
grid on;
df = fs/N;
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in [Hz]']);
ylabel('Magnitude linear')
title('Betragsspektrum');
 


FFT_betragsspektrum.m
 Beschreibung:

Download
 Dateiname:  FFT_betragsspektrum.m
 Dateigröße:  935 Bytes
 Heruntergeladen:  700 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
niki

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2012, 12:24     Titel:
  Antworten mit Zitat      
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.
 
nicole
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2012, 19:09     Titel:
  Antworten mit Zitat      
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 Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 06.08.2012, 20:48     Titel:
  Antworten mit Zitat      
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

% Test: Frequenz konstant
x1 = sin(w0 * t_se);
x2 = sin(w1 * t_se);
x3 = x1 + x2;

figure(1)
plot(t,x1,t,x2);
grid on;
xlabel('Zeit [s]');
ylabel('Amplitude')

% Darstellung Frequenzspektrum
[mag, mag_dB, fv] = FFT_betragsspektrum( x1, N, fs) ;
figure(2)
stem(fv,mag);

hold on;
[mag, mag_dB, fv] = FFT_betragsspektrum( x2, N, fs) ;
stem(fv,mag,'r.-');
grid on;

[mag, mag_dB, fv] = FFT_betragsspektrum( x3, N, fs) ;
stem(fv,mag,'g--');
grid on;

xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in [Hz]']);
ylabel('Magnitude [dB]')
title('Betragsspektrum');
legend(['x1 mit f=',num2str(f0),'Hz'],['x2 mit f=',num2str(f1),'Hz'],'x3 = x1 + x2')

 
Private Nachricht senden Benutzer-Profile anzeigen
 
nicole
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.08.2012, 21:39     Titel:
  Antworten mit Zitat      
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!!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
niki

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2012, 18:53     Titel:
  Antworten mit Zitat      
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.

Nur mir ist nicht klar wieso?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 07.08.2012, 23:16     Titel:
  Antworten mit Zitat      
Darauf habe ich hier schon hingewiesen...

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
nicole
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 05.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2012, 18:00     Titel:
  Antworten mit Zitat      
Hab mir nur den Code angeschaut und das ganz überlesen !! Danke dir, jetzt ist es klar Smile
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.