Я опытный инженер-программист и работаю над датчиками для смартфонов. Я прошел базовые занятия по ЭЭ в DSP и пытаюсь применить свои знания. Я считаю, что понимаю свертку, передаточные функции, z-преобразование и т. Д. Я немного знаю о фильтрах FIR и IIR.
Теперь, читая программные API-интерфейсы и документацию, я вижу, что люди применяют ФНЧ для данных датчика во временной области. Я знаю, что вы делаете это с помощью разностных уравнений (например, y [i] = y [i-1] + 2 * x [i]), но я узнал в своем классе EE, что LPF обычно применяются посредством операции свертки где вы сворачиваете сигнал времени с коэффициентами синусоидальной волны (например) и с определенной частотой среза. Так что разговорное использование «фильтра нижних частот» для меня недостаточно точно.
Например, Google Android API имеет следующую документацию: http://developer.android.com/reference/android/hardware/SensorEvent.html#values
public void onSensorChanged(SensorEvent event)
{
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
Как мне интерпретировать этот фильтр нижних частот? Какова частота среза? Какова пропускная способность перехода? Они используют этот LPF исключительно для усреднения?
источник
Ответы:
Фильтр в вашем примере - это фильтр с бесконечной импульсной характеристикой (IIR) первого порядка . Его передаточная функция:
что соответствует разностному уравнению:
где - вход фильтра, а - выход фильтра.х [ н ] Y[ п ]
Этот тип фильтра часто используется как низкочастотный фильтр низкой сложности и часто называется неплотным интегратором . Его предпочитают из-за его простой реализации, низкой вычислительной сложности и его настраиваемости: его частота среза зависит от значения . может принимать значения на интервале . дает никакой фильтрации вообще (выход равен входу); при увеличении частота среза фильтра уменьшается. Вы можете думать о как о граничном случае, когда частота среза бесконечно мала (выход фильтра равен нулю за все время).α α [0,1) α=0 α α=1
Вы можете думать об этом интуитивно, заметив, что вход фильтра взвешен на , так что при увеличении параметра величина уменьшается, поэтому каждая входная выборка оказывает меньшее пропорциональное влияние на значение любой конкретной выходной выборки. Это приводит к размытию импульсной характеристики фильтра в течение более длительного периода времени. Суммирование за более длительный период времени аналогично вычислению длинного скользящего среднего. По мере увеличения длины скользящего среднего частота отсечки среднего уменьшается.α 1−α
Для вашего примера, где , частотная характеристика фильтра выглядит следующим образом:α=0.8
Из этого примера я бы предположил, что этот фильтр используется для сглаживания высокочастотного шума во временных рядах измерений от датчика, пытаясь выявить сравнительно низкочастотный интересующий сигнал. Это было бы очень типичным приложением для такого рода фильтров.
По другому вашему подвопросу вы правы, что фильтрация часто осуществляется посредством свертки входного сигнала с импульсной характеристикой фильтра. В большинстве случаев это делается только с помощью фильтров с конечной импульсной характеристикой (FIR) . БИХ-фильтры, подобные этому, обычно реализуются с использованием разностного уравнения фильтра; поскольку импульсный отклик системы БИХ бесконечно длинный, вы должны укоротить его до некоторой конечной длины, чтобы свертывание стало возможным, и в этот момент фильтр больше не является БИХ. Формат уравнения разности почти всегда дешевле реализовать в вычислительном отношении, хотя обратная связь, присущая этой структуре, может привести к численным проблемам, которые необходимо решить (например, внутреннее переполнение и накопление ошибок округления).
источник
Подводя итог, можно сказать, что БИХ-фильтры, основанные на простых идеализированных физических моделях, таких как RC-фильтр, имеют небольшое число полюсов и нулей и, таким образом, обычно реализуются как разностное уравнение, поскольку небольшое количество полюсов или нулей подразумевает очень мало арифметических операций. за образец с использованием разностного уравнения.
Поскольку БИХ подразумевает импульсную характеристику бесконечной длины, для свертки потребуется либо вычисление навсегда, либо использование приближения.
КИХ-фильтры обычно реализуются путем свертки с импульсной характеристикой конечной длины (или путем быстрой свертки БПФ, если фильтр достаточно длинный для того, чтобы это было вычислительно эффективным). Эти типы фильтров чаще используются, когда можно приблизить желаемую характеристику частотной характеристики с импульсной характеристикой конечной длины, вместо того, чтобы знать, где могут находиться полюсы и нули Z-плоскости.
Однако, поскольку фильтр с четкой спецификацией подразумевает длительную свертку КИХ, реализация фильтров КИХ может быть намного медленнее, и настройка может включать гораздо больше строк кода, что может быть причиной того, что фильтры КИХ могут использоваться не так часто в простом программном обеспечении. Примеры.
источник
Я снова и снова возвращаюсь к этому посту. Спасибо, что задали вопрос. Вот отличная, дружественная к вычислениям реализация интегратора с утечками в C (предназначенного для микроконтроллера).
Во-первых, некоторая перестановка: y = α * x + (1 - α) * y_last = α * (x - y_last) + y_last
если мы ограничим α до 12%, 25%, 50% (1/8, 1/4, 1/2, ...). Мы можем воспользоваться некоторым эффективным сдвигом битов. Принимая случай 1/8, 8 => 2 ^ 3 => (пониженная передача 3 раза)
= (x - y_last) / 8 + y_last
Надеюсь, это поможет.
источник