Реализация фильтра нижних частот в Android-приложении — как определить значение альфы?

Алгоритм реализации фильтра нижних частот сформулирован следующим образом (из Википедии):

for i from 1 to n
   y[i] := y[i-1] + α * (x[i] - y[i-1])

куда

α = T/(tau + T)

T — период, другими словами, временной интервал, в течение которого принимаются данные. А тау — постоянная времени, определяемая как:

tau = RC.

ОК все ясно. Кажется, что все приходят к разным значениям α, но меня это поражает — как можно прийти к логическому решению для этого значения?

Конечно, значения R и C недоступны для использования - или нет?

Кто-нибудь знает, как определить значение тау и, следовательно, значение α?

Спасибо всем и каждому!


person Igwe Kalu    schedule 06.11.2012    source источник
comment
Альфа определяет частоту среза фильтра и, таким образом, какие частоты проходят. Вам нужно будет определить, что вы хотите для своего конкретного приложения, а затем вы сможете найти примеры включения частоты в функцию для альфы.   -  person Jason    schedule 06.11.2012
comment
Сценарий находится в разработке приложений для Android. Например, реализация компаса. Как определить эти значения переменных «R» и «C»?   -  person Igwe Kalu    schedule 06.11.2012
comment
Как сказал @ user1801819, вам нужны T и fc. T из int getMinDelay() преобразуется в Гц, а fc будет чем-то, что вы настраиваете в зависимости от вашего приложения, и также будет Гц. Я уверен, что вы видели обзор датчика, там есть информация по работе с данными датчиков.   -  person Jason    schedule 07.11.2012
comment
Мне ясно, что такое T, потому что я установил его сам. Извините, @Jason, user1801819 неверен. Вы не можете просто предположить, что инверсия постоянной времени эквивалентна частоте среза; Я кое-что знаю о сигналах и системах. Если бы я хотел настроить, то я бы не задавал здесь вопросов. Я поднял этот вопрос, потому что хотел получить более четкое определение, чтобы помочь понять, как правильно использовать эти параметры. Также мне важно знать, есть ли какие-то принятые стандарты - я заметил, что многие люди устанавливают tau = 0,2. Я хотел бы знать, почему они так делают.   -  person Igwe Kalu    schedule 11.11.2012


Ответы (4)


T: период выборки.

тау: постоянная времени.

fc: частота среза фильтра. fc = 1 / тау

потом

альфа = T / (T + 1/fc)

наилучшие пожелания!

person user1801819    schedule 06.11.2012
comment
Я знаю, что означает каждая переменная. Вопрос в том, как определить fc? Например при реализации компаса в Android, кого вы определяете fc? - person Igwe Kalu; 06.11.2012
comment
Все равно спасибо @user1801819. Но боюсь, ваш комментарий вообще не отвечает на мой вопрос. - person Igwe Kalu; 11.11.2012

У меня была такая же проблема с вычислением параметра сглаживания (ALPHA) данных датчика компаса с использованием фильтра нижних частот.

Я выяснил, и рассчитанное значение ALPHA хорошо работает для моего приложения.

Для большего понимания и обсуждения обратитесь к следующему сообщению

Как рассчитать значение параметра сглаживания фильтра нижних частот (в случае сглаживания данных датчика компаса)

person user3123466    schedule 26.12.2013

Для другого фильтра нижних частот вы можете рассмотреть биквадрат RBJ:

http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

Реализация которого подробно описана здесь:

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

person Bjorn Roche    schedule 06.11.2012

Из википедии о постоянной времени RC: Частота отсечки — постоянная времени равна связанный с частотой среза fc, альтернативным параметром RC-цепи

tau = 1 / (2π * f)

Почему 2π? Из статьи постоянной времени в Википедии

ω = 2π * f is the frequency in radians per second.

Из та же запись, Tau является эквивалентом RC и временем нарастания системы. Малое время нарастания означает, что высокочастотный вход не будет возбуждать систему. Тогда легко представить, что это связано с частотой среза фильтра нижних частот. В конечном счете, он контролирует, какая часть сигнала обратной связи смешивается с новым входным сигналом.

В моем фильтре нижних частот 2-го порядка я использую следующее для альфы.

α = 1 / (T * tau)

В моем аудиоприложении фильтр 2-го порядка представляет собой два соединенных в цепочку фильтра одинарного порядка, и я вычисляю выходной сигнал фильтра следующим образом. filter1Out и filter2out — текущие значения фильтров, а это обновление после получения input.

filter1Out = filter1Out + (alpha * (input - filter1Out));
filter2Out = filter2Out + (alpha * (filter1Out - filter2Out));

Чтобы определить, какой должна быть ваша частота среза с помощью компаса Android, я бы сначала не стал применять какую-либо фильтрацию и попытался бы использовать предоставленные данные. Отсечка действительно зависит от того, что вы делаете с сигналом. Вы сглаживаете его для экранной анимации? Вы сглаживаете его для отслеживания пути? Есть ли шум в сигнале, который вы хотите отклонить? Каждому может понадобиться своя настройка. Если неотфильтрованный сигнал меняется слишком часто, выясните, как часто вы хотите, чтобы он менялся, и используйте это в качестве отправной точки для среза фильтра.

Надеюсь, это поможет. Вывод математики DSP выходит за рамки моих навыков, но я несколько раз реализовывал фильтры нижних частот для аудиоприложений.

person Jason    schedule 11.11.2012
comment
Спасибо за усилия @Jason. Ваш вклад предварительно приемлем. Но вместо того, чтобы слишком быстро приходить к простому заключению, я еще немного подумаю... Пока я оставлю этот вопрос открытым, надеюсь, кто-то другой сможет предложить интересный аргумент, как ваш. - person Igwe Kalu; 13.11.2012
comment
Возможно, вам больше повезет, если вы перенесете вопрос на обработку сигналов или добавите больше описаний того, что вы пытаетесь do и код, на который вы ссылаетесь, со значением 0,2 тау. - person Jason; 13.11.2012