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

Rainflow Zählung - Code von C zu Matlab

 

sexyphil
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 19.08.14
Wohnort: Bayern
Version: 2013a
     Beitrag Verfasst am: 13.05.2015, 16:02     Titel: Rainflow Zählung - Code von C zu Matlab
  Antworten mit Zitat      
Hallo,

ich nutze für eine Rainflow Zählung folgendes Tool:

http://www.mathworks.com/matlabcent.....inflow-counting-algorithm

Das ganze wurde mit C programmiert und dann für Matlab per Compiler nutzbar gemacht. Meine Fähigkeiten mit C lassen zu wünschen übrig, deswegen wollte ich einfach mal den Versuch starten, ob sich hier jemand mit C & Matlab vielleicht auskennt.

Der Code in C lautet:

Code:
/*  RAINFLOW $ Revision: 1.1 $ */
/*  by Adam Nieslony, 2009     */

#include <math.h>
#include "mex.h"

/* ++++++++++ BEGIN RF3 [ampl ampl_mean nr_of_cycle] */
/* ++++++++++ Rain flow without time analysis */
void
rf3(mxArray *array_ext, mxArray *hs[]) {
    double *pr, *po, a[16384], ampl, mean;
    int tot_num, index, j, cNr;
    mxArray *array_out;
   
    tot_num = mxGetM(array_ext) * mxGetN(array_ext);
    pr = (double *)mxGetPr(array_ext);
   
    array_out = mxCreateDoubleMatrix(3, tot_num-1, mxREAL);
    po = (double *)mxGetPr(array_out);
   
    j = -1;
    cNr = 1;
    for (index=0; index<tot_num; index++) {
        a[++j]=*pr++;
        while ( (j >= 2) && (fabs(a[j-1]-a[j-2]) <= fabs(a[j]-a[j-1])) ) {
            ampl=fabs( (a[j-1]-a[j-2])/2 );
            switch(j)
{
                case 0: { break; }
                case 1: { break; }
                case 2: {
                    mean=(a[0]+a[1])/2;
                    a[0]=a[1];
                    a[1]=a[2];
                    j=1;
                    if (ampl > 0) {
                        *po++=ampl;
                        *po++=mean;
                        *po++=0.50;
                    }
                    break;
                }
                default: {
                    mean=(a[j-1]+a[j-2])/2;
                    a[j-2]=a[j];
                    j=j-2;
                    if (ampl > 0) {
                        *po++=ampl;
                        *po++=mean;
                        *po++=1.00;
                        cNr++;
                    }
                    break;
                }
            }
        }
    }
    for (index=0; index<j; index++) {
        ampl=fabs(a[index]-a[index+1])/2;
        mean=(a[index]+a[index+1])/2;
        if (ampl > 0){
            *po++=ampl;
            *po++=mean;
            *po++=0.50;
        }
    }
  /* you can free the allocated memeory */
  /* for array_out data                 */
    mxSetN(array_out, tot_num - cNr);
    hs[0]=array_out;
}
/* ++++++++++ END RF3 */


Jetzt zu meiner Frage. Kann mir das jemand "übersetzen" oder zumindest erklären, wie gezählt wird. Es werden bei der Zählung geschlossene Hysteresen eines Signals (welches nur noch aus lokalen Maxima und Minima besteht) gezählt und offene Hysteresen werden als Residuum mit 0.5 abgelegt. Je nachdem, ob man eine geschlossene Hysterese hat oder nicht werden Punkte des Signals gelöscht. Anschließend wird von dem letzten 'nichtgelöschten Punkt' die Zähung fortgesetzt. Der Vorgang des löschens würde mich interessieren, wie das programmiertechnisch umgesetzt werden kann/wird.

Danke & Grüße
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.