Triangular-weighted moving average filter
Show older comments
Hi,
I`m looking for function or source code for Triangular-weighted moving average filter to apply it and make my data processing.
High-frequency noise shall be removed from the measured signals using a triangular-weighted moving average with a smoothing width of 100 ms.
can someone share the experience ?
2 Comments
Jon
on 13 Apr 2023
Is this a homework problem? If so please see https://www.mathworks.com/matlabcentral/answers/8626-how-do-i-get-help-on-homework-questions-on-matlab-answers
Mateusz Rzeszowski
on 13 Apr 2023
Answers (2)
Image Analyst
on 13 Apr 2023
0 votes
1 Comment
Dan
on 30 Jul 2025
Try:
tri_weights = triang('sz');
filtered_data = conv('data', tri_weights, "same") / sum(tri_weights);
Here's an example of high frequency noise being removed with a triangular filter, if by width you mean the base of the triangle:
signal = repmat([zeros(1,500) ones(1,2000) zeros(1,500)],1,10);
time_ms = 0.1*(1:numel(signal));
dt_ms = time_ms(2)-time_ms(1);
filter = triang(round(100/dt_ms))/sum(triang(round(100/dt_ms)));
fprintf(1,'Sum of energy conserving filter should be 1 = %f\n', sum(filter(:)));
fprintf(1,'Filter width = %d samples = %f ms',numel(filter),numel(filter)*dt_ms);
smooth_signal = conv(signal,filter,'same');
plot(time_ms,signal,'b','DisplayName','Signal');
hold on
plot(time_ms,smooth_signal,'r','DisplayName','Smoothed Signal');
legend('location','best');
xlabel('Time [ms]');
ylabel('Signal');
You can also apply the convolution theorem to do it with Fourier transforms.
Categories
Find more on Get Started with Signal Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!