为什么这个 FIR 滤波信号的开头会衰减?

信息处理 过滤器设计 带通 帕克斯-麦克莱伦
2022-02-22 13:44:14

在此处输入图像描述

我应用了一个 FIR 滤波器,通过 50/1000 左右的频带并衰减其他三个频率分量 30/1000、70/1000 和 110/1000。

这两个过滤器都是使用 Remez 算法生成的。第一个过滤器的长度为 300,第二个过滤器的长度为 100。

为什么滤波信号的开始会被衰减,为什么对于更长的滤波器这种衰减效果更强?

library(signal)
par(mfrow=c(3,2))

ch <- 
  sin(2*pi*1:1000/floor(1000/30)) +
  sin(2*pi*1:1000/floor(1000/50)) +
  sin(2*pi*1:1000/floor(1000/70)) +
  sin(2*pi*1:1000/floor(1000/110))

# FFT of signal
barplot(abs(fft(ch)[1:120]))

# unfiltered signal
plot(ch,type="l")

filter <- function(c0,d1,d2,n) {
  fir <- remez(n=n,f=c(0,c0-d2,c0-d1,c0+d1,c0+d2,1),a=c(0,0,1,1,0,0))

  freq <- freqz(fir,n=n)
  y <- signal::filter(as.vector(fir), 1, x=ch)

  # frequency response of filter
  barplot(abs(fft(y))[1:120])
  return(list(freq = freq, fir = fir, y = y))
}

f <- filter(2*50/1000,1/80,1/40,n=300)

# first filtered signal
plot(f$y, type="l")


f <- filter(2*50/1000,1/80,1/40,n=100)

# second filtered signal
plot(f$y, type="l")
3个回答

您设计的滤波器是线性相位滤波器,因此滤波器的响应将从N/2第一个样本,其中N是过滤顺序。作为N响应的延迟也会增加。您可以通过计算滤波器的群延迟来找到该延迟值。

如果您想减少延迟,您可以设计一个最小相位滤波器。

为一个N三阶 FIR 滤波器,第一N输出无效,因为它们是滤波器的瞬态响应检查此页面中的“稳态和瞬态响应”部分:http: //www.music.mcgill.ca/~gary/618/week1/signals.html

我想,如果你有一个

Xn[n] = {X0.x0, X1.x1,..,Xn.xn} //X0 Integer part, x0 fractional

你有一个

Hn[m] = {H0.h0, H1.h1,..,Hm.hm}

然后

Yn[i] = Hi.hi*Xi.xi + Hi+1.hi+1*Xi-1.xi-1 + .. +Hi+m.hi+m*Xi-m.xi-m

但是当你开始乘以你以前没有的 X0.x0 时,

Yn[0] = H0.h0*X0.x0 + H1.h1*X-1.x-1

X-1.x-1 = 0.0;

然后

Yn[0] = H0.h0*X0.x0

如果 m 很长,则 Yn[i] 的第一个 m 值也会更低...