在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);
我正在尝试使用高斯函数过滤信号。
这是我想出的代码。
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);