如何在多个采样率下计算阶跃响应和脉冲响应

信息处理 matlab 卷积 冲动反应
2022-01-30 06:56:02

我正在为一个基本概念而苦苦挣扎。假设我有一个系统y(t)=eatu(t)x(t)我想使用 Matlab conv() 函数以不同的采样率绘制脉冲响应和阶跃响应。我很难理解我应该应用什么增益以及为什么。我试过:

a = 0.05;
cutoffTime = 250;
T = 1/samplingRates(i);  %assume this is defined somewhere [1, 10, 20]
timeRange = 0:T:cutoffTime;
step = ones(1, length(timeRange));
impulse = zeros(1, length(timeRange));
impulse(1) = 1;
exponential = exp(-a*timeRange);
stepResponse = conv(exponential, step, 'full');  
impulseResponse = conv(exponential, step, 'full');

我知道数学上的采样被建模为脉冲序列的乘法,它引入了增益1/T到离散系统。所以重建滤波器需要 T 的增益。在上面的代码中,对于不同的采样率(比如 1、10、20 个样本/秒),如果我不将 T 的增益应用于阶跃响应,我会得到不同大小的阶跃响应。但是,如果我将增益 T 应用于脉冲响应,我不会得到我期望的所有 3 个采样率的脉冲响应。谁能澄清我在实施中哪里出错了?

谢谢你。

2个回答

要谈论增益,您必须能够比较离散函数和连续函数的RMS 值,并且如果您选择一种连接离散信号点的方法,离散函数将只有一个 RMS 值R2. 我们可以使用矩形,因为大多数 DAC 在采样之间保持电压恒定,并且在采样率趋于无穷大时它会收敛到函数的极限。

然后是您的一组点的 RMS 值{x1,x2,...,xn}将是您的总和的平方根xi2乘以矩形底边的长度1/fs除以区间的总长度n/fs

xRMS=1ni=0nxi2

另一方面,连续信号的 RMS 值,计算平方函数的面积除以区间的长度,并考虑区间的开始是t=0是(谁)给的

fRMS=1t0t[f(t)]2dt

因此,您必须找到一个使增益为 0 的归一化常数。这意味着:

0=ln(αxRMSfRMS)αxRMSfRMS=1fRMSxRMS=α

在哪里α是你的归一化常数,正如你所看到的,它取决于所涉及的函数。但是,重要的是要注意,对于相同的时间间隔,xRMS如果采样率发生变化,可能会发生变化,因此归一化值(如果存在,因为 f 可能无法在所选区间内积分)可能取决于采样率,随着采样率的增加趋于接近 1。大多数函数的归一化常数实际上取决于所选的区间,因此从归一化常数的角度考虑只是一个近似值。特别是计算滤波器的增益并不是一个简单的问题,而且在许多情况下增益取决于频率,因此您选择一个特定的频率来估计滤波器的增益。

您说回复不是您所期望的,但也许提供更多关于您所期望和获得什么的详细信息将使我们能够为您提供更好的答案。

同样在您的代码中,您对脉冲响应和阶跃响应都使用了阶跃函数,并且您的脉冲响应只有零。您必须将一个值设置为 1。

还要记住,在分析滤波器的脉冲和阶跃响应时,通常的做法是使用采样周期作为时间单位而不是秒,然后频率响应的单位将是采样频率,以便您对滤波器的响应有更一般的了解。

希望这可以帮助。DP

这不是您想要的完整答案,但问题是您无法置换采样和卷积。让我们说D()运算符接受一个连续信号并返回其采样版本。你正在做的是

y(n)=D(eatu(t))D(x(t))

你想要得到的是

D(y(t))=D(eatu(t)x(t))y(n).

通常不可能做你想做的事情,但我确信存在很好的近似值。我不是它们是什么或如何使用它们的专家。