Search the Community

Showing results for tags 'derivatives'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News
    • New Users Introduction
    • Announcements
  • Digilent Technical Forums
    • FPGA
    • Digilent Microcontroller Boards
    • Non-Digilent Microcontrollers
    • Add-on Boards
    • Scopes & Instruments
    • LabVIEW
    • FRC
    • Other
  • General Discussion
    • Project Vault
    • Learn
    • Suggestions & Feedback
    • Buy, Sell, Trade
    • Sales Questions
    • Off Topic
    • Educators
    • Technical Based Off-Topic Discussions

Calendars

  • Community Calendar

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

Found 1 result

  1. Hi, since forum search did not yield much on subject and there seem to be no built in functions did write little something and decided to share below: Script is quite automatic. It will account for sampling rate, memory depth, oversampling changes in real time - just run it to auto create and configure Ref* channels that will display functions. Possible need fiddle Range a little for integration. If wish reset to auto values just disable/delete Ref* and it will instantly re-enable in default configuration. Attached script is provided in demo mode, does integral(derivative(x)) functional check and integral(x). Unneeded doMath*() stuff can be commented out in main() function. If wish for derivative to start from 0 (currently it will remember DC offset for later signal reconstruction) set bDerivativeRetainsDCOffset = false; Code that accounts for Time changes is quite generic so script can be easily expanded with other doMath*() routines. Code tested on: WaveForms version 3.8.10 beta 64-bit Qt5.6.3 Windows 7 // Derivation/Integration for WaveForms, v0.1 // By lab!fyi <info@lab.fyi> // http://lab.fyi/oscilloscope_scripts/derivation_integration/index.html // This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. // Uncheck or delete Ref[1|2] in Run mode to reset units to automatic values // Config bDerivativeRetainsDCOffset = true; oChannel = Scope1.Channel1; // Used for Ref config detection // Derivative >>> function _derivative(aIn, aOut) { aOut[0] = 0; if (bDerivativeRetainsDCOffset) { aOut[0] = aIn[0] * iSTRate; } for (var i = 1; i < aIn.length; i++) { aOut[i] = (aIn[i] - aIn[i - 1]) * iSTRate; } } function derivative(oIn, oOut) { var aO = oOut.data; _derivative(oIn.data, aO); oOut.data = aO; } // <<< Derivative // Integral >>> function _integral(aIn, aOut) { var f = 0; for (var i = 0; i < aIn.length; i++) { f += aIn[i] / iSTRate; aOut[i] = f; } } function integral(oIn, oOut) { var aO = oOut.data; _integral(oIn.data, aO); oOut.data = aO; } // <<< Integral // Config >>> function getSTRate() { return Scope1.Time.Rate.value * (oChannel.data.length / Scope1.Time.Samples.value); } function config(oIn, oOut, fScale) { if (!oOut.enable || !oOut.checked || bInit) { oOut.setEnable(true); oOut.checked = true; oOut.Clone(oIn); oOut.Range.value *= fScale; print ( "(Re)Enabled/Checked & Cloned " + "'" + oIn.name + "'" + " -> " + "'" + oOut.name + "'" ); } if ( (oOut.data.length != oIn.data.length) || (iSTRate != getSTRate()) ) { var iRange = oOut.Range.value; var iOffset = oOut.Offset.value; oOut.Clone(oIn); oOut.Range.value = iRange; oOut.Offset.value = iOffset; } } // <<< Config // ------------------------------------------------ function doMath1(oIn, oOut) { config(oIn, oOut, iSTRate); derivative(oIn, oOut); } function doMath2(oIn, oOut) { config(oIn, oOut, (1 / iSTRate)); integral(oIn, oOut); } function main() { if (!('Scope1' in this)) throw("Please open a Scope instrument"); Scope1.run(); iSTRate = getSTRate(); while (Scope1.State.value == 6) { while (Scope1.wait()) { // integral(derivative(x)) doMath1(Scope1.Channel1, Scope1.Ref1); doMath2(Scope1.Ref1, Scope1.Ref2); // integral(x) doMath2(Scope1.Channel1, Scope1.Ref3); bInit = false; iSTRate = getSTRate(); } } } // ------------------------------------------------ bInit = true; main(); Scope1.stop(); derivation_integration.dwf3script