Smoothing 1D data by moving different filter shapes

版本 2.0.2.0 (354.8 KB) 作者: Peter Seibold
Smoothing a 1D curve by weighted moving average. The filtering is done by convolution with different filter types. Also with automatic mode.
248.0 次下载
更新时间 2023/5/29

查看许可证

Smoothing a 1D curve by weighted moving average. The averaging is done by convolution with different filter types. Also with automatic generation of suitable filters.
The main difference to Malab's smoothing filter is: For full curve filtering the curve is linear extrapolated on both sides and not zero padded. Therefore the border values are much better than Matlab's smoothing filters or convolutions.
Features:
Moving average:
  • Filter width set as odd whole number: filter is all ones
E.g. 5 -> [1 1 1 1 1]
  • Filter width set as floating number: filter is triangle shaped
E.g. 3.5- > [0.5 0.75 1 0.75 0.5]
  • Filter width not set: Automatic mode, width determined by FFT
Gaussian shaped filter:
  • Width and sigma set: Gaussian filter according those values
  • Width set and sigma=0: Gaussian filter according width and default sigma
  • Width=0: Automatic mode, width determined by FFT and default sigma
User defined filter:
You may set any filter as long as the sum is not equal zero.
E.g. [1 1]
Manual:
Invoke the function with: [ys,fout,sout]=smooth1Dconv(y,w(optional),s(optional))
Input:
The first argument y is the vector to be smoothed.
The 2nd argument, called w (width of filter), is optional
The 3rd argument, called s (sigma of filter), is optional
Four modes are possible:
1.) w and s omitted: Moving average auto filter.
Filter width is determined by FFT, an odd number.
2.) w is a single integer odd number or floating number, s is omitted:
Moving average, all ones for integer odd numbers
or triangle shaped filter for all other numbers.
The center value is always one; the sum of the filter values is w.
If w<=1, no filtering
Examples:
w=1.5 -> filter=[0.25 1 0.25]
w=2.8 -> filter=[0.9 1 0.9]
w=3 -> filter=[1 1 1], w is an integer odd number!
w=3.5 -> filter=[0.5 0.75 1 0.75 0.5]
w=4 -> filter=[0.667 0.833 1 0.833 0.667]
3.) w and s set: Gaussian shaped filter
w is the width of the filter.
If w is not an odd integer number, then the next lower integer w is taken.
s is the sigma of the filter, if sigma=0, then s=(w-1)/4;
If w=0: Auto Gaussian filter width is determined by FFT, s input is discarded.
w>y-data size: w is resized to fit
4.) w is a vector
w are filter values (e.g. [0.5 1 0.5])
w-size>y-data size: w border values are cut to fit
Output:
ys: smoothed y
fout: filter used
sout: sigma used, NaN if not used
Remark:
The border values of the smoothed output ys are approximations. In order to calculate those values, the input y is extended by extrapolation of the smoothed input. The approximated border output is one half of the filter width.
If you want to smooth sine curves, you should also look at:

引用格式

Peter Seibold (2024). Smoothing 1D data by moving different filter shapes (https://www.mathworks.com/matlabcentral/fileexchange/66099-smoothing-1d-data-by-moving-different-filter-shapes), MATLAB Central File Exchange. 检索来源 .

MATLAB 版本兼容性
创建方式 R2016a
兼容任何版本
平台兼容性
Windows macOS Linux
类别
Help CenterMATLAB Answers 中查找有关 Smoothing and Denoising 的更多信息
致谢

启发作品: poly2traj

Community Treasure Hunt

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

Start Hunting!

smooth1Dconv230529

版本 已发布 发行说明
2.0.2.0

Improved filtering of border values.

2.0.1.1

Works now with vertical or horizontal input vector. Description changed.

2.0.1.0

Works now with vertical or horizontal input vector.

2.0.0.2

Demo GUI now with corresponding m-file

2.0.0.1

Other image

2.0.0.0

New methode with convolution

1.0.0.0