我完全同意弗洛里斯的观点,但我会给你一些关于正在发生的事情的线索。根据您的问题,我假设您以前从未使用过 MATLAB,因此我强烈建议您尝试在线提供的许多教程中的一些。
function filter=gaussfilt(N)
这定义了函数的名称gaussfilt、输入变量N和输出变量filter。您的 m 文件必须另存为gaussfilt.m.
filter是 MATLAB 中的许多内置函数之一,因此不是一个好的变量名。我建议你使用一个名称,例如gauss_filter,或基本上其他任何东西。在您的情况下,这可能并不重要,因为您没有使用该filter函数,但是,使用这样的名称是一个坏习惯。这也适用于size,length等名称max。
alpha=N;
first=-(1-N/2)*exp(-(1-N/2)^2/alpha);
count=0;
这些行只不过是为变量名赋值。exp()是自然指数。count用于跟踪while循环循环的次数。
while first<.1*(-(1530/4000*N-N/2)*exp(-(1530/4000*N-N/2)^2/alpha))
count=count+1;
alpha=N*500*count;
first=-(1-N/2)*exp(-(1-N/2)^2/alpha);
end
只要满足以下条件while,就会计算介于两者之间的所有内容。end条件应该是不言自明的。
first < .1*(-(1530/4000*N-N/2)*exp(-(1530/4000*N-N/2)^2/alpha))
count递增,以便您可以跟踪循环执行了多少次。但是,它从未使用过,因此在这种情况下是不必要的。但是,我建议您保留计数器,并在while循环中包含另一个条件,即它应该停止运行 ifcount > 1e6或其他一些较大的数字。这样,您将避免循环在不满足其他条件的情况下永远运行。
for n=1:N
filter(n)=-(n-N/2)*exp(-(n-N/2)^2/alpha); % d/dt of a gaussian
end
for n = 1:N是一个将运行N多次的循环,其中n将是1第一次,2第二次等等。filter(n) = ..将值分配给变量中的n第 th 个位置filter,从而创建一个长度为 N 的向量。这是创建向量的一种不好的坏方法。您应该始终为向量分配内存,以避免向量在循环内增长。“增长”的向量非常非常慢。因此,在开始循环之前,您应该执行以下操作:
filter = zeros(1,N);
这会创建一个零向量。这可能有点太多了,但分配值的更好方法filter是使用arrayfun:
filter = arrayfun(@(n) (-(n-N/2) * exp(-(n-N/2)^2 / alpha)), 1:N);
在这个答案中查看第 6 点以了解原因。
最后一行:
filter=filter/sum(abs(filter));
好吧,您将filter值除以值的总和,从而创建filter一个总和等于的新值1。这是您将从函数中获得的输出。
使用该函数时,必须编写如下内容:
filter_vector = gaussfilt(N) % where N is an integer
最后一点,使用空格!它更容易阅读!
再次,我推荐一些 MATLAB 教程......