ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
826924 Топик полностью
AlexBi_ (25.03.2018 12:05, просмотров: 3) ответил AlexBi на Понадобилось сделать цифровой фильтр 50Гц, полоса около 10%, желательно в целых числах. Очень давно таким не занимался. Вроде сейчас уже есть чуть ли не онлайн составители таких фильтров, даешь ему параметры, он исходник реализации на Си. Ни кто
Не хотелось углубляться в воспоминания что там и почему, но без этого не получается. Покритикуйте мои рассуждения. Из программ пробовал QEDesign WinFilter ELLF.EXE Самой понятной для меня оказалась WinFilter, она умеет генерить исходник, в котором сразу видно коэффициенты для отсчетов на входе и на выходе. Как превратить выхлоп QEDesign или ELLF.EXE в такие коэффициенты я не нашел. Возможно предполагается, что я сделаю это сам по выданным нулям и полюсам, но это показалось неудобным. Или я чего-то не понимаю. Дальше все исследования проводил с WinFilter Частоту дискретизации я предполагаю около 10кГц, т.к. на входе будет RC 1кГц с разбросом плюс/минус процентов в 30 (точнее будет несколько каналов, каждый со своим RC). Такой выборкой пытаюсь уйти от зеркальных каналов, не сильно портя входным RC полезный сигнал. Однако при полосе в 10Гц коэффициенты получаются с приличной разрядностью, у меня получилось (после перехода в целые), что коэффициенты должны быть 29 разрядов, или больше, что потребует вычислений на 64х битах (с учетом 12 бит входного сигнала). Дабы не уходить в столь длинные числа, если я правильно понял Nikolay_Po, сперва делается цифровой фильтр с полосой например 500Гц, с его выхода берутся выборки с частотой 1кГц и по ним уже делается второй фильтр с интересующей меня полосой. При этом коэффициенты обоих фильтров становятся приемлемыми для арифметики 32 бита. Такое имеет смысл, или лучше все делать в большой разрядности? По выбору коэффициентов: WinFilter предлагает сам перевести в целые числа, но только до 16 бит. Не совсем то, что надо. Как мне показалось, я могу это сделать сам из double простым умножением на константу коэффициентов a[n] (коэффициенты для отсчетов входного сигнала) и на другую константу коэффициентов b[n] (для отсчетов выходного сигнала). В итоге получу тот же выход фильтра, с точностью до постоянного множителя. Такой метод годится? По выбору разрядности: WinFilter требует (разрядности отсчетов выходного сигнала) = (разрядность входа) + (разрядность коэффициентов) + 4. Соответственно умножение для них будет такой же большой разрядности. Но, с учетом того, что у меня полосовой фильтр, входной сигнал содержит преимущественно то, что я должен выделить, коэффициент преобразования входа к выходу получится близким к 1, нужна ли такая большая разрядность? В ходе вычисления разрядность нужна, т.к. там ищется разность, но после вычисления этой разности мне не понятно зачем сохранять разрядность. Или я не прав?