什么样的滤波器会有锯齿频率响应?

信息处理 过滤器 过滤器设计
2022-02-03 09:42:51

我想要一个复杂的 FIR 或 IIR 滤波器,其响应在频域中近似为锯齿波。这应该如何正式描述,我可以使用什么公式或算法来计算抽头?

这是我想要的幅度响应的草图(不是对实际滤波器的分析)。我认为相位响应并不重要。

4个回答

窗口设计很容易。从理想的零相位频率响应开始:

ω2π+12

它的傅里叶逆变换给出了理想的脉冲响应:

ππ(ω2π+12)eiωkdω=sin(πk)k+i(sin(πk)πk2cos(πk)k).

类似于sinc函数,实部sin(πk)k在处有一个非法除以零k=0其中极限值π应改为使用。对于其他整数k,实部为零。虚部也有类似的问题k=0,其极限为 0。取自 Rick 的答案,整数k,sin(πk)为零并且cos(πk)是 +1 或 -1。这简化了整数时的理想脉冲响应k到:

{πif k=0,i(1)kkotherwise.

如果滤波器实现为纯实数和纯虚数滤波器的总和,则纯实数滤波器只需将输入乘以常数即可。脉冲响应的虚部是反对称的,这可以节省成本。

要继续窗口设计,请选择一个窗口函数及其长度(等于滤波器抽头的数量)并将理想脉冲响应乘以它。这给出了滤波器的脉冲响应。窗口函数应该集中在k=0.

对于一般的滤波器设计,最小二乘法通常是一个好的开始。Olli Niemitalo 建议的窗口方法也很有用,但它不太灵活,因为您无法定义“不关心区域”(这对于处理所需响应中的不连续性很重要)。此外,使用最小二乘法,您可以添加一个加权函数,将某些频率区域标记为比其他频率区域更重要,从而使这些区域的近似误差更小。最后,使用最小二乘法,您不需要解析计算逆 DTFT,这在实践中并不总是可行的。

用于最小二乘设计(无加权)的简单 Matlab/Octave 脚本如下所示(注意我假设线性期望相位响应):

N = 101; % 选择一些过滤器长度
w = 2*pi*linspace(-.45,.45,200); 不关心区域的频率网格百分比
d = (.5+w/(2*pi)).*exp(-1i*w*(N-1)/2); % 期望响应(线性相位)
A = exp(-1i*w(:)*(0:N-1)); % 超定系统矩阵 A*h=d
h = A\d(:); % 最小二乘解
% 绘图设计的频率响应
wp = linspace(-pi,pi,512);
H = 频率 (h,1,wp);
绘图(wp/2/pi,abs(H));轴([-.5,.5,0,1])

在此处输入图像描述

您所拥有的基本上是采样微分器的幅度响应。

y(t|t=nT)=ddtx(t)

这是一个基本的一阶高通滤波器,斜率为 +6dB/倍频程。

最简单的可能近似是一个零滤波器。

y[n]=a0(x[n]x[n1])

您可以为其添加一个极点以获得更好的低频匹配,或者您可以使用像上面提到的 Olli Niemitalo 之类的窗口 FIR 设计(正确@-attribution 的降价语法是什么?)。

https://ccrma.stanford.edu/~jos/fp/One_Zero.html

找出时域中锯齿波的傅里叶级数是一个常见的练习。同一系列将是频域中锯齿的时域脉冲响应。因为你想要奇对称,所以都是虚构的(但如果你想要一个真实的结果,那就是共轭对称的)。