在matlab中使用高斯函数进行高斯滤波

Gaussian filtering using Gaussian function in matlab

我正在尝试使用高斯函数过滤信号。

这是我想出的代码。

clear all
x = -1:0.001:1;
y = sin(2*pi*x/0.4) + sin(2*pi*x/0.1);

yh = fft(y);
plot(abs(yh))
del = 0.1;
g = (6/(pi*del^2))^0.5*exp(-6*x.^2./del^2);
gh = fft(g);

yfilter = ifft(2*pi*yh.*gh);
plot(x,y)
hold on
plot(x,yfilter);

但是,当我这样做时,滤波信号的幅度会爆炸。这是正常的吗?如果不是我做错了什么?

信号被放大了,因为滤波器没有归一化。你可以用plot(abs(gh))(或者更好的plot(fftshift(abs(gh))))检查它的频率响应是否有很大的幅度。

为避免这种情况,您应该规范化过滤器。有几种可能的方法可以做到这一点。例如,要实现零频率使用的单位增益

g = g/sum(g);