Lev Mar parameters for Gaussian fit

I am trying to analyse a Gaussian profile using the Lev-Ma r fit provided with LabVIEW. My problem is that I don't know the proper format for the function descriptions to use and get an error when using the fit. Has anyone done this in the past, and can help with the formating of the inputs to the fit.
Thanks
Eugene Lorman

lorman wrote:
> I am trying to analyse a Gaussian profile using the Lev-Ma r fit
> provided with LabVIEW. My problem is that I don't know the proper
> format for the function descriptions to use and get an error when
> using the fit. Has anyone done this in the past, and can help with
> the formating of the inputs to the fit.
>
> Thanks
>
> Eugene Lorman
Eugence,
I've been doing similar stuff myself, and found this link very helpful:
http://www.originalcode.com/occdl.html
Page down through and you'll find a downloadable VI that does
peak fitting on a gaussian.
HTH
dave Langstaff
Remove "spamkill." when replying to this message

Similar Messages

  • Problem: Fitting Lev-Mar with Error Function

    Hi everyone,
    I have very little experience with LabVIEW and I'm trying for the first time to do some NonLinear Curve fit for some data I have.
    I've searched in forums for almost a day and couldn't find what I need. The problems are:
    1) I need to fit a function of the following type: P = Po/2 - Po/2*erf(sqrt(2)*(x-xo)/w) , where Po, xo and w are my parameters.
    But in my error2.vi I cannot link my y=sqrt(2)*(x-xo)/w  variable of the erf function to the input, because the erf.vi does not accept 1D array as input and doesn't give that as output as well. The output thing is another problem, since the input of F(x,a) needs to be a 1D array.
    2) I read about the Lev-Mar NonLinear CurveFit VI and I think I got what needs to be done. However, a I was having problems in wiring my Static VI Reference to the F(x,a) input in the Lev-Mar VI and it didn't give me a broken wire only when I made de Reference a "Strictly Typed VI Reference". What does that mean? Why did it only work with that?
    I know these are some pretty basic doubts, but I've been trying to understand it for quite some time and couldn't get this done.
    Thanks.
    PS* The fitting function (subvi) is the error2.vi file.
    Solved!
    Go to Solution.
    Attachments:
    error2.vi ‏13 KB
    FittingGaussianKnife.vi ‏15 KB

    Try this. Seem to work  just fine (LabVIEW 2013).
    (don't try to graph the best parameters, graph the best fit output!)
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    FittingGaussianKnife_MODCA.vi ‏17 KB
    error2_MODCA.vi ‏14 KB
    erfit.png ‏40 KB

  • How to constrain parameters in Lev-Mar?

    It's a common case for non-linear fitting.
    How can it be done in LabView's Lev-Mar?
    Thanks.

    The provided LabVIEW implementation does not contain options for parameter bounds.
    One solution would be to re-parametrize your code in terms of unconstrained variables that cause a constraint on your original parameters.
    Some transformations for one-sided or two-sided parameter bounds are given here:
    http://www.id.unizh.ch/software/unix/statmath/sas/sasdoc/stat/chap19/sect41.htm
    The link also lists references with more details.
    LabVIEW Champion . Do more with less code and in less time .

  • Curve Fit of ODE, should I use Lev-Mar or Constrained Nonlinear Optimization?

    I wanna do a curve fitting of differential equations, following is the equations:
    dx/dt = u*x-a*x
    ds/dt = b*u*x+c*x
    dp/dt = d*u*x+e*x+f*p
    and u = um*s/(km+s+s^2/ki)
    I've tried "nonlinear curve fit( Lev-Mar)", but I met difficulties when writing the f(x,a) of Lev-Mar.
    Then I tried "Constrained Nonlinear Optimization", I found that the example "Estimate Nonlinear Spring Constant.vi"
    in the "labview\examples\math\curvefit.llb" was similar to the fitting I tried to do, but there was only one parameter
    need to estimate in this example,but what I need is to estimate 3 parameters.
    However,I modified the example to my equations, it failed again.
    How can I achieve this? is it possible to do this fit only using Labview VIs or need Matlab Script Node?
    Any help will be appreciated.

    I forgot to mention that in the equations above,  a,b,c,d,e,f is constant,
    and the data of x,s,p corresponding with the data of time is already known,
    and which parameters I wanna identify is um,km,and ki
    帖子被myafu在12-22-2006 01:33 AM时编辑过了

  • Lorentz fit of a curve with Lev-Mar

    Hello everybody! I am trying to set of data to a Lorentz curve to calculate a Q value (resonance.) I found a program on a thread from this forum that appears to work with the sample data set from the thread. However, when I try to run the program using my data set with known fitted coefficients as the initial guesses, we get an error in the Lev-Mar sub-VI -- something like “the input matrix is singular”. There’s a screenshot of my data in in the attached zip folder, as well as the text file containing my data.
    My data curves down (reaching a minimum) instead of up, as in the sample data set, but it seems like that should be accounted for by the different initial guesses. I am thinking that something else is going on; hopefully it is something simple that I am just missing. Any help y'all can provide would be greatly appreciated!
    Thank you!
    Attachments:
    Lorentz Fit.zip ‏1992 KB

    Hello Lynn,
    Yes, there are quite a few potential peaks in that data set. The peak you identified was the one that we are trying to fit (The peak should be trimmed by the cursors.) We used origin to fit that same peak in order to get the initial guesses for the coefficients in the screenshot. When it runs, we get the error message: "Error -20041 occured at NI_Gmath.lvlib: Nonlinear Curve Fit LM.vi:2 Possible reason(s): Analysis: The system of equations cannot be solved because the input matrix is singular." 
    Thanks!
    -Garrison

  • Varying Lev-Mar init. conditions causes wide change in fit coeficients.

    Hey, I'm trying to use the advanced Lev-Mar fit vi to fit an exponential decay with an offset. I noticed that when I vary the initial condition for the time constant by 5% I get significant changes in my fit coeficient for the same parameter. However, when I multiply my input Y values by 10^4, the fit coeficients are more robust and change little with initial conditions that vary more than 10%. Also, the values now seem to match well with values I obtain when I perform the same fit in the Origin plotting program. Why is this? All my values are in double precision so I don't see how this could be a precision issue.

    The Lev-Mar has a well-known "bug" in the termination condition IF you fail to wire the "standard Deviation Input". In this case, the standard deviation is taken as 1, which is fine except for the case where your y-data is very small (e.g. all in microvolts or nanovolts). In this case, the function is considered converged after one iteration using the initial guesses.
    You have two options:
    (1) (not recommended) Edit the Lev-MAR.vi and make the diagram constant in the bottom center much smaller.
    (2) (RECOMMENDED!) Always wire a "standard deviation input array". In your case, just create an array with equal size as your data, initialized with numbers corresponding to the noise in your data. It does not need to be accurate, you could just take it as e.g. 10E-4 to 10e-6 times your y-range (y-max minus y-min).
    LabVIEW Champion . Do more with less code and in less time .

  • Lev-mar fitting in diadem

    Hi,
    I'm completely new to DIAdem.  I'm surprised that - from what I can see - there's no Levenberg-Marquardt (or equivalent) fitting routine for parametric fitting to nonlinear functions.  Is this right?  How can I give DIAdem this functionality?  Is Xmath an option for accomplishing this task?
    Nick
    "You keep using that word. I do not think it means what you think it means." - Inigo Montoya

    Hi Nick,
    It is possible to call LV DLLs from a GPI-DLL, you just need to have the LV runtime engine on that computer and also put one other file in the Windows System directory-- but I forget now which it was.  I did this 4 or 5 years ago with a Bessel Function from LabVIEW.  The GPI-DLL framework is extensive, and it's easy to get lost in it, but if you can run the GPI-DLL wizard, the boiler-plate code is super easy to create.  And if you can find the right callback function, you only need to add about 10 lines of code to call an external LV DLL.  Don't rely on the heap for memory, though, or you will limit the array size you can process-- use MAlloc just like you would in a normal C++ program.
    I don't think I remember anything else,
    Brad Turpin
    Product Support Engineer
    National Instruments

  • A confusing lev-mar error

    I am trying to fit a Lorentzian to some acquired data using the lev-mar function, and it returns the error "wrong model equation". I know for a fact that the data has a lorentzian shape because I wrote a little vi to fit it manually using the exact same equation. Does anyone have a suggestion as to what to do next, or at least what the "wrong model equation" error really means? Thank you.
    JPC

    The error refers to a syntax issue with the "model description" input.
    This input is a cluster of three strings: model, which is the actual equation (Ex: a+b*x+c*x^2); paramters, which are the solvable variables (a, b, & c in the previous ex.) inputted as an array of strings; and the independent variable (x).
    All 3 parts of the model must match exactly (e.g. you can't have 3 variables in the model and 1 in the parameters, and if you designate x as the independent variable, there must be an x in the model equation).
    Additionally, the model equation follows standard LabVIEW formula node syntax, except there are no input variables designated ("y=x+1" won't work but "x+1" will) and you don't need a semi-colon terminator.
    Let me know how it goes,
    ~j5
    2006 Ultimate LabVIEW G-eek.

  • Please help on this Lev-Mar problem

    Hi,
    I have two acquisition data sources that need
    to be fitted. Then the fitted parameters are
    passed along with data for further processing.
    As the data is heardware generated, I made a
    similar 'signal generator' to present very closely
    the problem.
    ===Please see the attached vi file===
    As you can see, these two Lev-Mar's function
    / derivatives are obviously different. We can edit
    the fuction / derivative node. But the problem
    is that when one is edited, the other changes too.
    Anyways, we can NOT have two different functions.
    My question is: How to have two different function
    / Deveritives here?
    By the way, how to replace the MatLab box into
    function node in my attached example?
    I can 'wire' the out
    put to next if it's a
    function node. It says the type of variables are
    different (output is a real instead of array).
    Attachments:
    Lev-Mar-Question2.vi ‏99 KB

    You have a few options for multiple function/derivatives.
    1. If you can express the model functions using the formula string syntax, then you might consider using the "Levenberg Marquardt.vi". Unfortunately the Levenberg-Marquardt.vi does not allow the specification of the derivative of the model function and always uses numerical derivatives. It is also somewhat slower than the "Nonlinear Lev-Mar Fit.vi".
    2. You could also save a copy of the "Nonlinear Lev-Mar Fit.vi" using a different name, and also the "Lev-Mar ABX.vi" and "Target Fnc & Deriv Nonlin.vi" with different names. Then you would have a different set of VIs to implement the curve fitting on two different models. This is ugly, but would work.
    3. You could modify the "Nonlinear Lev-Mar
    Fit.vi", "Lev-Mar ABX.vi", and "Target Fnc & Deriv Nonlin.vi" to accept/pass VI references. The "Target Fnc & Deriv Nonlin.vi" would then perform a call by reference to a VI that you wrote implementing the current model function.
    To replace the Matlab script node place the formula node inside a for-loop. The for-loop will auto-index the x and t arrays, and auto-build the y-array.

  • Lev-Mar template missing

    I am trying to fit A*sin(w*t+phi) to some noisy data (amplitude, frequency, and phase are all to be detrmined from the matched sine). When I looked at the Lev-Mar fitting VIs I could not locate the template for the LM model function and gradient VI template mentioned in the Help file. labview\vi.lib\gmath\opti.llb\numerical is empty. (Help says this template should be there). The figure in the help file shows a cluster called Output Control as an input to the VI, but does not specify the elements of the control. I also could not find a way to put the formula into the String Formula version. Is there a listing of the available functions and syntax? The help did not seem to lead me to it.
    LV8.0.1 on Mac OS X
    Maybe it is just too late on Friday afternoon.
    Lynn

    Sarah, Christian,
    I had looked at that link and several others. I was hoping to find some reference where someone had made some practical suggestions reagrding optimizing the initial guesses, or at least some clues as to how to go about it.
    My data has a frequency range of about 2.5:1 so I was hoping I could just set the initial guess at the middle of the range. In my testing an initial guess 20% above or below the actual frequency resultis in erroneous values about 80-90% of runs with noise at 10% of signal amplitude which is better than the real data. With initial amplitude and phase equal to the data parameters and initial frequency guess at 1.2 times the actual I recorded two runs with the fit frequency at 99.9%. Eight others produced: 160%, 180%, 210%, 160%, 160%, 130%, 60%, and 160%. With the initial frequency at 80%, the results were somewhat worse.
    My suspicion is that because the partial derivatives of the model equation are also sines and cosines, the algorithm tends to find some kind of local minimum and converges to that even though it is a really poor fit.
    Here is my modified Lev-mar VI and the simple sine model VI (LV8). The default values are fairly typical of the data sets we will be getting.
    Thanks for the help.
    Lynn
    Attachments:
    Nonlinear Fit Lev-Mar.Berry.vi ‏41 KB
    simple sine model.vi ‏21 KB

  • Lev mar parameter min value

    When I use the Lev Mar curve fit, I get an error that says at least one of my input parameters is NaN or Inf.  There is a place in my fitting equation where I divide by the parameter and take the square root, so if it was either zero or negative, this would not work.
    Is there a way that I could force Lev Mar to not choose values of 1 or zero for this parameter?  My initial guess is very small (on the order of 10^-4), but this parameter is time, so it should not be negative or zero anyways.

    What is your LabVIEW version? The function has been renamed to "nonlinear curve fit" many versions ago.
    There is a constrained nonlinear curve fit that lets you set parameter bounds. Use that instead.
    Can you show us your code and some typical data? If you calculate the model with your paramter guesses, does it look anything like the data?
    LabVIEW Champion . Do more with less code and in less time .

  • Curvefit of the reflectivi​ty with Lev-Mar

    Hello,
    I am a beginner with Labview and I need your help, I recuper the data of the reflectivity from the spectrometer (3648 points) and I am going to make the fitting to extract information about the thickness and refractive indices n and k (k in the general case it will be zero because the materials used are oxides and I work in the visible range.
    I want to use the model of Lev-Mar but I have the problem with the model, i have used the formula node to write the eqaution of the reflectivity, and currently I am block.
    Data.txt
    column1 = Lambda
    column 2 : Reflectivity
    the substrate is Pyrex  ; n= 1,47
    the thin film is Ti-Nb, the index is like that of the titane(Antase) : ñ = 2,561 + i2,488
    Thank you very much.
    Nb: i know my english is so bad
    Attachments:
    fit1.png ‏36 KB
    fit2.png ‏30 KB
    Data.txt ‏51 KB

    Thank you very much Lynn,
    I did what you told me to do and it works a better,
    I would like to know if you can help me, I have the values of the reflectivity R as a function of the wavelength (lambda) but the indices " n "  and " k " are also a function of lambda.
    R = (n,k,d,lambda )   and  the dispersion equation n(lambda) and k(lambda)
    With the curvefit Lev-Mar is possible to define these parameter ? if you have ideas that will be cool

  • Gaussian fitting

    Hi
    I am running an experiement where I calculate the power spectrum of a signal and then fit a Gaussian to the Power Spectrum in order to measure a peak.
    When I use labview to fit to my data, I get a peak with the correct centre, but an overly large standard deviation.
    If I analyse the same data in Origin Lab, I am able to fit a very good Gaussian with low R^2 value. 
    Attached is an exmple of my data. 
    I would appreciate any suggestions as to how to get labview to perform a better fit.
    Attachments:
    Graph1.jpg ‏901 KB

    AlexMalm wrote:
    Here is the code attached. 
    We are missing a subVI.
    Anyway, my guess was right. Why in the world would you use an inner subVI of the plain Gaussian Fit tool from the palette?? As you can easily tell, the one you are using cannot fit for an offset, but you data clearly shows a baseline that is not zero!
    Use the real Gaussian Fit from the fitting palette and follow my recommendations in my earlier post. Simple as that!
    LabVIEW Champion . Do more with less code and in less time .

  • Question about the accuracy of the Gaussian Fit

    Hi all,
    I was having some doubts on the accuracy of the gaussian fit performed by LabVIEW and implemented the code in attachment to test it.
    I made a distribution and made a Gaussian fit to it and extracted the average and standard deviation.
    Then, I used the same distribution and padded it with zeros to the left and right and did a gaussian fit to the overall distribution.
    I was expecting the average to change but the standard deviation to be the same, since the difference in the distribution are the zeros...
    The thing is that neither the average (the average is a fractional value) nor the standard deviation are the expected.
    Any hints on why this may be happening?
    Thank you very much in advance!
    Best regards.
    Attachments:
    gauss_fit_test.zip ‏17 KB

    Your data is NOT a Gaussian and fitting it to a Gaussian is thus completely meaningless. As Lynn said, the lower graph adds a sigificant amount of zeros to the dataset and thus will bias the fit.
    You can do a "not_equal_zero...boolean_to_0,1" on the y data and wire it to the weight to disregard all zero values. Now you get the same result.
    You should actually change the parameter bounds to allow for a fit of the offset, and you'll see that the upper graph will have a lower offset (offset=-3.6) compared to the lower graph (offset=-0.5). Since you are forcing the offset to be zero, the fit will compensate by changing the width.
    What are you actually trying to achieve with this exercise? If this simulation is similar to your real data, maybe you should fit it to a triangle function instead. If you just want to calculate the mean and standard deviation of the data, use the classic statistics tools. Does this represent a histogram of some data?
    LabVIEW Champion . Do more with less code and in less time .

  • How to log input parameters for Function Modules?

    Hi,
    I need to create a Logging system to trace input parameters for function modules.
    The log functionality could be done by developing a class method or a function module (For example 'write_log'), and calling it within each function module that I want to log. The 'write_log' code should be independent from the interface of the Function Module that I want to log.
    For example, I'd like to write a function/class method that can log both these functions modules:
    Function DummyA
       Input parameters: A1 type char10, A2 type char10.
    Function DummyB
       Input parameters: B1 type char20, B2 type char20, B3 type char20, B4 type Z_MYSTRUCTURE
    Now the questions...
    - Is there a "standard SAP" function that provide this functionality?
    - If not, is there a system variable in which I can access runtime all parameters name, type and value for a particular function module?
    - If not, how can I loop at Input parameters in a way that is independent from the function module interface?
    Thank you in advance for helping!

    check this sample code. here i am capturing only parameters (import) values. you can extend this to capture tables, changin, etc.
    FUNCTION y_test_fm.
    *"*"Local Interface:
    *"  IMPORTING
    *"     REFERENCE(PARAM1) TYPE  CHAR10
    *"     REFERENCE(PARAM2) TYPE  CHAR10
    *"     REFERENCE(PARAM3) TYPE  CHAR10
      DATA: ep TYPE STANDARD TABLE OF rsexp ,
            ip TYPE STANDARD TABLE OF rsimp ,
            tp TYPE STANDARD TABLE OF rstbl ,
            el TYPE STANDARD TABLE OF rsexc ,
            vals TYPE tihttpnvp ,
            wa_vals TYPE ihttpnvp ,
            wa_ip TYPE rsimp .
      FIELD-SYMBOLS: <temp> TYPE ANY .
      CALL FUNCTION 'FUNCTION_IMPORT_INTERFACE'
        EXPORTING
          funcname                 = 'Y_TEST_FM'
    *   INACTIVE_VERSION         = ' '
    *   WITH_ENHANCEMENTS        = 'X'
    *   IGNORE_SWITCHES          = ' '
    * IMPORTING
    *   GLOBAL_FLAG              =
    *   REMOTE_CALL              =
    *   UPDATE_TASK              =
    *   EXCEPTION_CLASSES        =
        TABLES
          exception_list           = el
          export_parameter         = ep
          import_parameter         = ip
    *   CHANGING_PARAMETER       =
          tables_parameter         = tp
    *   P_DOCU                   =
    *   ENHA_EXP_PARAMETER       =
    *   ENHA_IMP_PARAMETER       =
    *   ENHA_CHA_PARAMETER       =
    *   ENHA_TBL_PARAMETER       =
    *   ENHA_DOCU                =
       EXCEPTIONS
         error_message            = 1
         function_not_found       = 2
         invalid_name             = 3
         OTHERS                   = 4
      IF sy-subrc = 0.
        LOOP AT ip INTO wa_ip .
          MOVE: wa_ip-parameter TO wa_vals-name .
          ASSIGN (wa_vals-name) TO <temp> .
          IF <temp> IS ASSIGNED .
            wa_vals-value = <temp> .
          ENDIF .
          APPEND wa_vals TO vals .
        ENDLOOP .
      ENDIF.
    ENDFUNCTION.

Maybe you are looking for

  • How do I get a gift card balance in iTunes to apply to the App Store on the ipad?

    I entered a gift card into iTunes and still have a remaining balance. I want to know how to apply this balance towards the purchase of apps in the App Store.

  • Still in a quandary about hardware specs. What do you think?

    I need to build a new system as editing machine for CS4. Everything is more or less clear as to what I need, there are only two issues remaining: 1. How much RAM to install, and 2. Disk setup. As always there is the balance between performance and co

  • Problem with special characters loaded from XML

    I have an XML whose elements contain special characters (for example: ñ, Ñ, á, Á, etc..), When I load the XML and make a Trace () the loaded element, I see that it is loaded correctly, but then in the text field is not special characters. For example

  • Mobile Me Settings on Ipod Touch

    I have successfully synched my calendar and contacts on my mobile web account. I have downloaded same to my Ipod Touch. However, I do not seem to be able to get Mobile.Me to synch to the Ipod Touch. I am connected to a wi-fi network. When I try to go

  • Collection in dba advisor tables

    I have an Oracle 10g R2, I have been looking into tables dba_advisor tables example dba_advisor_actions and dba_advisor_tasks. But what I don't seem to understand is that I see can a hurdle of problems being identified at one specific time, example A