Average Moving filter in Simulink
17 次查看(过去 30 天)
显示 更早的评论
Hey!
I don't have a DSP System Toolbox / Statistics, and I would like to create an average moving filter, and tune it.
I would appreciate any help, and thank in advance!
1 个评论
Mathieu NOE
2023-10-11
hello
you can use a FIR filter of length N with 1/N values for all taps
other window are also doable if you want to weight the input data differently (hanning / hamming / kaiser etc...)
采纳的回答
Jon
2023-10-11
You could do it like this using just the discrete transfer function block included with Simulink>Discrete>Discrete Transfer Fcn, for example for the moving average of last 3 values
3 个评论
Jon
2023-10-11
You could also make the numerator polynomial be [1 1 1 0], and include the current sample in the moving average window, this would give you direct feedthrough which you may or may not want.
Jon
2023-10-12
You could also do the equivalent of what I show above using the Simulink>Discrete>Discrete FIR Filter, as @Mathieu NOE suggests, using coefficients are in terms of z^(-n), rather than a numerator and denominator using z^(n) as I did.
更多回答(1 个)
Sulaymon Eshkabilov
2023-10-11
Why not use MATLAB code, e.g.:
t=linspace(0,2*pi);
S = sin(t); % Signal
R=randn(1,100); % Noise
S = S+R*.5; % Signal noise affected
N = 3; % 3-point moving average
S_ma(1)=S(1);
S_ma(2)=sum(S(1:3))/N;
for ii = 3:numel(R)
S_ma(ii)=(S(ii-2)+S(ii-1)+S(ii))/N;
end
plot(t, S)
hold on
plot(t,S_ma, 'r','LineWidth', 2)
% Compare to the MATLAB's moving average filter from finance toolbox
S_mat = movavg(S.', 'simple', N);
plot(t, S_mat, 'k--*')
legend('Signal', 'Code: moving average', 'Matlab"s movavg fcn', 'location', 'best')
grid on
xlabel('t')
ylabel('Signal: S(t)')
1 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Digital Filter Design 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!