有没有办法对与我下面相同形式的代码进行矢量化?
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。
答案 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以获取更多详细信息。所以你最好只使用像你在问题中那样的循环。