加速MATLAB过滤器命令

时间:2014-06-25 17:42:18

标签: optimization filtering signal-processing matlab

我对使用MATLAB过滤器相对较新。我正在尝试使用以下命令过滤相当大的数据集(大约200万个数据点)

rrc = rcosdesign(0.25, 10, floor(Fs/symRate), 'sqrt');
filtered = filter(rrc, 1, samples);
filtered = filtered / sqrt(floor(Fs/symRate));

当我运行MATLAB Profiler时,它表示行

filtered = filter(rrc, 1, samples);

需要超过500秒才能运行。关于如何提高速度的任何想法?我尝试过使用我在网上找到的FilterM函数(http://www.mathworks.com/matlabcentral/fileexchange/32261-filterm),但它需要相同的时间。其他人有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

几点想法:

  1. 如果您有FIR过滤器(从代码中可以看出),您可以使用conv2获得性能,该filter使用可能加快速度的英特尔IPP。使用“有效”'标记以获得xcorr结果。
  2. 如果过滤器很长且数据很长,请尝试使用filterX,因为它使用FFT来加速相关性。由于您在过滤后进行操作,请务必翻转滤镜系数。
  3. 使用Visual Studio 2013编译/03,或使用优化标记(filterX)编译更好的英特尔C编译器2013。使用时,请直接使用FilterM命令(跳过{{1}}包装器。)
  4. 手动使用FFT执行卷积。
  5. 创建MEX版本的英特尔MKL /英特尔IPP过滤功能。
  6. 任何这些都应该有很大帮助。