如何在没有 DSP 工具箱的情况下设计窄带通滤波器

信息处理 matlab 信号分析 带通
2022-02-03 02:37:07

我有两个信号 X 和 Y。这些是接近传感器读取测量旋转轴的振动。现在我想为这些信号绘制轨道图。我可以只用 X 和 Y 绘制未过滤的轨道。但是由于信号中有很多噪声,我对其进行了过滤。现在有占主导地位的 1X 频率分量,并且可能是其他子频率分量。我想绘制 1X 的滤波轨道,比如 656 Hz。我使用的采样频率是 1000000 Hz。我知道带通滤波器只能给我 1X 分量。但我没有 DSP 工具箱。有人可以帮助我如何在没有工具箱的情况下设计和实现窄带通滤波器。任何建议或提示或想法都会有所帮助。提前致谢。

4个回答

我将遵循的手工制作带通滤波器的步骤如下:

  1. 找出您希望滤波器的宽度(以赫兹为单位)。
  2. 创建一个低通滤波器,其一侧带宽为所需滤波器带宽的一半。您可以使用基本函数计算 sinc 函数,因为您可以通过调整 sinc 函数中的时间刻度来调整带宽。如果 n 是 -N 和 N (含)之间的所有整数的集合,并且您使滤波器抽头等于,则滤波器的归一化带宽将等于sinc(x)=sin(πx)πxsinc(bn)b
  3. 将低通滤波器调制到带通滤波器所需的中心频率。您可以通过将其与该频率的正弦波逐个元素相乘来做到这一点。

假设 2 MHz 采样率,只需简单地添加每 20 个样本,您就可以得到一个低通滤波器,它可以降低噪声,并且仍然可以让您恢复与 38K RPM 源信号相关的所有问题,自 100K 以来您可以成功应对这些问题保持奈奎斯特要求。

如果您想设计 IIR,请使用零极点放置方法。这就是人们在 dsp 工具箱出现之前使用的东西。

一个粗略的方法确实为单个频率设计一个 IIR 滤波器,如下所示:ω,0ω1

  • 将极点放置在将为该频率提供无限增益,因此将它们“稍微”移动到半径的内部,例如exp(±jπω)<1r

  • 处放置零以“保证”带通滤波器±1

  • 在单位圆上的其他位置放置零以增加衰减

  • 找出处的增益,它应该/应该是最高的,并补偿它ω

对于您的示例:

omega = 656/(1000000)/2;
r = 0.99;
b = conv([1 -1], [1 1]);
a = conv([1 -r*exp(j*pi*omega)],[1 -r*exp(-j*pi*omega)]);

将形成一个开始。考虑到 1X 频率相当低,您可以在一些较高频率处添加多个零:

zerof = 0.1; % Corresponding to 50000 Hz
b = conv(b, conv([1 -exp(j*pi*zerof)],[1 -exp(-j*pi*zerof)]));
zerof = 0.5; % Corresponding to 250000 Hz
b = conv(b, conv([1 -exp(j*pi*zerof)],[1 -exp(-j*pi*zerof)]));

以及所需频率的多个极点;

a = conv(a,a);

一旦你快乐了,你只需要弄清楚收益并补偿它。

对于 50000 Hz 及更高的频率,该滤波器具有大约 80 dB 的衰减(正如有人指出的那样,如果正确,采样频率确实很高)。