Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
filt [2026/02/27 12:56] root [Среднеарифметический фильтр] |
filt [2026/02/27 13:46] (текущий) root [Огибающие фильтры] |
||
|---|---|---|---|
| Строка 200: | Строка 200: | ||
| <wrap ks> | <wrap ks> | ||
| В результате видим, что хоть отфильтрованный график и начал принимать форму, похожую на изначальную синусоиду, | В результате видим, что хоть отфильтрованный график и начал принимать форму, похожую на изначальную синусоиду, | ||
| + | </ | ||
| + | |||
| + | ====== Медианный фильтр ====== | ||
| + | |||
| + | <wrap ks> | ||
| + | Иногда бывает так, что сигнал продолжительное время достаточно чисто идет, и лишь кратковременно прилетает какая-то помеха (ошибка измерения, | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | let filt = ds.crtFilt(' | ||
| + | |||
| + | let pointList = []; | ||
| + | for (let i = 0; i < 300; i++) { | ||
| + | let val = Math.sin(i / 30) * 40 + 50; | ||
| + | | ||
| + | // добавляем кратковременную большую помеху | ||
| + | if (i % 33 == 0) val += Math.random() * 100 - 50; | ||
| + | | ||
| + | let filtVal = filt.add(val); | ||
| + | pointList.push([ i, val, filtVal ]); | ||
| + | } | ||
| + | |||
| + | await ds.objCall(' | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | <wrap ks> | ||
| + | На графике видно, что если даже одна точка выбивается из чистого графика, | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | // используем вместо среднеарифметического, | ||
| + | let filt = ds.crtFilt(' | ||
| + | |||
| + | let pointList = []; | ||
| + | for (let i = 0; i < 300; i++) { | ||
| + | let val = Math.sin(i / 30) * 40 + 50; | ||
| + | | ||
| + | if (i % 33 == 0) val += Math.random() * 100 - 50; | ||
| + | | ||
| + | let filtVal = filt.add(val); | ||
| + | pointList.push([ i, val, filtVal ]); | ||
| + | } | ||
| + | |||
| + | await ds.objCall(' | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | <wrap ks> | ||
| + | Здесь хорошо видно, что помеха лишь незначительно исказила график (связано это с тем, что пришлось пропустить " | ||
| + | </ | ||
| + | |||
| + | ====== Огибающие фильтры ====== | ||
| + | |||
| + | <wrap ks> | ||
| + | Не редко так же бывает ситуация, | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code javascript> | ||
| + | // создаем огибающий фильтр по максимальному значению | ||
| + | let filt = ds.crtFilt(' | ||
| + | |||
| + | let pointList = []; | ||
| + | for (let i = 0; i < 300; i++) { | ||
| + | let val = Math.sin(i / 30) * 40 + 50; | ||
| + | | ||
| + | // эмулируем потерю сигнала | ||
| + | if (i % 33 == 0) val = 0; | ||
| + | | ||
| + | let filtVal = filt.add(val); | ||
| + | pointList.push([ i, val, filtVal ]); | ||
| + | } | ||
| + | |||
| + | await ds.objCall(' | ||
| + | </ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | <wrap ks> | ||
| + | Так же плюс данного фильтра, | ||
| </ | </ | ||