Почему бы не получать выборки слитно, без потери отсчётов между
пакетами? А фильтр пусть при каждом новом пакете помнит состояние
после предыдущего. Не станет скачков. Даже если поймаете переход через ноль, и фильтр "пустой" (память - нули), то будет переходный процесс из тишины в начало синусоиды. Меньше, но тоже скачок.
А как переход через ноль будете определять? Если сигнал сильный, что можно просто компаратором, то зачем его тогда выделять? Если слабый - то будете промахиваться. Лучше как выше написал, фильтровать непрерывно.
И не забывайте, чем круче фильтр, тем большую задержку вносит. Не перестарайтесь.