Average Moving filter in Simulink

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 Commento

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...)

Accedi per commentare.

 Risposta accettata

Jon
Jon il 11 Ott 2023

0 voti

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 Commenti

Jon
Jon il 11 Ott 2023
You could also include the 1/N scaling that I put in as a gain within the discrete transfer numerator values, so in the above example make all of the coefficients equal to 1/3, but I thought the gain made this a little more obvious
Jon
Jon il 11 Ott 2023
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
Jon il 12 Ott 2023
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.

Accedi per commentare.

Più risposte (1)

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)')

2 Commenti

Jon
Jon il 11 Ott 2023
Modificato: Jon il 11 Ott 2023
I think the OP was asking how to do it in Simulink, rather than as a MATLAB calculation
Use it as MATLAB funciton in Simulink

Accedi per commentare.

Categorie

Prodotti

Release

R2018a

Richiesto:

il 11 Ott 2023

Commentato:

il 8 Mag 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by