Search code examples
matlabgaussianpulse

How to 'break' a Gaussian pulse into discrete parts in Matlab


I need to break down a continuous Gaussian pulse into 50 discrete parts so I can use each of the 50 individual amplitudes in calculations. Here is what I've tried:

% Gauss pulse discretisation
tg = 20*10^(-3);         % pulse duration [sec]
B1 = 1;                  % max amplitude [muT]
t  = -tg/2:tg/50:tg/2;   % sampling times
sd = 0.25;               % pulse standard deviation
% pulse shape
p  = B1*exp(-((t-tg/2).^2)/(2*sd.^2));
plot(t,p);

However, the plot looks nothing like a Gaussian pulse of 20ms in duration! Is there a problem with how the sampling time is defined? For example if the sampling time is defined as

t  = -1:tg/50:1

then the pulse does look like a Gaussian but it is broken down in 5001 parts. Could someone please point me in the right direction?


Solution

  • In order for your Gaussian to look like a Gaussian when you plot it, you need to make sure that you: (1) sample it around it's center, (2) your sampling interval is much smaller than the standard deviation (SD), and (3) you sample at least 2 or 3 SDs to each side, so you can see the decay. So in your example, since the Gaussian is centered around tg\2, and since your SD is sd = 0.25 (btw the SD sets the pulse duration, not tg), extend the sampling interval, using the SD as a measure (and not tg), and move it so it is centered around the mean. It is easier to do all this using linspace:

    t = linspace(-3*sd, 3*sd, 50) + tg\2;
    

    If you further want a 20msec pulse duration, make sd in the order of 20msec, and not tg. Also note that "duration" is really a matter of definition for a Gaussian, as it extends to +- infinity. You have to define something like "pulse duration is from -2 SDs to +2 SDs", which means the effective pulse duration is defined according to how much the tail decayed.

    % Gauss pulse discretisation
    tg = 0;         % pulse center [sec]
    B1 = 1;         % max amplitude [muT]
    sd = .5*20*10^(-3);% half the pulse duration (msec)
    t  = tg/2 + linspace(-3*sd,3*sd,50);  
    % pulse shape
    p  = B1*exp(-((t-tg/2).^2)/(2*sd.^2));
    plot(t,p,'.-');
    

    Gaussian