![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Собственно вопрос вот в чём уменя есть два сигнала полученых с LinIn разность фаз которых равно 90 градусов но на самом деле там не совсем 90 вот надо както компенсировать это отклонение от 90 градусов. Как это сделать
Это сообщение отредактировал(а) ivan219 - 12.11.2008, 16:58 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
В продолжении темы про фурье, комплексный спеткр можно представить в тригонометрической форме R(n) * e^(i * FI(n)) . Rn - длинна вектора имеющего начало в начале системы координат и концом в точке на комплексной плоскости с координатами (Re(n), Im(n)) для n-й частоты, FI(n) - угол вектора относительно оси Х. Форму R(n) * e^(i * FI(n)) получается из R(n)*(Cos(FI) + i*Sin(FI)). Соответственно после перевода в тригонометрический вид нужно к углу F(n) добавить 90 градусов, тогда получим для m й частоты (2й частоты)
R(m)*(Cos(FI(n) + 90) + i*Sin(FI(n) + 90)), преобразуя к алгебраическому виду имеем Re(m) = R(m)*Cos(FI(n) + 90); Im(m) = R(m)*Sin(FI(n) + 90); Дальше если еще вспомнить тригонометрию, то Cos(FI(n) + 90) = - Sin(FI(n)), а Sin(FI(n) + 90) = Cos(FI(n)), в результате Re(m) = - R(m)*Sin(FI(n)); Im(m) = R(m)*Cos(FI(n)); Напомню еще что R(m) вычисляется как Sqrt(Re(m)^2 + Im(m)^2), а FI(n) = arctTg(Im(n) / Re(n)); Итого окончательно имеем новые Re` и Im` Re`(m) = - Sqrt(Re(m)^2 + Im(m)^2) * Sin(arctTg(Im(n) / Re(n))); Im`(m) = Sqrt(Re(m)^2 + Im(m)^2) * Cos(arctTg(Im(n) / Re(n))); Далее исправленные значения комплексного спектра записываем на место старых и делаем обратное преобразование фурье, в результате волны должны сместиться так что угол будет составлять 90 градусов. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Спасибо.
Но немного не то что я хотел. Мне надо чтобы после фильтрации вот тут DuolChanal[I * 2] было по фазе 0 а здесь DuolChanal[I * 2 + 1] должно быть 90 на самом деле в нём после генератора 89 это для примера а надо сделать 90
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Тогда еще проще, просто вычислить амплитуду, подставить свою фазу и обратным фурье получить нужный сигнал.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
||||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Alexeis, и ещё тут Re(m) = R(m)*Cos(FI(n) + 90); Im(m) = R(m)*Sin(FI(n) + 90); вот эти m и n их значение одинаково или нет.
Если я правильно понял то должно быть так: Re(1) = R(1) * Cos(FI(1) + 90); Im(1) = R(1) * Sin(FI(1) + 90); Да??? Это сообщение отредактировал(а) ivan219 - 13.11.2008, 16:12 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Гмм... чет я ничего не понял. Фаза 90 градусов относительно чего?
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Есть массив DuolChanal размеров 2048. Вот так он заполняется
Внутри получается 2 сигнала: 0, 2, 4....2046 один сигнал с фазой 0 градусов. (F / 1024) 1, 3, 5....2047 второй сигнал с фазой 90 градусов. (F / 1024) После чего делаем БПФ и теперь если менять частоту Frequency то всегда будит видно 1 отсчёт сночало положительной частоты от 0 до 48000 потом отрицательной частоты от -48000 до 0. Вся соль в том чтобы второй сигнал был равный по амплитуде и отстовал на 90 градусов по сравнению с первым соответственно частоты тоже должны совподать т.е. надо A1 = A2; F1 = F1; Fi1 = Fi2 - 90; Вся информация поступает с входа LinIn звуковой карты и несовсем в той форме какую надо вот и приходится программно коректироват амплитуду и фазу привости их к виду A1 = A2; F1 = F1; Fi1 = Fi2 - 90; Это сообщение отредактировал(а) ivan219 - 13.11.2008, 20:24 |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Воот, тогда то что я написал в начале как раз то что нужно -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Не совсем надо в нести некоторую по правку, унас 2 вектра крутятся и если все числа исправить так: Re(m) = R(m)*Cos(FI(n) + Fi'); Im(m) = R(m)*Sin(FI(n) + Fi'); То получаем искажение. Надо для положительной частоты делать так: Re(m) = R(m)*Cos(FI(n) - Fi'); Im(m) = R(m)*Sin(FI(n) - Fi'); А для отрицательной: Re(m) = R(m)*Cos(FI(n) + Fi'); Im(m) = R(m)*Sin(FI(n) + Fi'); И того имеем:
единственно что плохо так это что нужно делать прямое и обратное БПФ второго сигнала для исправления амплитуды и фазы, а потом уже общее БПФ для двух. Какбы это обойти? Чтобы при основном БПФ происходила компенсация фазы и амплитыды. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Это еще зачем? Если сделаешь общее БПФ, то на нем можно отдельно работать с каждой из составляющих спектра и менять фазу независимо для каждой волны. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 4 Всего: 12 |
Финал.
Не всё оказалось так просто!!! В архиве пример может кому пригодится. Присоединённый файл ( Кол-во скачиваний: 10 )
Fi.rar 180,94 Kb |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |