我如何在不使用过滤器命令的情况下重写这部分

Posted

技术标签:

【中文标题】我如何在不使用过滤器命令的情况下重写这部分【英文标题】:How can i rewrite this part without using filter command 【发布时间】:2021-04-09 09:25:55 【问题描述】:
h=fir1(40,[50*Ts]);
z_t=filter(h,1,e_t);%ideal low pass filter

如何在不使用过滤命令的情况下重写这部分

【问题讨论】:

【参考方案1】:

你可以做向量乘法来做乘法和加法。您需要做的唯一其他棘手的事情是在开始时用过滤器的数据长度填充未过滤的数据。在我的示例中,我创建了一个带有一些噪声的 0.5 Hz 正弦波,并使用 1 Hz 截止滤波器进行过滤。

Wn = 0.2; % cutoff frequency (0.2 * 10/2 = 1 Hz)
N = 40; % FIR filter size
time = (0:199) / 10; % 10 Hz sample rate
% make a 0.5 Hz sine wave with noise
e_t = sin(2*pi*0.5*time) + 0.1 * randn(size(time));
h = fir1(N, Wn); 
N_act = length(h); % actual filter size
z_t = filter(h,1,e_t);

e_t_padded = [zeros(1, N_act - 1), e_t];
z_t_alt = zeros(size(z_t));
for idx = 1:(length(e_t_padded) - N)
   use = idx:(idx + N_act - 1);
   z_t_alt(idx) = h * e_t_padded(use)';
end
z_t_alt = z_t_alt(1:length(z_t)); % remove added points

plot(time, e_t, 'k')
line(time, z_t, 'color', 'b', 'linewidth', 3)
line(time, z_t_alt, 'color', 'r', 'linestyle', '-', 'marker', 'o')
legend('unfiltered', 'filtered with filter', 'alternate filter', 'location', 'southeast')
grid

这是结果图

【讨论】:

您的示例仅适用于您的过滤器是对称的,但是,如果您使用像 h=(0:N)/sum(0:N); 这样的任意过滤器,您会注意到您的方法与 matlabs filterfunction 不同。您可以通过将这一行 z_t_alt(idx) = h * e_t_padded(use)'; 更改为 z_t_alt(idx) = fliplr(h) * e_t_padded(use)'; 来克服这个问题

以上是关于我如何在不使用过滤器命令的情况下重写这部分的主要内容,如果未能解决你的问题,请参考以下文章

我如何(url)在不破坏 mime 的情况下重写?

如何在不重写所有路由的情况下禁用 Express 中单个路由的 CORS?

如何在不重绘整个视图的情况下更新 NSView 的一部分

EXTJS 4.1 如何在不重新加载 TreeStore 的情况下删除过滤器

如何在不重写的情况下从数据框中删除行?

如何在不指定完整命名空间的情况下使用 OData(7.4) .Net Core 过滤枚举列表?