필터 지우기
필터 지우기

Pulstran function to generate biphasic pulses

조회 수: 3 (최근 30일)
Marina Babic
Marina Babic 2024년 6월 3일
댓글: Marina Babic 2024년 6월 3일
How can I correct following code to get pulses like on the picture? I don't get correct shape of pulses.
Parameters: N = 400 (number of pulses), Tp = 1 (pulse width), d1 = 1 (interphase delay [us]), d2 = 1 (interpulse delay [us]). Let's say the U0=1V. It should look like this:
number_of_points_on_interval = 1000;
t = linspace(0, 1.6, 10000);
Tp = 0.001; %pulse width [ms]
d1 = 0.001; %interphase delay [ms]
d2 = 0.001; %interpulse delay [ms]
dPos = 0.001:(d1+Tp+d2):1.6; % times when positive pulses start
dNeg = dPos + Tp + 0.001; % times when negative pulses start
dT = [dPos dNeg]'; % times of pulses
% Amplitude of positive and negative pulses
U=1;
dAmp = [U*ones(numel(dPos),1); -1 * U*ones(numel(dNeg),1)];
% generating a signal with rectangular pulses
y = pulstran(t,[dT dAmp],'rectpuls',Tp);
plot(t,y)
ylim padded

답변 (1개)

Mathieu NOE
Mathieu NOE 2024년 6월 3일
hello
have to admit I almost never used pulstran yet , so I simply prefer to come back to a very simple solution with repmat if that suffice for the job
NB that to test the code I reduced the final time for the plot - simply put back t_final = 1.6 on your side
also I changed interpulse from 1 to 3 ms just to check the code - here also change back to your own settings
t_final = 1.6/50; % <= put back t_final = 1.6 on your side
dt = 1e-4;
t = (0:dt:t_final);
Tp = 0.001; %pulse width [ms]
d1 = 0.001; %interphase delay [ms]
d2 = 0.003; %interpulse delay [ms]
% Amplitude of positive and negative pulses
U=1;
% d2 period (zero amplitude)
t1 = (0:dt:d2-dt);
y1 = zeros(size(t1));
% pos pulse (+1 amplitude)
t2 = t1(end) + (dt:dt:Tp);
y2 = U*ones(size(t2));
% interphase (zero amplitude)
t3 = t2(end) + (dt:dt:d1);
y3 = zeros(size(t3));
% neg pulse (-1 amplitude)
t4 = t3(end) + (dt:dt:Tp);
y4 = -U*ones(size(t4));
dT = [t1 t2 t3 t4]'; % times of pulses
dAmp = [y1 y2 y3 y4]';
% how many cycles do we need to repeat the pattern ?
repet = fix(t_final/t4(end));
y = repmat(dAmp,repet,1);
t = dt*(0:numel(y)-1);
% generating a signal with rectangular pulses
plot(t,y)
% ylim padded
  댓글 수: 5
Mathieu NOE
Mathieu NOE 2024년 6월 3일
ok - maybe it's because it's monday .... I was slow to understand your comment
now , you simply pass t as argument to my newly created function and there you go ...
t_final = 1.6/40;
dt = 1e-4;
t = (0:dt:t_final);
% generating a signal with rectangular pulses
y = mypulsetrain(t);
plot(t,y)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y = mypulsetrain(t)
dt = mean(diff(t));
t_final = t(end);
Tp = 0.001; %pulse width [ms]
d1 = 0.001; %interphase delay [ms]
d2 = 0.003; %interpulse delay [ms]
% Amplitude of positive and negative pulses
U=1;
% d2 period (zero amplitude)
t1 = (0:dt:d2-dt);
y1 = zeros(size(t1));
% pos pulse (+1 amplitude)
t2 = t1(end) + (dt:dt:Tp);
y2 = U*ones(size(t2));
% interphase (zero amplitude)
t3 = t2(end) + (dt:dt:d1);
y3 = zeros(size(t3));
% neg pulse (-1 amplitude)
t4 = t3(end) + (dt:dt:Tp);
y4 = -U*ones(size(t4));
dT = [t1 t2 t3 t4]'; % times of pulses
dAmp = [y1 y2 y3 y4]';
% how many cycles do we need to repeat the pattern ?
repet = fix(t_final/t4(end));
y = repmat(dAmp,repet,1);
% padd y with zeros to match t length
p = numel(t) - numel(y);
y = [y;zeros(p,1)];
end
Marina Babic
Marina Babic 2024년 6월 3일
Thank you for your effort! Sadly I am not able to use this code successfully with my alredy written (second part of) code:( on it's own, it works but when combined with other part of code, it gives me an error for the repmat. I've tried to fix but error isn't going. Anyway I very much appreciate the time and help from you!

댓글을 달려면 로그인하십시오.

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by