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!