如何设计一个速度高效的高通滤波器来代替慢多项式滤波器?

信息处理 matlab 插值 高通滤波器
2022-01-31 00:37:22

我记录了一个神经元的膜电位,我想通过消除信号中的某些缓慢变化来获得更均匀的基线(见图)。迄今为止,实现这一目标的最佳方法是对数据进行多项式插值,然后从原始数据信号中减去它。我将数据划分为20000样本,然后将过滤器分别应用于每个窗口。

然而,除了不是一个非常简洁的解决方案之外,它还太慢而无法纳入我正在构建的分析程序中(其中原始数据信号是数量级的)108样品)。我已经用 MATLAB 进行了实验designfilt,但到目前为止,我用这个函数创建的所有过滤器都会扭曲小的变化y振幅1在图中,它们必须保持相对完整。

我知道这不是一个简单答案的问题,但是任何关于如何加快执行多项式减法滤波器的想法都非常受欢迎。

我还在下面包含了 MATLAB 代码来生成显示的图形。如果有上传文件的方法,我也可以上传一些原始数据值。

在此处输入图像描述

x = load_x(); % Too large to be uploaded as a text file (even a 20000   snippet will clog the post

polynomial_nbr = 18;
width_indx = 20000;

y = polynomial_filt(x, polynomial_nbr, width_indx);

clf
t = 1:length(x);
plot(t, x, 'b', t, y, 'r')
legend('Pre-filtered', 'Post-filtered');




function y = polynomial_filt(x, polynomial_nbr, width_indx)

y = nan(size(x));

for i=1:width_indx:length(x)

  indx = (i-1 + (1:width_indx))';
  indx(indx>length(x)) = [];

  [p, ~, mu] = polyfit(indx, x(indx), polynomial_nbr);

  y(indx) = x(indx) - polyval(p, indx, [], mu);

end

end
0个回答
没有发现任何回复~