如何在 Matlab 中 'break' 将高斯脉冲转换为离散部分

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

我需要将一个连续的 Gaussian 脉冲分解为 50 discrete parts,这样我就可以在计算中使用 50 个单独的振幅中的每一个。这是我尝试过的:

% 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);

然而,情节看起来一点也不像 20ms in duration 的高斯脉冲! sampling time 的定义有问题吗?例如,如果 sampling time 定义为

t  = -1:tg/50:1

那么脉冲看起来确实像高斯分布,但它被分解成 5001 个部分。有人可以指出我正确的方向吗?

为了让您的高斯分布在绘制时看起来像高斯分布,您需要确保:(1) 围绕它的中心对其进行采样,(2) 您的采样间隔远小于标准差(SD),以及 (3) 您在每侧至少采样 2 或 3 个 SD,因此您可以看到衰减。因此,在您的示例中,由于高斯以 tg 为中心,并且由于您的 SD 为 sd = 0.25(顺便说一句,SD 设置脉冲持续时间,而不是 tg),因此延长采样间隔,使用SD 作为衡量标准(而不是 tg),然后移动它,使其以平均值为中心。使用 linspace 更容易完成所有这些操作:

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

如果您还想要 20 毫秒的脉冲持续时间,请按 20 毫秒的顺序设置 sd,而不是 tg。另请注意,"duration" 实际上是高斯分布的定义问题,因为它延伸到 +- 无穷大。您必须定义类似 "pulse duration is from -2 SDs to +2 SDs" 的内容,这意味着有效脉冲持续时间根据尾巴衰减的程度来定义。

% 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,'.-');