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

Bestimmung der Grundschwingung aus einer Messreihe

 

HAL-9000
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 05.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 08:45     Titel: Bestimmung der Grundschwingung aus einer Messreihe
  Antworten mit Zitat      
Guten Tag,

ich möchte aus einer Zeitreihe (Spannungsmessung mit fs=10kHz, Signalfrequenz ~50Hz) die Grundschwingung mit einer Auflösung von 0.05Hz zu bestimmen.
Mein Ansatz ist, das über die Maxima der FFT zu lösen.

Problem:
Die zu betrachtenden Intervalle sind nur 10 Perioden weit (0.2s). Woraus meines Wissens eine Frequenzauflösung von:

Code:
df = fs/AnzahlSamples = 10000Hz/2048 = 4.88Hz


resultiert.

Bei vorgegebener Abtastrate und Zeitintervall wären demzufolge 2^18 Samples notwendig um diese Auflösung zu erreichen.
Ist dies mit Zero-Padding sinnvoll bzw. hat jemand vllt. einen anderen Ansatz wie ich die Aufgabenstellung angehen kann?

Gruß & Dank


Ich nutze Matlab 2011b ohne weitere Toolboxen
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 20.09.2013, 12:12     Titel: Re: Bestimmung der Grundschwingung aus einer Messreihe
  Antworten mit Zitat      
Hallo HAL-9000,

Ich wage es kaum auszusprechen, weil es aus mathematischer Sicht natürlich eher Faustkeil als Holzhammer ist:
Wenn Du ein einigermaßen kleines Intervall hast, Du schreibst ja "~50 Hz" und das könnte z.B. "zwischen 40 und 60 Hz" heißen, kannst Du bei einer so groben Auflösung einfach durchprobieren: Fitte eine Sinus-Kurve dran und wähle die mit dem kleinsten Mean-Square-Error.
Allerdings muss dann auch hier Amplitude und Offset mit einer Parameterschätzung angepasst werden, so dass man auch gerade noch die Frequenz als Variable angeben kann. Ohne Toolboxen ist mir nicht klar, mit welcher Funktion man das hinbekommt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 20.09.2013, 12:59     Titel:
  Antworten mit Zitat      
Zitat:
Ohne Toolboxen ist mir nicht klar, mit welcher Funktion man das hinbekommt.
glaube man könnte das mit fminsearch fitten. ein beispiel zur parameter optimierung mittels fminsearch findet sich in der doc. kann natürlich auch sein das cih dich falsch verstanden hab Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Napomleb
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 27.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 13:00     Titel:
  Antworten mit Zitat      
Hallo,

nochmal zum Verständnis:
wenn du t = 0.2 s und fs = 10kHz hast, dann hast 2000 Samples in dem Intervall.
Da du aber auf 0.05 Hz genau messen möchtest bräuchtest du in dem 0.2s Intervall -> 200000 Samples (faktor 100 größer)

Kannst es ja einfach mal ausprobieren mit upsample?
Code:
upsample(sinus, 100);


Oder du kannst es sogar direkt bei der fft(sinus, 200000) deine gewünschte samplezahl angeben.

Zitat:
fft(X,N) is the N-point fft, padded with zeros if X has less
than N points and truncated if it has more.



Ich würds also versuchen im Frequenzbereich lösen, wobei ich keine Ahnung hab, welche Funktionen dir zur Verfügung stehen Very Happy
Du musst aber auf jedenfall nach dem upsamplen noch Tiefpassfiltern (interpolieren), und halt Amplituden anpassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 20.09.2013, 13:05     Titel:
  Antworten mit Zitat      
Hallo HAL-9000,

ich musste mich auch mal mit der Bestimmung der Grundfrequenz auseinandersetzen, hatte aber nicht das Problem einer zu geringen Frequenzauflösung, weshalb ich die DFT benutzen konnte.

Aber: Ich bin dabei auch auf eine alternative gestoßen und zwar die Bestimmung der Grundfrequenz durch die Autokorrelation des Signals.

Hier ist eine Quelle, die ich dazu finden konnte:
http://www.phonetik.uni-muenchen.de.....ien_akustik_4_reichel.pdf

Ich kenne mich damit nicht gut aus und kann auch nichts zur Frequenzauflösung sagen. Habe das ganze mal ausprobiert:

Code:



N = 2048; % Signallaenge
fs = 10000;%Abtastfrequenz
t = 0:1/fs:1/fs*(N-1);

f0 = 50;    % Frequenz des Signals
x = sin(2*pi*f0*t); % Signal

% Autokorrelation
% ACHTUNG: IST GLAUBE ICH NICHT RICHTIG... aber reicht für das Beispiel
for m = 1:N;
    x_m = [x(m:N) x(1:(m-1))];
   
    R(m) = 1/N*sum(x.*x_m);
end%for m

plot(R)
 


In der Korrelation erkennt man wieder ein periodisches Signal und aus der Periodendauer bekommt man dann die Grundfrequenz.

Hab mal grob überschlagen: Der Abstand zwischen zwei Maxima war 204*1/fs = 0.0204 s. Die Grundfrequenz ist dann 49,0196 1/s.

Passt in diesem Beispiel alles nur ungefähr... soll auch nur als Anregung dienen Wink Vielleicht klappt es ja Smile

Beste Grüße
Alex
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.