Если вы оптимизируете время разработки и находитесь на платформе, которая хорошо поддерживает большие БПФ (т.е. не с фиксированной точкой), тогда прислушайтесь к совету hotpaw2 и используйте быструю свертку . Он будет работать намного лучше, чем простое внедрение FIR, и его будет относительно легко реализовать.
С другой стороны, если у вас есть время потратить на это, чтобы получить лучшую реализацию или вы используете платформу с фиксированной запятой, вы должны использовать многоскоростную структуру с понижением-фильтрацией-вычитанием. Но немного сложнее все сделать правильно.
У меня есть доступ к надежным и высоко оптимизированным реализациям инструментов быстрой свертки и многоскоростной фильтрации. Быстрая свертка занимает примерно в 3 раза больше времени, чтобы получить эквивалентную производительность сигнала по сравнению с многоскоростной структурой. Кроме того, это даже на платформе с плавающей запятой. Разрыв значительно увеличился бы на фиксированной точке dsp.
В общих чертах:
Вниз-преобразование:
Используйте 8 ступеней полуполосных фильтров с десятичным разделением на 2, чтобы преобразовать сигнал 48 кГц в сигнал 187,5 Гц. Первая стадия этой понижающей дискретизации может иметь очень широкую полосу переходов, позволяющую энергии для псевдонима, пока она не возвращается в диапазон ниже 60 Гц. По мере продвижения этапов число отводов должно увеличиваться, но они будут применяться с постепенно снижающейся частотой дискретизации, поэтому общая стоимость каждого этапа остается небольшой.
Фильтрация:
Выполните жесткую фильтрацию на 60 Гц, чтобы сохранить энергию, которую вы в конечном итоге захотите вычесть. Есть двойное преимущество в том, чтобы выполнять жесткую фильтрацию с низкой скоростью:
- 1 Гц полосы пропускания перехода в 256 раз больше с точки зрения цифровой частоты при низкой скорости по сравнению с исходной скоростью. Таким образом, каждое нажатие вашего фильтра в 256 раз мощнее.
- Сам сигнал имеет более низкую скорость, поэтому фильтру нужно только обработать 1/256 данных.
Up-преобразования:
По сути, это обратная стадия прореживания. Каждый из 8 этапов интерполяции удваивает скорость, оценивая выборку, которая проходит между последовательными входными выборками. Полоса перехода становится шире по мере увеличения частоты дискретизации.
Вычесть:
Вычтите ваш низкочастотный отфильтрованный сигнал с полной скоростью из исходного сигнала. Если вы правильно настроили все групповые задержки, общая структура будет представлять собой фильтр верхних частот с узкой полосой пропускания перехода.