Алгоритм для фильтрования/нормализования плохого сигнала

Измените это:

x= Symmetrie(square_matrix[4][4]);

на следующее:

x = Symmetrie(square_matrix);

, поскольку ваш метод ожидает всю матрицу в качестве параметра, а не только элемент.

square_matrix[4][4] - это отдельный элемент матрицы, то есть элемент в 5-й строке и 5-м столбце. Конечно, это вызывает неопределенное поведение (UB) , так как ваша матрица имеет 4 строки.

Что еще более важно, не игнорируйте сгенерированные предупреждения. Например, в GCC вы получите что-то вроде этого:

prog.c: In function 'main':
prog.c:24:32: warning: passing argument 1 of 'Symmetrie' makes pointer from integer without a cast [-Wint-conversion]
   24 |   x= Symmetrie(square_matrix[4][4]);
      |                ~~~~~~~~~~~~~~~~^~~
      |                                |
      |                                int
prog.c:5:20: note: expected 'int (*)[100]' but argument is of type 'int'
    5 | int Symmetrie (int matrix[][max]) {
      |                ~~~~^~~~~~~~~~~~~

, как вы можете видеть в Live Demo kbd>.

6
задан Jason S 26 January 2009 в 17:59
поделиться

3 ответа

Существует несколько опций:

  1. Выведите выбросы
  2. Фильтр
  3. Используйте лучший GPS
  4. Используйте внешний источник данных (снимок к дороге)
  5. Комбинация вышеупомянутого

Мне нравится использовать фильтры - фильтр Калмана является типичным (и часто лучше всего) решение - это использует объем прогнозирующего усреднения, которое лучше, чем дешевый БИХ (Импульсная характеристика Бога) фильтр:

FilteredValue = FilteredValue * 0.75 + NewValue * 0.25

Можно получить модули GPS, которые дают Вам 4-5, фиксирует в секунду, который позволит Вам использовать вышеупомянутый 'дешевый' фильтр с разумным временем отклика.

Можно также просто получить лучший GPS (SiRF III или лучше), который не является столь же шумным и имеет лучший внутренний прием (где возможный).

Потребительский снимок "единиц GPS к дороге", если это возможно, таким образом, ошибки от дороги не замечены потребителем, а также несколькими из других методов.

Kalman не легко реализовать, но без внешнего набора данных или датчика (такого как дорожная скорость), это - наилучший вариант. Проверьте http://www.google.com/search?q=open%20source%20kalman%20filter для кода и учебных руководств на нем.

- Adam

8
ответ дан 8 December 2019 в 18:42
поделиться

ре: фильтрация в присутствии "поп-" шума-

Один из самых легких способов, которыми я нашел, чтобы сделать, это:

delta = newValue - filteredValue;
delta = delta > LARGEST_SANE_DELTA ? LARGEST_SANE_DELTA
     : (delta < -LARGEST_SANE_DELTA ? -LARGEST_SANE_DELTA : delta);
filteredValue += alpha*delta;

где альфа = 1/tau и tau является временной константой рассматриваемого фильтра низких частот, выраженный в кратных числах времени между повторениями вышеупомянутого кода. Значение LARGEST_SANE_DELTA представляет большое возможное изменение в newValue и отсекает чрезмерно большую вариацию во входе. Существуют, возможно, лучшие способы отклонить этот тип шума, но они более сложны, и тот, который я упомянул, довольно прост.

3
ответ дан 8 December 2019 в 18:42
поделиться

Используйте фильтр Калмана.

2
ответ дан 8 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: