Plotting signal using MATLAB function

5 vues (au cours des 30 derniers jours)
shiva garaei
shiva garaei le 11 Août 2020
Commenté : Walter Roberson le 12 Août 2020
I have two signals, current and voltage. I want to plot Voltage signal with respect to Current sinal and finding the properties of the peak point in the plotted signal. To write the command I am using Matlab function, but it received this error:
"Function output 'y' cannot be an mxArray in this context. Consider preinitializing the output variable with a known type".
do you know how can I solve this problem?

Réponses (1)

Walter Roberson
Walter Roberson le 11 Août 2020
Arrgh! my browser ate my long reply explaining what you were doing wrong!
So I am going to skip all of that and tell you to just Not Do That. Instead use https://www.mathworks.com/help/simulink/slref/xygraph.html
  2 commentaires
shiva garaei
shiva garaei le 11 Août 2020
Thank you Walter :)
I tried before, but by using xy graph I can not use the final signal. For example, I want to find the peak point in the graph, there is no way to do it.
Walter Roberson
Walter Roberson le 12 Août 2020
"and outputs the data as a signal"
"The From Spreadsheet block interprets the first column as time. In this column, the time values must monotonically increase."
So you have a signal being generated. You cannot just go and examine all the data points to find out where the peak is. Well, sure in theory you could attach a scope or trace on the lines and read out from the buffer of the scope or trace. but those are Not Good Ideas.
https://www.mathworks.com/help/dsp/ref/maximum.html from DSP Toolbox has a running maximum with index -- though I cannot really tell what the index is going to be for the Running case.
https://www.mathworks.com/help/simulink/slref/minmaxrunningresettable.html has running min/max, but does not appear to try to record secondary values, and has no output that goes true when a new maximum is recognized.
I therefore suggest that if you are using discrete mode, that you use a few blocks, including two memory blocks, one for the current maximum Y and one for the X associated with the current maximum Y.
If you are using continuous mode then I am not sure that max is computable.
You could also consider using a simple MATLAB Function Block with X Y inputs and a couple of persistent variables, that emits current maximum Y and associated X; might be easier than putting it together with discrete blocks.
But remember since you are processing a signal, you can only talk about "maximum so far according to the simulation time you reached, except that I seem to remember there being a way to hook in behaviour at end of simulation that could do any post processing.
I keep wanting to load entire files or arrays in Simulink, and I keep having to remind myself that No, Simulink blocks are primarily intended for signals that evolve in time.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by