Pulstran function to generate biphasic pulses

6 ビュー (過去 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!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeWaveform Generation についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by