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

Frequenzverlauf eines Messsignals berechnen

 

freshp
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 19.05.2008, 10:38     Titel: Frequenzverlauf eines Messsignals berechnen
  Antworten mit Zitat      
Hallo zusammen,

für eine Datenauswertung brauche ich einen Frequenzverlauf eines Messsignals, aber irgendwie stehe ich total auf dem Schlauch und habe eine Denkblockade. Vielleicht kann mir jemand von euch einen Schubs in die richtige Richtung geben.
Ich habe ein Signal (siehe Anhang signal.png) mit einer relativ konstanten Amplitude, ändert sich nur im höheren Frequenzbereich etwas, und einer festen Abtastzeit/-rate T_a/f_a. Ziel ist es, eine Matrix zu berechnen, die eine Darstellung der Art wie auf freq.png zu erkennen ist ermöglicht.
Ich habe da etwas im Hinterkopf von FFT, aber mir fehlt der zündende Funke.

Heißen Dank im Voraus Smile

Gruß,
Lars

freq.png
 Beschreibung:
Gesuchter Frequenzverlauf (Bsp.)

Download
 Dateiname:  freq.png
 Dateigröße:  1.38 KB
 Heruntergeladen:  709 mal
signal.png
 Beschreibung:
Gegebenes Signal (Bsp.)

Download
 Dateiname:  signal.png
 Dateigröße:  2.46 KB
 Heruntergeladen:  705 mal
Private Nachricht senden Benutzer-Profile anzeigen


freshp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 20.05.2008, 12:35     Titel:
  Antworten mit Zitat      
Halli hallo allerseits,

ich habe einen ersten Codeentwurf zusammengewurschtelt, der auch fast das ergibt, auf das ich hinaus will. Wink
Hier mal das Listing:

Code:

clc;

vzwechsel=zeros(length(Signal),1);
for i=2:length(Signal)
    if (Signal(i)<0 && Signal(i-1)>0) || (Signal(i)>0 && Signal(i-1)<0)
        vzwechsel(i)=1;
    end
end

t=0;
k=1;
freq=zeros(length(vzwechsel),1);
f=0;

ausreisser=1;
letzter_wechsel = find(vzwechsel,1,'last');

for i=1:letzter_wechsel
    t=t+Ta;
    if vzwechsel(i)
        f_neu=1/(2*t);
        if f_neu>f
              ausreisser=ausreisser+1;
              f_temp=f_neu;
              if ausreisser > 1 && f_neu >= f_temp
                  f=f_neu;
                  ausreisser=0;
              end
        else
              ausreisser=0;
        end
        t=0;
    end
    freq(k)=f;
    k=k+1;
end

figure;
hold on;

plot(freq,'b.');
plot(round(smooth((freq),'loess')),'r');
plot(freq_soll.Werte,'g');
freq_smoothed = round(smooth(freq));
 


Im Anhang zu diesem Posting seht ihr die Ausgabe, die dadurch erzeugt wird.
Der grüne Graph ist das, was ich erreichen möchte.
Der rote Graph mein Ergebnis momentan und die blauen Datenpunkte meine errechneten Frequenzen, also die Grundlage für den roten Plot.

Die Abweichung am Anfang kann ich mir dadurch erklären, dass das Signal von Beginn an leicht über Null ist und dann ansteigt und ich den ersten Vorzeichenwechsel somit erst eine halbe Schwingung "zu spät" mitbekomme. Das könnte ich noch abfangen, indem ich das Ansteigen des Signal vom Ausgangswert ermittele.
Hat von euch vielleicht jemand eine Idee, wie ich die Zeitpunkte des Frequenzwechsels genauer erfassen kann? Gibt es eine gute Alternative zur Ermittlung der Nulldurchgänge/Vorzeichenwechsel zur Messung der Schwingungsdauern bzw. Frequenzen?

idee.png
 Beschreibung:
Ausgabe des obigen Codes

Download
 Dateiname:  idee.png
 Dateigröße:  5.32 KB
 Heruntergeladen:  690 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Christian
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 25.03.08
Wohnort: Dortmund
Version: 2008a
     Beitrag Verfasst am: 23.05.2008, 20:20     Titel:
  Antworten mit Zitat      
hi freshp,

mir scheint, als ob dir da ein paar nachrichtentechnische Grundlagen fehlen. Einen Frequenzverlauf(Spektrum) eines Messsignals macht man unter anderem mit der Funktion FFT(FastFourierTransformation). Dazu kann man nur auf die Hilfe verweisen. Dort ist ein relativ simples Beispiel, welches man im Prinzip einfach rauskopieren kann und natürlich noch ein wenig anpassen muss.
Mit deinem Code scheinst du den "Sollverlauf" einfach nur nachahmen zu wollen, aber in Wirklichkeit machst du keine Spektralanalyse.
Ich habe mir vor einiger Zeit mal eine Funktion geschrieben, mal schauen, ob ich sie noch auftreiben kann...
Private Nachricht senden Benutzer-Profile anzeigen
 
Hiller
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 17.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2008, 09:26     Titel:
  Antworten mit Zitat      
Aber anscheinend wird hier nicht U(f) sondern f(t) gesucht, dann kann man nicht einfach den FFT Befehl nehmen.

Deine suche der Nullstellen ist zwar theoretisch möglich, dabei müsste das Messsignal jedoch extrem Überabgetastet sein da ansonsten mit steigender Frequenz die stelle des Nullpunktes immer ungenauer angezeigt wird.

Wie wird das Messsignal aufgenommen? Ist immer ein linearer Frequenzanstieg zu erwarten? Was willst du mit dem Ergebnis machen?
Private Nachricht senden Benutzer-Profile anzeigen
 
freshp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.05.08
Wohnort: Schwabenländle ;)
Version: R2007b
     Beitrag Verfasst am: 26.05.2008, 08:21     Titel:
  Antworten mit Zitat      
Hallo zusammen,

genau, ich suche f(t), den Verlauf der Frequenz über der Zeit. Um nur die einzelnen Frequenzbestandteile/das Spektrum darzustellen, würde eine einfache Fouriertransformation reichen, das ist mir klar. Smile

Ja das Messsignal steigt bis auf f_max=30 Hz an und wird mit f_a=1 kHz abgetastet. Allerdings sind die Intervalle in denen das Signal eine bestimmte Frequenz x Hz hat durchaus variabel.

Das Ergebnis soll hinterher mit weiteren Funktionen ausgewertet werden, um die Eigenschaften bestimmter Baugruppen zu ermitteln, sollte also möglichst genau mit dem eigentlichen Verlauf der Frequenz über Zeit übereinstimmen. Rolling Eyes Wink

Schöne Grüße,
Lars

P.S. Entschuldigt die späte Reaktion, aber ich war über's lange Wochenende unterwegs. Wink
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.