![]() |
|
|
![]()
|
|
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
Кто-нибудь реализовывал какой-либо алгоритм фильтрации псевдо-случайного сигнала?
Я вот реализовал и мучаюсь -------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
а какой у тебя метод
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
А у меня такой метод...
Я не знаю как называется и кем придуман, но знаю что он имеет название. В массив загоняются последовательно результаты считывания, и по окончании заполнения массива происходит суммирование всех величин таким образом for (i=0;i<max;i++)tt+=a[i]*exp((i+1)/max-1), потом tt = tt / max; и значения массива "сдвигаются" и в конец добавляется последнее считанное значение и т.д. ... Можно без экспоненты -------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| SCHEPA |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 7.6.2003 Где: Н.Н. Репутация: нет Всего: нет |
Вопрос в том, что ты хочешь получить?
А метод если без экспоненты, то классическое мат. ожидание. --------------------
Так что в лучших книгах всегда нет имен... |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
Понятное дело. А если фильтровать периодичные величины? Например градусы.
Если я перехожу от 2* к 359* , то я вовсе не сдвигаюсь на 357*, а сдвигаюсь на 3* но против часовой стрелки. Как сделать, чтобы алгоритм это "понимал", а то такой "кривой" поворот получается Я пробовал делать условие: if (a[i]-a[i-1]>180)a[i]-=360; , но как-то оно странно работает -------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| SCHEPA |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 7.6.2003 Где: Н.Н. Репутация: нет Всего: нет |
Вообще, переход через ноль - самое больное место при обработке периодического сигнала. Не ты первый с этим мучаешься.
А как странно? --------------------
Так что в лучших книгах всегда нет имен... |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
НИКАК! Может я где-то что-то забываю, а у меня сигнал постоянно одинаковый и без фильтрации
-------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| SCHEPA |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 7.6.2003 Где: Н.Н. Репутация: нет Всего: нет |
пиши подробнее если нужна помощь. А так сложно разобраться.
--------------------
Так что в лучших книгах всегда нет имен... |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
Может, надо ещё елсе дописать? Вся проблема заключается в том, что при повороте "налево", то есть при изменении входного значения с 0* на 359* происходит поворот по большому кругу, то есть происходит плавный поворот: 0, 5, 15, 40, 100, 250, 359....
-------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
PostEr
По-моему, ты делаешь свертку. Для того, чтобы правильно "поворачивать" градусы, их совсем необязательно "вертеть". Перед выполнением свертки заполни вспомогательный массив, где с нужной тебе дискретностью будут записаны значения тех самых экспонент на интервале от 0 до двух "пи". А в цикле свертки просто умножай на значения соответствующих элементов этого массива. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Еще одна подсказка.
Convolution(x,y) = IFFT(FFT(x)*conj(FFT(y))) FFT - прямое пряобразование Фурье IFFT - обратное conj(A) - комплексно-сопряженное А |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
А чё такое преобразование Фурье?
Что такое "свёртка" -------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
| SCHEPA |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 7.6.2003 Где: Н.Н. Репутация: нет Всего: нет |
Преобразование Фурье - разложение функции в ряд по гармоническим функциям (sin, cos).
Свертка операция вида: z=Sum(x(i)*y(N-i)), i=0...N, Sum - операция накопления 2Poster: не-а, не свертку. По-моему, умножение на экспоненту - это весовая обработка, то есть последний принятый элемент у него участвует в формировании результата с наибольшим весом. --------------------
Так что в лучших книгах всегда нет имен... |
|||
|
||||
| PostEr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 30.6.2003 Где: Самара Репутация: нет Всего: 1 |
Умножение на экспоненту - действительно весовая обработка. Её можно было сделать линейной(вместо экспоненциальной), можно было сделать практически любой.
Какое вообще отношение Фурье имеет к этой задаче? Мне необходимо брать угол поврота с сельсинного датчика. Для этого я использую два сопряжённых круговых потенциометра, смещённых друг относительно друга на "зону нечувствительности", которая равна 30*. Для снятия параметров я использую АЦП, а точнее только 2 канала АЦП - соответственно первый и второй потенциометр. Характеристика каждого потенциометра U(alpha) пилообразна, но засчёт использования сопряжения и переключения между каналами мы получаем неразрывную прямую (?). Вроде всё так... ТАК! Дошло. Проблема в том, чо при повороте второго потенциометра в "обрыв" мы переключаемся на первый, на котором скажем 0*, а нам надо ещё к этому нулю добавлять "накрутку" первого!!!!!!!!!!!!!!!! ЭВРИКА!! -------------------- ------------------------------------------------------------------ [email protected] До востребования |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |