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 件のコメント

Mathieu NOE
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
Jon 2023 年 10 月 11 日

0 投票

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
Jon 2023 年 10 月 11 日
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 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
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
Sulaymon Eshkabilov 2023 年 10 月 11 日

0 投票

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 件のコメント

Jon
Jon 2023 年 10 月 11 日
編集済み: Jon 2023 年 10 月 11 日
I think the OP was asking how to do it in Simulink, rather than as a MATLAB calculation
Kazem
Kazem 2025 年 5 月 8 日
Use it as MATLAB funciton in Simulink

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeGet Started with DSP System Toolbox についてさらに検索

製品

リリース

R2018a

質問済み:

2023 年 10 月 11 日

コメント済み:

2025 年 5 月 8 日

Community Treasure Hunt

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

Start Hunting!

Translated by