
我应用了一个 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")