我记录了一个神经元的膜电位,我想通过消除信号中的某些缓慢变化来获得更均匀的基线(见图)。迄今为止,实现这一目标的最佳方法是对数据进行多项式插值,然后从原始数据信号中减去它。我将数据划分为样本,然后将过滤器分别应用于每个窗口。
然而,除了不是一个非常简洁的解决方案之外,它还太慢而无法纳入我正在构建的分析程序中(其中原始数据信号是数量级的)样品)。我已经用 MATLAB 进行了实验designfilt
,但到目前为止,我用这个函数创建的所有过滤器都会扭曲小的变化振幅在图中,它们必须保持相对完整。
我知道这不是一个简单答案的问题,但是任何关于如何加快执行多项式减法滤波器的想法都非常受欢迎。
我还在下面包含了 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