generating periodic trapezoidal waves with ramps

83 vues (au cours des 30 derniers jours)
Tae Lim
Tae Lim le 7 Déc 2020
Réponse apportée : Paul le 5 Oct 2024
Hello,
I want to generate a periodic trapezoidal wave that has 'ramps' on both sides of the wave structure. I was able to generate square waves that does not have ramps using the following codes.
Pwr_avg = 200; % [W] average input power
nu_p = 2e3; % [Hz]=[1/s] pulse repetition frequency
tau_p = 1/nu_p; % [s] pulsed period
f_DC = 0.15; % [%] duty cycle (=fraction of the pulsed period power is on)
tau_on = tau_p * f_DC; % [s] length of time power is on during each pulsed period
tau_ramp = 1e-6; % [s] ramp up/down time
Pwr_max = Pwr_avg * (tau_p/tau_on); % [W] maximum power during the pulsed period during 0<t<=tau_on
Pwr_min = 1e-4; % [W] arbitrary small value during the 'off' period
d = tau_on/2:tau_p:t_max;
Pwr = Pwr_max * pulstran(t_array,d,'rectpuls',tau_on); % generate periodic power input
Pwr(Pwr==0) = Pwr_min; % assign arbitrary small power input during 'off' period
Pwr = Pwr / (pi*r_cyl^2*l_cyl) * 1e3; % [mW/cm3] input power array
The code above use pulse train function to generate periodic structure, which is used to simulate pulsed power. The absolute zero values for the power is not ideal for my application, so I assigned arbitrary small value when the power is 'off'.
Here, I would like to introduce a ramp up/down time as the power increases from zero, and decreases back to zero. So the pulsed waveform will become trapezoid that has steep ramps. I would like to know how to add ramps on this square wave or if Matlab already has inherent function I can use.
Thank you for your time
  1 commentaire
Mathieu NOE
Mathieu NOE le 7 Déc 2020
hello
I do not see the trapezoidal signal as being part of the available options in
several options :
implement a rate limiter like described in :
or apply a first order low pass filter (not truly a trapezoidal shape though)

Connectez-vous pour commenter.

Réponses (3)

Amrtanshu Raj
Amrtanshu Raj le 23 Déc 2020
Hi,
The pulstran function allows you to input custom function handles to generate custom waveforms. You can use this equation to create a trapezoidal wave and pass it to pulstran function to get the trapezoidal waveform and then tune it as per need.
%equation
a = 10 %Amplitude
m = 5 %Time Period
l = 5 %Horizontal Spread
c = 2 %Vertical Spread
x = 0:.1:10 %Sample Points
Trapezoidal_Wave = a/pi*(asin(sin((pi/m)*x+l))+acos(cos((pi/m)*x+l)))-a/2+c;
  1 commentaire
Christian Adumatta Gyampomah
This is beautiful, compact and helpful! Thanks!

Connectez-vous pour commenter.


Duncan Carlsmith
Duncan Carlsmith le 5 Oct 2024
%pulsetran returns a vector. Here is an analytic method i just put together:
%Create an analytic trapzoidal pulse train.
syms y x a b c d e
y=heaviside(x-a)-heaviside(x-b)-1*heaviside(x-c)...
+heaviside(x-d);
vars=[a,b,c,d,e];
vals=[1,2,3,4,5];
yFunc=matlabFunction(int(subs(y,vars,vals),x));
figure
t=[0:.01:25];
z=yFunc(rem(t,5));
plot(t,z)
xlabel('t');ylabel('z')

Paul
Paul le 5 Oct 2024
Approach using pulstran
trap = @(t) interp1([0 1 2 3 4 5],[0 0 1 1 0 0],t,[],0);
t = 0:.01:25;
d = 0:5:25;
plot(t,pulstran(t,d,trap))
ylim padded

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by