我如何在不使用过滤器命令的情况下重写这部分
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 filter
function 不同。您可以通过将这一行 z_t_alt(idx) = h * e_t_padded(use)';
更改为 z_t_alt(idx) = fliplr(h) * e_t_padded(use)';
来克服这个问题以上是关于我如何在不使用过滤器命令的情况下重写这部分的主要内容,如果未能解决你的问题,请参考以下文章
如何在不重写所有路由的情况下禁用 Express 中单个路由的 CORS?