3

我有一个分布在非等距一维空间中的数据,我需要用高斯滤波器对它进行卷积,

gaussFilter = sqrt(6.0/pi*delta**2)*exp(-6.0*x**2 /delta**2);

其中delta是一个常数,x对应于空间。

任何人都可以提示如何执行良好的集成(二阶),因为数据不是等间距的以照顾有限的末端吗?我打算用 Fortran 编写代码,但也欢迎使用 Matlab 示例。

4

2 回答 2

1

用这个:

function yy = smooth1D(x,y,delta)
    n = length(y);
    yy = zeros(n,1);
    for i=1:n;
        ker = sqrt(6.0/pi*delta^2)*exp(-6.0*(x-x(i)).^2 /delta^2);
        %the gaussian should be normalized (don't forget dx), but if you don't want to lose     (signal) energy, uncomment the next line
        %ker = ker/sum(ker); 
        yy(i) = y'*ker;
    end
end
于 2013-09-08T06:01:28.463 回答
0

找到了一些有用的东西。虽然不确定这是否是非常准确的方法,因为集成(trapz)是一阶的。

function [fbar] = gaussf(f,x,delta )


n = length(f);
fbar = zeros(n,1);

for i=1:n;
    kernel =  sqrt(6/(pi*delta^2))*exp(-6*((x - x(k))/delta).^2);

    kernel = kernel/trapz(x,kernel);
    fbar(i) = trapz(x,f.*kernel);
end

end
于 2013-09-10T13:55:41.837 回答