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

Abtastrate künstlich erhöhen

 

sarns
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2011, 18:52     Titel: Abtastrate künstlich erhöhen
  Antworten mit Zitat      
Hallo goMatlab-Forum,

ich habe eine Messreihe, die aus vielen spitzen Peaks besteht. Die Abstände der Messpunkte sind jeweils 30s. Um zu verdeutlichen, was die Auswirkungen wären, wenn man die Zeitabstände größer wählen würde, wollte ich einen Plot erzeugen, der aus dem "hochaufgelösten" Signal und künstlich niedriger aufgelösten Signalen besteht. Die Messpunkte stehen für den Stromverbrauch in W, somit sollte die Fläche (Energie) unter dem Ausgangs-Signal und dem künstlich verschlechterten Signal gleich sein.

Jetzt ist die Frage ob mir Matlab eine vorgefertigte Routine anbietet oder ob ich mir da was selber basteln muss? Vielen Dank schonmal!
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.05.2011, 21:16     Titel: Re: Abtastrate künstlich erhöhen
  Antworten mit Zitat      
Hallo sarns,

Das klingt nach INTERP1.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
sarns
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2011, 23:30     Titel:
  Antworten mit Zitat      
Hi Jan S,

danke für deinen Hinweis. Hab das ganze mal mit INTERP1 versucht. Auf den ersten Blick siehts ganz gut aus. Wenn man aber mal genauer hinschaut passt es leider nicht so gut. Hier ein kleines Beispiel:

Code:

a=(0:10);
b=[0 1 1 2 0 1 0 3 0 1 0];
c=interp1(a,b,0:2:10);

plot(a,b,'r',0:2:10,c,'b');
 


An Stelle 6,8 und 10 trifft INTERP1 auf den y-Wert 0 und interpoliert dazwischen linear was wiederum für yi natürlich auch 0 ergibt. Bei langen Messreihen gleicht sich dieser Effekt aus und der Flächeninhalt ist nahezu gleich. Allerdings wäre meine Anforderung dass ich im Zeitintervall von 2 jeweils unter der roten und blauen Fläche der gleiche Flächeninhalt ist. Somit sollte die blaue Kurve etwas "glatter" aussehen.
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: 23.05.2011, 11:56     Titel:
  Antworten mit Zitat      
Hallo sarns,

Stimmt. INTERP1 ist viel besser geeignet um Punkte einzufügen, als Punkte herauszuschneiden.
DECIMATE sollte besser sein, da es die Daten vorher mit einem passendn Lowpass-Filter glättet. Aber Deine Beispiel-Daten sind z.B. zu kurz um ein ordentliches Ergebnis damit zu bekommen. Eigentlich benötigst Du den Mittelwert der Elemente, die in den jeweiligen Abschnitten liegen. Auch das läßt sich per INTERP1 erreichen. Das ist deutlicher einfacher, wenn die Datenpunkte equidistant sind. Wenn Du dann die Mittelwerte über je S/T (S und T sind Integer) haben möchtest, kannst Du den Vektor erst per INTERP1 aufblähen und dann per SUM wieder kürzen:
Code:
% Defalte to 3/4 of original length:
x = rand(1, 100);
Inflated = interp1(x, 1:100, linspace(1, 100, 300));
Deflated = sum(reshape(Inflated, 4, []), 1);

Nun muss man noch auf die Ränder achten, da die Länge des Vektors nich unbedingt ganzzahlig durch den Quotienten teilbar ist. Die Dertails überlasse ich Dir.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
sarns
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2011, 07:57     Titel:
  Antworten mit Zitat      
Hi Jan S,

Stimmt, die Daten, die ich oben angegeben habe sind sehr kurz. DECIMATE kann ich leider nicht testen, da ich keinen Zugriff auf die Signal Processing Toolbox habe. Dein Beispiel ist bei mir leider nicht gelaufen, aber der Hinweis auf RESHAPE war Gold wert Wink

Ich habe es jetzt folgendermaßen gelöst:

Code:


wobei A der Messvektor und t der Faktor mit dem die Abtastrate vekleinert werden soll.
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: 25.05.2011, 01:14     Titel:
  Antworten mit Zitat      
Hallo sarns,

Ja, ich habe schon wieder einen Tippfehler eingefügt. Leider habe ich auf meinem Internetrechner kein Matlab laufen.
Code:
x = rand(1, 100);
Inflated = interp1(1:100, x, linspace(1, 100, 300));
Deflated = sum(reshape(Inflated, 4, []), 1);

Ich hatte die ersten beiden Argumente von INTERP1 vertauscht.

Gruß, Jan
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 - 2025 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.