Unterschiedliche kanallänge

Hallo Diadem-Kollegen,
da habe ich wenige Kanäle, die mit 0,1 s aufgenommen wurden.
Der Rest ist mit 1s. Wie passe ich sie aufeinander, damit ich sie mit einander bearbeiten kann?
Die mit 0,1s komprimieren?
Viele Grüße,
a6a

Hallo Andreas,
habe vielen Dank für Deine Hilfe.
Leider hilft es mir bei meinen Berechnungen nicht,
da meine Kanäle „nicht monoton steigend“ sind.
Diadem hat mich darauf hingewiesen.
Ich verstehe das Problem aus der Sicht des Diadems,
wenn ein Kanal gekürzt werden sollte -> da werden einige Daten verloren gehen.
Wo ist das Problem, wenn ein Kanal vergrößert werden soll.
Z.B. zwischen „10“ und „10“ -> x mal „10“.
Zwischen „10“ und „10,5“ -> eine lineare Interpolation, nicht wahr?
Kann ich es in Diadem einstellen und
mein Kanal vergrößern (an andere Kanäle anpassen)?
Viele Grüße,
a6a

Similar Messages

  • Wie Kanallänge speichern?

    Hallo zusammen,
    ich benutze derzeit DIAdem Version 10.0 für meine Studienarbeit.
    Um den Ablauf der Berechnung nach Aufnahme der ganzen Messdaten zu vereinfachen bin ich nun dabei ein Skript dafür zu programmieren.
    Leider stieß ich dabei auf ein Problem, was  auch bislang im Forum nicht gelöst wurde.
    Ich möchte die Länge eines Datenkanals speichern und einer Variablen oder einem neuen Kanal zuweisen, so dass ich mit diesem später weiterechnen kann.
    Kann mir da einer helfen, wie ich das hinbekomme?
    Besten Dank!
    Gruß Karl

    Im VBS-Skript:
    Speichern in Variable
    meinevariable = chnlength(Kanalnummer)
    Speichern in Kanal:
    chd(1,13) = chnlength(7) schreibt in Kanal 13 Zeile 1 die Länge von Kanal 7
    Gruß
    Sönke Gilbrich

  • Datenverbindung LiveCycleDesigner-ES3 zu einer Excel-Datei

    Hallo Forumsmitglieder,
    leider gelingt es mir bisher nicht, erfolgreich eine ODBC (OLE DB) -Verbindung zwischen LC 3 und einer lokalen Excel.xls herzustellen.
    Nachdem ich unter Windows -->Systemsteuerung --> Verwaltung -->Datenquellen (ODBC) die Exceldatei erfolgreich mit dem ODBC "verknüpft" hatte, kann ich diese Verbindung anschließend in LC3 unter "Neue Datenverbindung" zwar auch auswählen (Datenverknüpfungseigenschaften) und mit "Verbindung testen".
    Antwort: "Das Testen der Verbindung war erfolgreich"
    Jedoch ist es im Fenster "OLEDB-Verbindung" nicht möglich, eine Tabelle aus der Excel-Tabelle auszuwählen.
    Was habe ich vielleicht nicht beachtet ?
    Danke für Eure Hilfe!
    Viele Grüße
    Firefox2013

    Hallo Dominik,
    um auch Daten unterschiedlicher Kanallänge speichern zu können, legt DIAdem die Datendatei standardmäßig kanalweise an.
    Im Navigator kann unter Datei/DAT-Dateien/Speicherparameter... die Speicherform auf Blockspeicherung gestellt werden.
    Eine so gespeicherte DAT-Datei (Dateiname max. 8 Zeichen) kann in DAC problemlos abgespielt werden.
    Gruß
    Martin

  • DIAdem: Kanallängenbestimmung

    Folgendes Problem: Beim automatischen Ablegen einer Wertefolge mit der "CHD(..)" -Anweisung, gibt es mit dem 10001sten Wert eine Fehlermeldung! Wie kann man die Kanallänge (evt. auch dynamisch) bis zur letzeten Werteingabe erhöhen?

    Hallo,
    also sämtliche Kanäle stimmt nicht. der erste Kanal ist ein statischer Kanal (was aus der Einstellung 1ch - 1value auch zu vermuten ist). Dies bedeutet, dass immer ein erster Kanal erzeugt werden muss, bevor man den zweiten dynamisch anlegen und damit auch neu dimensionieren kann.
    Allerdings bleibt für mich eine Frage: Warum der Unterschied zwischen statischen und dynamischen Kanälen? Sind statische scheller bei größeren Mengen? Andernfalls würde das Fehlen von statischen Kanälen kein Problem darstellen oder sogar erwünscht sein. Es ist jedenfalls immer ein Bangen, ob der Benutzer von DIAdem auch die entsprechende Speichernutzung konfiguriert hat welche für verschiedene Scripte zwingen nötig sind. (Inklusive des Anlegens eines erste "dummy"-Kanals). Die o.a. Methode stimmt leider nur für die Standardkonfiguration. Wenn nun jemand einen (von mir) nicht beachteten Fall (z.B. 64ch, 96000values) benutzt, so würde diese Methode auch nicht zum gewünschten Ziel führen.
    Was bleibt?
    die Abfrage neu mit Länge 0 erstellter Kanäle auf die Gesamtlänge. Ist diese > 0 dann ist der Kanal statisch. Kanäle merken und am Ende des Skripts wieder löschen.
    oder das altbewährte
    on error resume next
    Beste Grüße,
    -Alex.Message Edited by Alex Maier on 04-15-2005 08:22 AM
    Message Edited by Alex Maier on 04-15-2005 08:22 AM

  • DIAdem 9.0 : Digitales Filter...

    Hallo, habe folgendes Problem:
    Übertragungsfunktion für das digitale Filter lautet F(z)=(a0+a1*z^-1+a2*z^-2+...+an*z^-n)/(b0+b1*z^-1+​b2*z^-2+...+bn*z^-n). Die Parameterbestimmung von a und b habe ich in einem Unterprogramm durchgeführt, leider gestaltet sich die Programmierung des Schieberegister im Hauptprogramm nicht einfach! Gibt es evt. eine Funktion der man nur die Parameter sowie den Datenbereich übergibt?
    Über eine Idee wäre ich sehr dankbar...

    Hallo,
    Aus der Frage geht leider nicht genau hervor, wie die Berechnung genau erfolgen soll. Ich vermute jetzt einfach mal ins blaue:
    Die Werte aus einem existierenden Kanal sollen Offline üder einen Script digital gefiltert werden. Die Koeffizienten a und b entsprechen dabei einem speziellen Filterdesign, das besser an die Aufgabe angepasst ist als die digitalen Filter, die DIAdem bereits eingebaut hat. Der Funktionswert F(z) berechnet sich dann über die Formel aus einem n Werte großen Bereich des Kanals. Mit z^-1 ist der Kanalwert an der position z-1 gemeint.
    Wenn ich mit dieser Annahme nicht total daneben liege, ist die Lösung nicht ganz einfach und auch stark von der Größe der Kanäle und der Größe von n abhängig.
    Normalerweise würde man im Script eine Schleife programieren, die mittels Blockoperation immer ein entsprechendes Stück aus dem Kanal ausschneidet und dann den Wert F(z) berechnet. Dieses Verfahren könnte allerdings sehr viel Zeit benötigen, wenn die Kanäle sehr lang sind.
    DIAdem ist bei Berechnungen immer besonders schnell, wenn man mit ganzen Kanälen rechnet. Statt mit einem Schieberegister das über die ganze Kanallänge läuft, kann man auch die Berechnung in n Schritte zerlegen, wobei man jeweils den ersten Wert aus dem Kanal löscht und alle anderen Werte eine Position nach vorne schiebt.
    Die folgenden Zeilen zeigen wie das in einzelnen Schritten geht
    Call FormulaCalc("ch(3) := ch(2)*R2") ' Multipliziert alle Werte mit dem zweiten Koeffizienten
    Call DATABLDEL("2",1,1) ' Löscht den ersten Wert
    Call FormulaCalc("ch(3) := ch(3)+ch(2)*R1") ' Multipliziert alle Werte mit dem ersten Koeffizienten und summiert um einen Wert versetzt
    Der Zielkanal enthält jetzt die Werte F(z) = R1*z + R2*z^-1 und ist einen Wert kürzer als der Eingangskanal. Man kommt so bei beliebig großen Kanälen mit n Kanaloperationen aus.
    Wenn n größer wird ist es einfach die Koeffizienten in Kanäle zu schreiben und eine Schleife über alle Koeffizienten laufen zu lassen. Die Klammern für a und b müssen natürlich separat summiert werden. Am Anfang gehen n-1 Werte verloren weil da keine älteren Daten vorhanden sind. Das ist bei realen Filtern aber nicht anders (Einschwingzeit). Es ist immerhin möglich den Kanal vorher linear oder irgendwie sinnvoll zu verlängern.
    Ich hoffe hiermit nicht total daneben zu liegen und etwas weitergeholfen zu haben.

  • ReDim eines Arrays in einem Objekt

    Hallo,
    ich versuche gerade ein Objekt aus einem Script an einen SUD-Dialog zu übergeben. Dies Funktioniert soweit auch. Das Übergabeobjekt "oData" enthält mehrere Arrays (zur Zeit System und Valve). Die Dimension dieser kenne ich teilweise vorab aber noch nicht, da eine TDM-Datei mit einem Textkanal die Elemente enthält.
    Kann ich mit ReDim die Größe des dynamischen Datenfeld nach dem anlegen (und dem Laden der Parameterdatei)  irgendwie ändern? Bekomme leider immer eine Fehlermeldung.
    Nachfolgen der bisherige Code:
    Option Explicit
    Dim temp
    Call DataDelAll()
    DataFile = "VSD-Parameter.TDM"
    Call DataFileLoad(DataFile)                         ' Parameterdatei
    If Not ItemInfoGet("oData") Then
       Call GlobalDim("oData")
    End If
    temp = ChnPropValGet("[1]/Systeme", "length")       ' Kanallänge = gewünschte Größe vom Array
    Set oData = New cData                               ' Objekt anlegen
    'ReDim oData.System(temp)                           ' funktioniert so leider nicht
    For i = 1 to ChnPropValGet("[1]/Systeme", "length") ' Daten aus Kanal in Array übertragen
      oData.System(i-1) = ChT(i, "[1]/Systeme")
    Next
    Call SudDlgShow("Dlg1","TestSUD.sud",oData)         ' Dialog anzeigen
    Class cData                                         ' Klasse
      Dim Valve(12)                                     ' feste Größe
      Dim System(4)                                     ' mit fester Größe funktioniert es
      'Dim System()                                      ' so leider nicht
    End Class
    Vielen Dank schon mal
    Markus

    Hallo Markus!
    Das grundsätzliche Problem liegt wohl darin das der ReDim Befehl nur direkt auf eine Variable funktioniert. Etwas in der Art ReDim oMyObject.avMyArray(10) geht deshalb nicht (egal ob SUD oder nicht).
    Was ist nun die Lösung? Da gibt es zwei Möglichkeiten:
    1. Man kann der Klasse eine Methode geben, bei dir z.B.:
    Class cData ' Klasse
    Dim Valve(12) ' feste Größe
    Dim System()
    Public Sub ReDimSystem(ByRef nCount)
    Redim System(nCount)
    End Sub
    End Class
    und diese dann im SUD aufrufen.
    2. Etwas einfacher und IMHO besser lesbar ist es einfach im SUD ein lokales Array anzulegen und dieses via ReDim auf die richtige Größe bringen. Zum Schluss wird es dann einfach der Variable in der Klasse zugewiesen. Diese muss dann nur ohne (), also als 'normale' Variable deklariert sein.
    Matthias
    Message Edited by Twigeater on 03-02-2008 08:53 AM
    Matthias Alleweldt
    Project Engineer / Projektingenieur
    Twigeater?  

  • Datenportal:Interne Daten aus einer SQL-Datenbank mittels OLEDB Abfrage füllen

    Es sollen Daten aus einer SQL-Datenbank mitttels OLEDB Abfrage in das Datenportal:Interne Daten in Diadem geschrieben werden. Die Daten in der SQL-Datenbank können nicht direkt verknüpft werden, da sie in komprimierter Form abgelegt sind und nur mittels einer OLEDB Abfrage ausgelesen werden können.
    Ich habe ein Script vorbereitet, aber ich bekomme die Daten nicht in das Datenportal importiert.
    Vieleicht hat ja jemand hierfür eine Lösung
    Attachments:
    WinCC import.zip ‏2 KB

    Hallo!
    Ich vermute mal mit 'Datenportal:Interne Daten' sind Kanäle gemeint. Beim Dekomprimieren der Daten (ist im Skript nicht zu erkennen) wird ja sicherlich die Kanallänge abfallen. Dann kann mit dem Befehl ChnAlloc ein passender Kanal angelegt werden, der dann über den Chd bzw. Chdx (schneller) Befehlen mit den Werten befüllt werden kann. Das wird aber bei vielen Werten nicht sonderlich schnell sein.
    Matthias
    Matthias Alleweldt
    Project Engineer / Projektingenieur
    Twigeater?  

  • Löschen gespeicherter Daten

    Hallo,
    mein Problem liegt darin, dass ich eine Kalibriermessung automatisiert durchlaufen lassen möchte. Allerdings gibt es hierbei Abbruchkriterien, die nach Überschreiten von bestimmten Grenzen die Messung bzw. den Ablauf erneut starten.
    Meine Frage ist nun, wie kann ich die bisher gespeicherten Daten/Kanäle wieder auf Null setzten bzw. Reseten? Habe dazu leider bislang nichts in der Hilfe gefunden. Gibt es hiefür einen bestimmten Befehl?
    Besten Dank schon mal für die Hilfe!!!
    Bis dahin...
    Thomas

    Hallo!
    Am einfachste ist mit dem Befehl:
    Call FormulaCalc("Ch('Kanalname') := Ch('Kanalname') * 0")
    Sonst können Sie auch dem Kanal löschen und neu generieren lassen:
    ChnDel("Kanalname")
    Call ChnLinGen("Kanalname", 0, 0, Kanallänge)
    Noch ein schönes Wochenende
    Ken

  • Kanäle anlegen

    folgendes:
    Ich habe eine Kanalgruppe, in der ich wie in excel nacheinander die Kanalgruppen sortieren will.
    Als erstes nehm ich mir kanalgruppe eins, sortiere es, dann such ich mir alle zeilen der ersten kanalgruppe mit selbem wert und geh in kanalgruppe 2, sortiere diese zeilen nach dem 2 kanal und sofort
    das ist zumindest mein plan, aber wie realisier ich das?
    gibt es was fertiges?
    Hatte mir überlegt, das ich die bereiche ansonsten in einer neuen kanalgruppe speicher und dann darin weiter arbeite. doch dann muss ich kanäle mit den selben eigenschaften anlegen, wie bei den ursprungskanälen? wie mach ich das?
    Als nächstes hatte ich ein problem beim löschen von zeilen:
    wenn ich aus einer gruppe mit kanälen aus jedem kanal die ersten 20 zeilen lösche und dann diese kanäle komplett in eine andere gruppe kopiere, sind die 20 gelöschten zeilen wieder da...mein fehler? oder wird beim löschen der 20 zeilen mit dataBlDel nur ein zeiger verschoben???

    Die angenehmste Lösung dafür ist in Diadem den Aufzeichnungsmodus im Script zu aktivieren,
    dann zum Diadem Navigator, die alten Daten im Datenportal löschen, neue Daten laden (drag&drop mit Maus in Portal ziehen), dann auf Diadem Analysis.
    Dort findet sich unter Kanalfunktionen die Kanäle sortieren. Da dann den geeigneten Auswählen und er wird sortiert. Den neuen Kanal kann man ja dann umbenennen
    Möglicher Beispielcode würde dann im Script so aussehen:
    Call DATADELALL(1)                      '... HEADERDEL
    Call DATAFILELOAD("Data1.tdm","TDM","") '... DATAFILENAME,FILEIMPORTFILTER,IMPORTACTION
    Call CHNMULTIPLESORT("[1]/T_min","[1]/T_max",0,0) '... CALCXCHN,CALCYCHN,SORTSWITCH,CHNMSORTIP
    Falls Sie jetzt noch nach Scriptbefehl umbenennen suchen dann unter Hilfe -> Inhalt auf Index und mal chn eingeben
    dann erscheint eine Liste von Scriptbefehlen und folgendes um existierenden Kanal umzubenennen
    lSuccessT
    Rückgabewert von DIAdem der anzeigt, ob der Befehl erfolgreich ausgeführt wurde.
    1 = Befehl wurde erfolgreich ausgeführt
    0 = Es ist ein Fehler aufgetreten
    Dim lSuccessT
    lSuccessT = IDIASheet.ChnNameSet(5,"torque")
    Dieser Befehl setzt den Kanalnamen für Kanal Nummer 5 auf "torque".
    Dim lSuccessT
    lSuccessT = IDIASheet.ChnNameSet("revolution","torque")
    Dieser Befehl setzt den Kanalnamen für den Kanal mit dem Namen "revolution" auf "torque".
    Ja beim "Löschen" haben Sie dann wahrscheinlich NoValue-Werte drin oder 0 aber immer noch die selbe Kanallänge
    Dann kann man sich z.B. mit datablcopy behelfen - einfach in der Hilfe mal im Index databl eingeben
    Das folgende Beispiel kopiert ab der dritten Zeile 10 Werte aus den Kanälen Group1/Channel1 bis Group1/Channel4 ab der zweiten Zeile in die Kanäle Group1/Channel1 bis Group1/Channel4.
    Call DataBlCopy("'Group1/Channel1'-'Group1/Channel4'",3​,10,"'Group2/Channel1'-'Group2/Channel4'",2)
    aber mit databldel müsste es funktionieren
    Das folgende Beispiel löscht in den Kanälen Group1/Channel1bis Group1/Channel4 ab der ersten Zeile 5 Werte.
    Call DataBlDel("'Group1/Channel1'-'Group1/Channel4'",1,​5)
    man könnte ja einen neuen Kanal der gewünschten Länge erzeugen
    ChnAlloc("Time channel", 10, 1)
    und dann den alten mit chndel löschen
    Das folgende Beispiel löscht den Kanal Group/SourceChannel.Call ChnDel("Group/SourceChannel") Aus der Diadem-Hilfe kann man so alles erschließen. Mit freundlichen Grüßen AE Germany (München)

  • Anfängerschwierigkeiten?

    Hallo,
    hier ist eine kleine Sequenz, die beim Ausführen kein Ende findet.
    Der Kanal „test“ ist nur 100 Werte von 1 bis 50 groß.
    Berechnet werden sollen alle Werte, die über 45 sind.
    Das Ergebnis soll in einem neuen Kanal „neg_U_Sprung“ in der ersten Zeile gespeichert werden.
    Call ChnAlloc("neg_U_Sprung")
    dim negSprung, anzahlSprung
    negSprung=1: anzahlSprung=0
    do
          negSprung = chnfind("ch(""[1]/test"")>45", negSprung)
              if negSprung >0 then
              anzahlSprung = anzahlSprung +1
              end if
    loop until negSprung >= cl("[1]/test")
    chnval(1,"neg_U_Sprung") = anzahlSprung
    was mache ich falsch?
    Gruß,
    a6a

    Hallo 6a6!
    Anfängerschwierigkeiten? Nein und Ja!
    zu Nein: Leider hat Walter mit seiner Antwort, aber auch die DIAdem Hilfe unrecht! Mit der Einführung des Befehls in DIAdem 10 wurde die Hilfe von dem bis dahin schon vorhandenen Befehl 'find' kopiert, nur leider verhalten sich die beiden Befehle nicht gleich. Bei chnfind mit Angabe eines Startindex größer der Kanallänge wird, wenn der letzte Wert im Kanal die Bedingung erfüllt, die Kanallänge zurückgegeben. Das Verhalten macht m.E. zwar keinen Sinn aber ist so! (Bug?) Das kann ein Anfänger wirklich nicht wissen
    zu Ja: Nun ist aber noch zusätzlich ein kleiner Fehler in deinem Code. Du rufst den chnfind mit negSprung als Startindex auf. So wird aber immer wieder die selbe Stelle gefunden. Es muss negSprung+1 dort stehen und negSprung deshalb mit 0 initialisiert werden.
    Mit dem Wissen können wir nun eine lauffähige Version machen:
    Call ChnAlloc("neg_U_Sprung")
    dim negSprung, anzahlSprung
    negSprung=0: anzahlSprung=0
    do
    negSprung = chnfind("ch(""[1]/test"")>45", negSprung+1)
    if negSprung >0 then
    anzahlSprung = anzahlSprung +1
    end if
    loop until (negSprung=0) or (negSprung >= cl("[1]/test"))
    chnval(1,"neg_U_Sprung") = anzahlSprung
    Matthias
    Matthias Alleweldt
    Project Engineer / Projektingenieur
    Twigeater?  

  • DIAdem 9.0 : Ergebnikanal aus 'FormulaCalc' direkt einen Namen zuweisen

    Hallo,
    beim benutzen durch 'Call FormulaCalc("Ch(#)=Ch(1)*...")' wird der Ergebniskanal unter 'Formelergebnis' abgelegt.
    Besteht die Möglichkeit den Ergebniskanalnamen gleich richtig zu benennen?
    Z.B. Wenn das Ergebnis in Kanal xy abgelegt werden soll, Idee: 'Call FormulaCalc("Ch(xy)=Ch(1)*...")' ,leider geht das nicht so einfach...
    Weiß evt. jemand Rat?

    Hallo Carsten,
    in dem Fall kann man das wie folgt lösen:
    iChnLenMax = 1000 ' Kanallänge noch genau bestimmen
    for iLoop = 1 to 10
    sNewChnName = "Kanal_" & str(iLoop)
    ' für DIAdem 9.1 kann Kanalgruppe berücksichtigt werden
    ' sNewChnName = "Example2/Kanal_" & str(iLoop)
    ' erst den Kanal anlegen
    call ChnAlloc(sNewChnName, iChnLenMax)
    ' akt. Kanalnr. ermitteln (Formelparser kommt damit besser zurecht)
    L1 = Cno(sNewChnName)
    Call FormulaCalc("Ch(L1):=Ch(1)")
    next
    Gruß
    br>Walter

  • Nicht genügend Hauptspeicher zur Durchführung der Berechnung vorhanden

    Liebe NG,
    Ich versuche eine FFT mit 2 Signalen bestehend aus jeweils ca. 55 000 000 Datenpunkten in einem Intervall zu berechnen. Diadem gibt mir jedesmal die Fehlermeldung wie sie im Titel des Postings angeführt ist aus und bricht die Berechnung ab.
    Wenn ich nun das Zeitintervall in mehrere Abschnitte unterteile (100) wird die FFT zwar gerechnet, da verstehe ich dann jedoch nicht wie ich die dabei entstandenen Übertragungsfunktionen wieder zu einer zusammenführen soll.
    Vielen Dank im Voraus für Eure Hilfe!

    Hallo belli_m,
    die FFT verwendet einen Algorithmus, der mehrere Felder
    in Kanallänge im Hauptspeicher des Rechners benötigt. Bei 8 Byte pro
    Wert benötigt jeder Kanal 440 MB. Der Hauptspeicher einer 32 Bit
    Anwendung ist aber auf 2 GB beschränkt. Egal wie viel Speicher man im
    Rechner hat oder wie groß die Auslagerungsdatei ist, mehr kann nicht
    adressiert werden. Bei gut ausgestatteten Rechnern liegt die Grenze des
    aktuell machbaren deshalb irgendwo zwischen 10 und 20 Millionen Werten
    für die FFT mit einem Kanal. Bei zweikanaligen Rechnungen dürfte es
    etwas weniger sein. Das ganze hängt auch davon ab, was die
    Speicherverwaltung von Windows gerade macht. Es müssen ja ausreichend
    große zusammenhängende Stücke vorhanden sein.
    Bei
    FFT-Berechnungen und speziell bei Übertragungsfunktionen dieser Größe
    stellt sich aber grundsätzlich die Frage, ob das überhaupt sinnvoll
    ist. Man braucht so große Kanäle an sich nur, wenn man eine besonders
    feine Auflösung der Frequenzen im oberen Bereich des Spektrums
    benötigt. Also wenn man z.B. sehen will ob die Amplitude bei 500000 Hz
    größer ist als bei 500000.1 Hz.
    Bei
    Übertragungsfunktionen ist es noch unüblicher so große Kanäle in einem
    Stück zu verarbeiten. Bei Übertragungsfunktionen misst man ja ein
    Eingangssignal und ein Ausgangssignal und berechnet dann für jede
    Frequenz das Verhältnis zwischen beiden. Da im Ausgangssignal auch oft
    Anteile vorhanden sind, die nicht vom Eingang verursacht werden,
    sondern von anderen Quellen kommen, liefert jede Messungein etwas
    anderes Ergebnis. Bei einigen Frequenzen kann es sein, das kaum Signal
    übertragen wird und im Ergebnis sieht man irgend welche Zufallswerte,
    bei anderen Frequenzen wird viel Übertragen und das Verhältnis zwischen
    Ein- und Ausgang ist immer etwa gleich.
    Typischerweise
    berechnet man deshalb nicht eine Übertragungsfunktion, sondern man
    macht eine Versuchsreihe und vergleicht die Ergebnisse. Am einfachsten
    geht das, indem man Abschnitte berechnen läßt und die Ergebnisse
    mittelt. Zusätzlich berechnet man noch die Kohärenz. Die Kohärenz liegt
    für jede Frequenz zwischen 0 und 1 und gibt an wie gut die einzelnen
    Berechnungen miteinander übereinstimmen. Bei niedriger Kohärenz ist das
    Ergebnis der Übertragungsfunktion für diese Frequenz nicht
    vertrauenwürdig, weil das Ausgangssignal anscheinend nicht vom
    Eingangssignal bestimmt wird, sondern andere Ursachen hat.
    Zum
    ausprobieren würde ich erst mal ein Stück der Daten nehmen (z.B. die
    erste Millionen oder noch weniger) und mit 10 Zeitintervallen und
    Mittelung rechnen. Wenn das Ergebnis in den relevanten
    Frequenzbereichen eine gut Kohärenz hat, kann man das noch einmal mit
    einem anderen Stück aus der Messung wiederholen. Wenn die Ergebnisse
    überall in etwa übereinstimmen und wenn Sie wirklich eine viel feinere
    Auflösung hoher Frequenzen benötigen, dann können Sie das ganze für
    alle Daten und weniger Intervalle wiederholen. Vom Speicherbedarf der
    Algorithmen her vermute ich, dass die Grenze des machbaren irgendwo
    zwischen 5 und 10 Millionen Werten pro Berechnung liegt. Mit 10 oder
    besser 20 Intervallen sollte es also keine Probleme geben.
     mit freundlichen Grüßen
     Ulrich Bierwisch

  • Hallo, ich suche in DiaDem 10 nach einer Möglichkei​t, nach einer Vorgegeben​en Prozedur aufeinande​rfolgende Abschnitte eines Messwertka​nals miteinande​r zu Verrechnen - Bildung eines gemittelte​n Verlaufs des Kanals bei Trommelprü​fstandsmes​sung

    Ich suche nach eine Prozedur in VBS oder als Autosequenz.
    Bildung des gemittelten Verlaufs eines Messwertkanals bei Trommelprüfstandsmessung:
    1. Gehe vom Anfang des Kanals eine vorgegebene Anzahl von Messpunkt vor
    2. Nimm aus diesem Bereich das Maximum
    3. Gehe zum darauf folgenden Nulldurchgang der Kurve
    4. Gehe von da "x" Messpunkte zurück zu Punkt "y"
    5. Schneide mir ab "y" jede einzelne Trommelumdrehung aus (50 Umdrehungen)
    6. Bilde mir aus den Einzelumdrehungen eine gemittelte Umdrehung
    7. Nimm den Wert "y" und berechne mir die gemittelte Überfahrt für alle übrigen Kanäle
    Für Anregungen wäre ich dankbar.

    Ich habe zwar kein komplettes Skript für speziell diese Aufgabe, kann Ihnen aber dennoch ein paar Tipps geben, welche Befehle Sie einsetzten können.
    Mit StatBlockCalc kann aus einem Intervall eines Kanales der Maximalwert ermittelt werden. Einfach als RowNoStr die Zeilen in der datenmatrix angeben, z.B. "1-50"
    Nulldurchgänge einer Kurve finden Sie am zuverlässigsten, wenn Sie die Kurve integrieren (ChnIntegrate) und anschliessend nach Extremwerten sichen (ChnPeakFind). Letztere Funktion muss unter Umständen zweimal aufgerufen werden - einmal Maximal und einmal für Minimalwerte (Richtung des Nulldurchgangs). Ergebnis sind jeweils 2 Kanäle mit den Koordinaten der Extremwertwerte. Der Kanal X-Peak gibt den Zeitpunkt des Nulldurchgangs an.
    Mit den PNo Funktion kann im Zeitkanal der Messung nach den Zeitpunkten des Nulldurchgangs gesucht werden, als Ergebnis erhält man die Zeile mit dem Nulldurchgang, hiervon können dann einfach x Werte abgezogen werden
    Mit DataBlCopy können Datenbereiche eines Kanal kopiert werden, so können die Werte zwischen den Nulldurchgängen in neue Kanäle kopiert werden Als Parameter dient unter Anderem die Startzeile, welche mit PNo ermittelt wurde.
    Falls die Datenmatrix dynamisch verwaltet wird, müssen die neuen Kanäle vor der Kopieraktion mit ChnAlloc noch angelegt werden.
    StatBlockCalc kann nicht nur genutzt werden, um den Mittelwert innerhalb eines Kanales zu finden; in der zeilenorientierten Auswertung (s.Dialog "Deskriptive Statistik" bzw "statistische Kennwerte") kann ein Mittelwert Zeilenweise über mehrere Kanäle berechnet werden. Das Ergebnis ist in diesem Fall ein Kanal.
    Ich hoffe, die Hinweise erleichtern Ihnen die Erstellung des Skriptes. Leider können ein Teil der erwähnten Funktionen nicht im teachin Modus mitgeloggt werden, so dass auch ein wenig manuelle Programmierung nötig sein wird.
    Ingo Schumacher
    Systems Engineer Sound&VibrationNational Instruments Germany

  • SFD_ProcessChannel; Zwei Ausgänge über DataP ?

    Hallo,
    mal wieder kämpfe ich mit der Funktion SFD_ProcessChannel.
    Folgende Problemstellung: Ich habe an dem Block zwei Ein- und zwei Ausgänge definiert. Jetzt möchte ich mit den beiden Eingängen div. Berechnungen durchführen und zwei Ergebnisse ausgeben, die dann in einer X/Y Darstellung angezeigt werden sollen.
    Ich bekomme es auch hin die beiden Eingänge über InputListV(0) und InputListV(1) einzulesen und zu verarbeiten, aber wie kann ich mir an dem Block zwei Ergebnisse ausgeben lassen? Ich habe es analog zu InputListV(1) mit DataP(1) versucht aber DataP ist ja leider kein Array?!?
    Jemand eine Idee?
    Danke, Tobias 

    Hallo,
    Ihr Script wird so im Script DAC Block leider nicht funktionieren. Die Funktion ChnStrCnt, die zunächst den Fehler erzeugt, ist dabei nicht einmal das Hauptproblem.
    In diesem Fall können Sie die Funktion ganz weglassen. ChnStrCnt prüft einen Channel Selection String (so etwas wie "1-4,6") auf die Anzahl der beinhalteten Kanäle (im Beispiel: 5). ChannelNumberP ist jedoch kein Channel Selection String, sondern eine Integervariable. Eine Überprüfung funktioniert also einfach mit ChannelNumberP=1. Allerdings zählt die Variable von 0 aufwärts, ChannelNumberP ist also 0 für den ersten Kanal, 1 für den 2. usw. Ein weiteres Problem ist, dass Innerhalb der Ausführung von SFD_Process channel nur einmal ein Wert an DataP übergeben werden kann, sonst würden die Daten hinter dem Script DAC Block ja viel höher getaktet sein. Das Hauptproblem bei Ihrem Ansatz ist jedoch, dass der Script DAC Treiber keinen Zugriff auf die Datenmatrix ermöglicht. Die ChnLength und ChD Variablen sind in diesem Kontext ungültig.
    Ich habe noch nicht ganz verstanden, was Sie mit dieser Sache genau erreichen möchten. Bitte beschreiben Sie das Ziel noch einmal etwas genauer, vielleicht kann ich Ihnen dann zu einem alternativen Ansatz raten.
    MfG
    Ingo Schumacher
    Systems Engineer Sound&VibrationNational Instruments Germany

  • 1.Wie kann ich unter Diadem 9 Textkanäle anlegen? 2. Wie kann ich im Navigator manuell einen neuen Kanal anlegen wie es z.B. bei der version 8 möglich war?

    Ich meine das es möglich ist unter Diadem 9 auch Kanäle mit Textinhalten zu generieren. Ich kann aber nur Zeit und numerische Darstellung auswählen.
    zu2.
    Wie kann ich schnell einen neuen Kanal anlegen und manuell Werte eingeben (entweder im Navigator oder im View)?

    zu 1)
    Neue Kanäle werden im Datenportal über das Kontextmenü generiert. Führen Sie einen Rechtsklick auf dem Titel der Gruppe aus, in welcher Sie den Kanal generieren möchten. Wählen Sie aus dem Kontextmenü "Neuer Kanal" und im darauf folgenden Dialog können Sie die Art des Kanals (numerisch / Datum / Text) festlegen.
    Wenn das Datenportal noch leer muss zuvor eine Gruppe erstellt werden. Dies erfolgt über das Kontextmenü der Root (oberste Zeile im Datenportal)
    zu 2)
    Um das Generieren von leeren Kanälen zu beschleunigen, können Sie sich kurze Skripte erstellen (Einzeiler), welche, wenn Sie sie mit den Ikonen der DIAdem-Skript Funktionsleiste verknüpfen, über einen Shortcut aufgerufen werden können (aus jedem beliebigen Modul). So könnten Sie sich ein Skripot für Da
    tenkanäle und eins für Textkanäle erstellen. Der einuige Befehl, welcher in diesen Skripten aufgerufen wird ist ChnAlloc. Über Parameter können Kanalname, Länge, Zielgruppe und Typ eingestellt werden. (s. Hilfe)
    Ingo Schumacher
    Application Engineering
    National Instruments

Maybe you are looking for

  • On my iPhone 4s, how do I make it so it doesn't make a sound when I send a text?

    On my iPhone 4s, how do I make it so it doesn't make a sound when I send a text? Even if my ringer is set to high, I don't want it to make a sound when it sends my texts..can anyone help?

  • UnsatisfiedLinkError when combining J2SE & J2ME

    Hello, I'm doing an application in J2SE which calls to a package compiled in J2ME. It compiles fine. In runtime, when executing functions implemented in J2SE there's no problem, but when I try to execute a function from the library compiled in J2ME,

  • Recently played list Curiosity

    Not a technical question as such, more a need to satisfy my curiosity. In my recently played list I have about 30 tracks that have been played on a date when I did not use my macbook pro. Can there be a bug in iTunes that that has changed the last pl

  • Why does my persona and foxclocks disappear?

    My persona and foxclocks has disappeared again. Have there been any results in finding why this is happening?

  • No sound sr1630nx 32bit winxp home ac'97 or diamond xtreme 5.1

    Hi, first time I've had a problem that I couldn't fix by just reading.  This computer was brought in for service to add wireless pci cards and a router at the customer's house.  First installed the wireless card in all three pci slots and the system