?

Log in

No account? Create an account

[icon] Need help - Lorem Ipsum igitur, juvenes dum sumus — ЖЖ
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (Мой сайт).

Security:
Subject:Need help
Time:08:02 pm
Ребята, нужна помощь. Мы тут все такие умные стоим в белом красивые, но всё забыли.
Суть проблемы: есть временной ряд, некие значения типа double. Ряд дискретизирован по времени (отсчеты 100Гц) и задает некую форму сигнала. Хочется применить к этому сигналу фильтр Чебышева и "срезать" все частоты больше 5Гц.
Проблема в том, что чтение умной статьи не дает ответов на вопрос о том, как это реализовать в коде:(

С кем можно поговорить? Кто может подсказать? Я в тупике, и мне стыдно за свой красный диплом.
comments: Оставить комментарий Previous Entry Поделиться Next Entry


ayoupov
Link:(Link)
Time:2010-03-31 02:28 pm
мой мальчик говорит о том, что надо использовать прямое преобразование Фурье, потом выкинуть ненужные частоты из полученного частотного массива, а затем обратно собрать. и ещё предупреждает о необходимости использования signed values
(Ответить) (Thread)


torrio
Link:(Link)
Time:2010-03-31 02:30 pm
мой "мальчик" говорит, что ППФ - это стрельба из пушки по воробьям, и что надо использовать фильтр Чебышева, но непонятно как:)))
(Ответить) (Parent) (Thread)


ayoupov
Link:(Link)
Time:2010-03-31 02:37 pm
увы тогда. мальчик может дать исходники на плюсах для FFT. статью про Чебышёва я почитал, непонятно.
(Ответить) (Parent) (Thread)


a_quantum
Link:(Link)
Time:2010-03-31 02:34 pm
Попробуй Numerical Recipes
(Ответить) (Thread)


eltaron
Link:(Link)
Time:2010-03-31 02:48 pm
принципиален именно Чебышев, или нужен просто лоупасс фильтр?
http://en.wikipedia.org/wiki/Low-pass_filter#Algorithmic_implementation
(Ответить) (Thread)


torrio
Link:(Link)
Time:2010-03-31 03:11 pm
Где ты был, когда ты был так нужен?!:) Чебышев в некотором смысле оптимален, но не принципиален.
(Ответить) (Parent) (Thread)


eltaron
Link:(Link)
Time:2010-03-31 03:18 pm
вообще, мой геофизический опыт показывает, что любая фильтрация, в целом, не сильно отличается по результату от тупого усреднения окном c размером, кажется, в полуширину периода среза :-))
то есть 10x10 в твоем случае
(Ответить) (Parent) (Thread)


a_quantum
Link:(Link)
Time:2010-03-31 02:56 pm
Насколько я понял из статьи в Вики, фильтр применяется уже к спектру. У тебя есть функция времени f(t). Чтобы применить фильтр, тебе нужно сначала получить её спектр, т.е. применить к функции времени преобразование Фурье:
f(w) = F[f(t)].
Теперь у тебя есть спектр, к которому ты применяешь фильтр:
f(w) -> g(w) = G_n(w) f(w),
где G_n(w) - фильтр Чебышева, формула к-рого дана в вики-статье. Затем, чтобы получить "отфильтрованную" функцию времени, нужно применить к отфильтрованному спектру g(w) обратное преобразование Фурье
g(t) = F^{-1}[g(w)] ,
что даст искомый результат.

Для преобразования Фурье можно ползоваться FTT (если нет готового, взять из тех же Numerical recipes).

Подозреваю, что всё это можно сделать напрямую, без FFT, но это надо внимательно смотреть Numerical recipes. В MATLAB'е, кстати, такая штука наверняка есть уже встроенная в каком-то из пакетов.
(Ответить) (Thread)


eltaron
Link:(Link)
Time:2010-03-31 03:09 pm
а в чем тогда вообще смысл линейной фильтрации, если мы все равно угробим уйму времени на ФФТ? :-))
нет, чебышев и другие лоупассы применяются как раз к набору отсчетов измерения некоего сигнала
там же в статье приведена формула - та, которая y[n]=...
вот по ней, собственно, и надо считать
там видно, что входят только моменты времени, предшествующие собственно расчету, что позволяет проводить фильтрацию в реалтайме
ФФТ тут и рядом не валялся по скорости :-))
(Ответить) (Parent) (Thread)


a_quantum
Link:(Link)
Time:2010-03-31 03:23 pm
Так далеко вглубь статьи я не дочитал. :) Витя, видимо, тоже, иначе не писал бы этот пост. ;)) Действительно, y[n]=... - готовая формула для численной реализации.
(Ответить) (Parent) (Thread)


torrio
Link:(Link)
Time:2010-03-31 03:13 pm
FFT, как и вообще FT - крайняя мера. Нам нужно в реальном времени считать. Ну, почти в реальном. FFT, путь оно даже и Fast, но всё равно в каком-то смысле slow:-(
(Ответить) (Parent) (Thread)


codenamed
Link:(Link)
Time:2010-03-31 03:37 pm
А что обрабатываете, если не секрет, конечно? :)
(Ответить) (Thread)


torrio
Link:(Link)
Time:2010-04-01 08:05 am
Сигналы с датчиков V-Link.
(Ответить) (Parent) (Thread)


ftdf
Link:(Link)
Time:2010-03-31 05:44 pm
Тебе нужен IIR фильтр:

y[n] = b_0*x[n] + b_1*x[n-1] + b_2*x[n-2] - a_1*y[n-1] - a_2*y[n-2]

Это фильтр второго порядка (biquad). Передаточная функция:

H(z) = (b_0 + b_1/z + b_2/z^2)/(1 + a_1/z + a_2/z^2)

переменная z принимает значения е^(i*2*pi*f/f_s) где f_s - частота дискретизации.

Фильтры более высокого порядка разумно делать каскадом секциий второго порядка. Для каждой секции нужно хранить два предыдущих входных и выходных значения. Коэффициенты можно посчитать в Matlab (или бесплатной octave):

[B, A] = cheby1(2, .5, 2*5/100)

Это фильтр Чебышева, второго порядка, 0.5 дБ ripple, частота среза 5 Гц (при частоте оцифровки 100 Гц).

Характеристику фильтра можно посмотреть командой

freqz(B, A, [], 100)

(Ответить) (Thread)


torrio
Link:(Link)
Time:2010-03-31 05:52 pm
Спасибо, Дима! Большое спасибо.
(Ответить) (Parent) (Thread)


ftdf
Link:(Link)
Time:2010-03-31 06:06 pm
Не за что. Будут ещё вопросы - пиши. Есть масса вариантов реализации фильтров: формы I, II, прямые и транспонированные, и т.д.
(Ответить) (Parent) (Thread)


tkachenko_e_i
Link:(Link)
Time:2010-04-01 06:21 pm
Пойду сожгу свой красный диплом и кандидатские корочки заодно :(
(Ответить) (Thread)


torrio
Link:(Link)
Time:2010-04-02 07:24 pm
Да ладно, всё фигня, ты же совершенно другими вещами профессионально занимаешься... Как и я, впрочем.
(Ответить) (Parent) (Thread)

(Anonymous)
Subject:serg14
Link:(Link)
Time:2010-04-02 06:51 pm
Hehe, ya smotryu Vitek udarilsya v DSP :-)
"Хочется применить к этому сигналу фильтр Чебышева" -- eto realizaciya, i skoree vsego neoptimal'naya. Zadacha-to v chem?
(Ответить) (Thread)


torrio
Subject:Re: serg14
Link:(Link)
Time:2010-04-02 07:23 pm
Задача в том, чтобы отфильтровать релевантные компоненты сигнала. У нас систематические компоненты возникают с частотой больше допустимой, и с высокой амплитудой. Это препятствует нормальной работе системы (интерфейс человек-компьютер, как в фильме "Матрица").

Edited at 2010-04-02 19:24 (UTC)
(Ответить) (Parent) (Thread)

serg14
Subject:Re: serg14
Link:(Link)
Time:2010-04-02 09:14 pm
Ничего не понятно. Помог Чебышев? Есть спектр сигнала до и после?
(Ответить) (Parent) (Thread)

[icon] Need help - Lorem Ipsum igitur, juvenes dum sumus — ЖЖ
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (Мой сайт).