I would like to know how to shift a signal in Simulink. The case is I am using PWM generator(DC-DC) and the input D is from a lookup table,a sine wave. From the PWM generator block i am taking the pulses i want(a sine PWM). However, because of having two mosfets i need second pulses signal which should be shifted like when the first pulse in the first signal finish, the first pulse of the second signal will start. I think the real issue here is this: the Duty cycle is changing for each pulse so each pulse should be shifted with different time.

The shifting i want is described in the image. The the magnitudes of D's are forming a sine wave. For example if i have 5 pulses(so D1,D2,D3,D4,D5), the variation of D's will be like D1=0.1, D2=0.2, D3=0.3, D4=0.2 and D5=0.1 ( the numbers are just for example) So the i need to have shift every pulses according to their own width(Duty cycle)

• One thing that comes to mind is some sort of falling-edge-trigger thing triggered off the first signal, but I haven't the faintest idea how to go about actually doing that... – Hearth May 21 '18 at 4:22
• How can we do this delay operation by coding in matlab?? Where the delay increases by say 2ms every pulse cycle? – Cyrus Nov 3 '20 at 10:46

There are many ways to solve this and the optimum solution will be specific to other details of your model.

Initially try the transport delay block: https://uk.mathworks.com/help/simulink/slref/transportdelay.html

Transport delay icon

There is also variable transport delays, unit delays or even constructing more elaborate delay mechanisms via integrators and comparison blocks

• Thanks for answer, but i have already tried those blocks. However the output pulses became like triangular shape not rectangular pulses – Gökhan May 20 '18 at 23:52
• That's a simulation setting issue not a transport delay issue. By any chance is the donation continuous with a refinement factor of 1 – JonRB May 21 '18 at 5:51
• Like i wrote down up, i need to shift the every pulses by their own width and every pulse has different(a sine variation, 0 to Dmax to 0 again) width due to being sine PWM. I also tried to use "variable time delay, variable transport delay" but i failed again – Gökhan Jun 5 '18 at 14:39
• @user391130 could you share a stripdown model. What you describe I do all the time and part of it does sound like a simulation setting issue. Transport delay is all you need. Variable as well due to dependant on the "present" pulse width. However. When does it start? Because 100% duty could result in a very large buffer... What bounds do you have that can be exploited – JonRB Jun 5 '18 at 17:17
• I edit my problem to make clearer about my problem. In the pulses, the max Duty Cycle is less then 50% – Gökhan Jun 12 '18 at 7:43

You should use Discrete Variable Time Delay block as shown in the following example,

And the result,

You can adjust the phase shift from the constant (0.5 s in the example).

• Actually it is not my desire. Because i need to shift the every pulses by their own width and every pulse has different(a sine variation, 0 to Dmax to 0 again) width due to being sine PWM. – Gökhan Jun 5 '18 at 14:37