生成无限脉冲阵列(Matlab)
Generating infinite array of pulses (Matlab)
I am trying to generate an infinite array of pulses (in this case hyperbolic secant pulses) in Matlab as in this figure.
尝试:
所以,我想绘制时域中的实际脉冲序列,以及它在傅立叶域中的频谱(使用 fft
)。当我定义时间轴和频率轴时:
t = [-tspan : dt : tspan];
w = [-1/dt : 1/tspan : 1/dt]
如果我用 inf
代替时间网格的跨度,我将超过最大变量数并出现错误。那么,我怎样才能生成这个无限数组
给定函数的脉冲数(比如 u(t)=sech(t/a)
)?
您不能通过存储每个时间点的振幅来明确表示一组无限的脉冲,因为这需要无限的内存。相反,您可以定义一个函数 f(t)
,该函数 returns 时间点 t
处的脉冲串幅度。您可以将 f
视为隐式定义无限脉冲串。要绘制它,只需选择您的时间限制并在这些范围内的某些点评估 f(t)
。
对于频谱,您有两种选择。一种是通过分析推导它。在这种情况下,您将定义一个函数 F(w)
,它 returns 频率为 'w' 的频谱值。您同样可以将其视为无限并以相同的方式绘制它。
另一种选择是用数字计算光谱。在这种情况下,您将生成 f(t)
的样本。确保您的采样率高于奈奎斯特频率。然后,使用一些函数来计算采样信号的频谱。通常,这是一个近似值,因为您的采样信号只能具有有限长度。随着长度变短,近似值变得不太准确。此外,频谱中可能存在伪影,表示采样信号 beginning/end 处的不连续性,但不反映 'true' 信号。有两种一般方法可以缓解这些问题:1) 使用长采样信号(但显然它不能无限长)。 2) 使用 window 函数,减少边缘效应。对于像您这样的周期性信号,采样区域应跨越整数个周期。
I am trying to generate an infinite array of pulses (in this case hyperbolic secant pulses) in Matlab as in this figure.
尝试:
所以,我想绘制时域中的实际脉冲序列,以及它在傅立叶域中的频谱(使用 fft
)。当我定义时间轴和频率轴时:
t = [-tspan : dt : tspan];
w = [-1/dt : 1/tspan : 1/dt]
如果我用 inf
代替时间网格的跨度,我将超过最大变量数并出现错误。那么,我怎样才能生成这个无限数组
给定函数的脉冲数(比如 u(t)=sech(t/a)
)?
您不能通过存储每个时间点的振幅来明确表示一组无限的脉冲,因为这需要无限的内存。相反,您可以定义一个函数 f(t)
,该函数 returns 时间点 t
处的脉冲串幅度。您可以将 f
视为隐式定义无限脉冲串。要绘制它,只需选择您的时间限制并在这些范围内的某些点评估 f(t)
。
对于频谱,您有两种选择。一种是通过分析推导它。在这种情况下,您将定义一个函数 F(w)
,它 returns 频率为 'w' 的频谱值。您同样可以将其视为无限并以相同的方式绘制它。
另一种选择是用数字计算光谱。在这种情况下,您将生成 f(t)
的样本。确保您的采样率高于奈奎斯特频率。然后,使用一些函数来计算采样信号的频谱。通常,这是一个近似值,因为您的采样信号只能具有有限长度。随着长度变短,近似值变得不太准确。此外,频谱中可能存在伪影,表示采样信号 beginning/end 处的不连续性,但不反映 'true' 信号。有两种一般方法可以缓解这些问题:1) 使用长采样信号(但显然它不能无限长)。 2) 使用 window 函数,减少边缘效应。对于像您这样的周期性信号,采样区域应跨越整数个周期。