Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ошибка в медианном фильтре N-го порядка #7

Open
ARNik opened this issue Jul 6, 2023 · 4 comments
Open

Comments

@ARNik
Copy link

ARNik commented Jul 6, 2023

Медианный фильтр ведет себя не корректно если на вход подавать одинаковые значения.

Обратите внимание на выражения:
(buffer[_count] > buffer[_count + 1])
(buffer[_count - 1] > buffer[_count]))

Т.е. существует вероятность что новое число вообще не запишется в буфер, если не удовлетворит ни одному из этих условий.

@GyverLibs
Copy link
Owner

Новое число записывается в буфер в любом случае парой строчек выше

buffer[_count] = newVal;

@ARNik
Copy link
Author

ARNik commented Jul 9, 2023

Попробуйте создать фильтр с буфером скажем на 8 элементов, а затем вызвать filtered 8 раз с одним и тем же числом. И посмотрите что будет в буфере.

Новое число записывается в буфер в любом случае парой строчек выше

Запишется оно да, но массив сортируется пузырьком. Причем не весь, а наполовину вверх/вниз. А в некоторых случаях (когда count=0 или размеру массива) сортировка пропускается.

@ARNik
Copy link
Author

ARNik commented Jul 9, 2023

Я этот косяк обнаружил когда решил проинициализировать фильтр при первом чтении ADC, сразу затолкав в него количество значений равное размеру буфера. А он мне продолжил нули выдавать как ни в чем не бывало.

@GyverLibs
Copy link
Owner

У меня нормально работает с одинаковыми

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants