矢量化多语句for循环

时间:2014-12-23 08:55:45

标签: matlab vectorization

有没有办法对与我下面相同形式的代码进行矢量化?

for k=1:length(channel_cuttoffs)
    [b a] = butter(5,channel_cuttoffs(k));
    pulse = filtfilt(b,a,pulse);
    eyediagram(downsample(pulse,10),3)
end

pulse为10000x1,channel_cuttoffs为1x5。

1 个答案:

答案 0 :(得分:2)

您可以使用arrayfun来矢量化代码。

类似的东西:

[b a] = arrayfun(@(x), butter(5, x), channelcuttoffs);
pulse = arrayfun(@(x, y), filtfilt(x, y, pulse), b, a);

我认为你不能为eyediagram做任何事情,因为它会创建一个数字而不是数字输出。

但是,应该注意的是,arrayfun很慢,请参阅:arrayfun can be significantly slower than an explicit loop in matlab. Why?http://www.mathworks.com/matlabcentral/newsreader/view_thread/253596以获取更多详细信息。所以你最好只使用像你在问题中那样的循环。