MATLAB: From squared signal to sine form

arrayarraysMATLABsignalsimulink

I am working on a project with a robot arm. We made a pathplot with an array in matlab and then integrated this in the simulink model with a "from workspace" block. The problem is that the robot will see squared signals as needing to have a infinit high speed. Therefore, the signal should be rounded off a bit. So it has to get to the value that we gave in in the array but i has to go in a normal speed. Is there a simple way to get this done? Or at least another way than adding a lot of little steps in between?
Thanks!

Best Answer

  • If the parameters of your square wave are known (amp, phase, frequency, shift), you can probably generate the sine wave directly which would be your best bet.
    Another approach is to smooth the sine wave with a Gaussian weighted moving average. That can be done with smoothdata() (r2017a or later).
    % Produce & plot an arbitrary square wave
    x = -4*pi : .01 : 4*pi;
    sq = ((sin(2*x+4) >=0) - 0.5) * 4;
    plot(x,sq)
    ylim([-4,4])
    % Smooth it with Gaus moving avg
    B = smoothdata(sq,'gaussian');
    % Show smoothed curve
    hold on
    plot(x,B,'r-')