реклама на сайте
подробности

 
 
> Как сдвинуть сигнал на 90 градусов?
eteP
сообщение Dec 29 2004, 16:08
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 50
Регистрация: 24-06-04
Пользователь №: 166



Всем привет.

Я недавно начал заниматься DSP и вот мне поставили задачу. Сделать систему которая сдвигает сигнал от 5 до 100 Гц на 90 градусов.

Дано:
Частота самлинга ADC 47кГц. На входе известно что будет только одна частота (с шумом ессесно) от 5 до 100 Гц. Нужно сдвинуть эту частоту на 90 убрать шум и выдать в DAC.
Таких каналов должно быть 220 штук.
Алгоритм(ы) должен быть готов через два месяца, а реализация в железе к концу августа (прототип).


Как это сделать:
1. Использовать Хильберт преобразование. Но его можно реализовать или с хорошей амплитудной характеристикой либо с фазавой. Фазовая важней.
Сделал up-sampling сигнала после ADC в 2 раза (потому как на 100 Гц сказывает групповая задержка). Но не добавлял 0, а дублирую значения. И прогоняю через фильтр. На выходе down-sampling в 2 раза. Из за up-sampling-а на выходе сигнал с высокочастотным шумом. Убирается довольно просто.
Далее приходится корректировать аплитуду сигнала. Аплитуда линейно зависит от частоты. По этому делаю down-sampling в 20 раз выходного сигнала для FFT. FFT делается по 512 точкам. Нахожу частоту и получаю коэфициент на который нужно домножить выходной сигнал что бы уровнь равнялся входному. И еще приходится сдвигать выходной сигнал по уровню. На сколько дает первый коэффициент FFT.
Все это написано на MatLab и вроде как работает.
Что здесь не устраивает: требуется много памяти учитывая что 220 каналов.

2. Использовать интегратор. Ситуация в точности такая-же как и в первом случае. Или я что-то не так делаю. Но этот вопрос изучается.

3. Идеальным было бы генерировать самим синусоиду. Но тогда надо знать: частоту, амплитуду и фазу входного сигнала. Как это все узнать?
FFT->частота. Найти фазу пока не получается (имеется ввиду простым способом).
Можно конечно сделать как написал st256. Но реализация на первый взгляд кажется сложней чем в случае 1. Да и не получается почему-то. Иногда находит фазу правильно иногда нет. Или я не правильно реализовал алгоритм. Мне кажется проще прибавить cos(wt) к исходному сигналу и взять acos от результата. Это и даст фазу. Но я не волшебник я только учусь.

4. ?????

Буду благодарен любому совету куда грести
Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jeka
сообщение Dec 31 2004, 10:23
Сообщение #2


Administrator
***

Группа: Свой
Сообщений: 400
Регистрация: 10-05-04
Пользователь №: 1



eteP
немного поразмыслив, придумал более простой и точный алгоритм.

Параметры (а точнее, частота настройки) двух полосовых фильтров подстраиваются в зависимости от разницы фаз гармонических колебаний, полученных на выходе этих фильтров в предыдущей итерации (полосовой фильтр сдвигает фазу гармонического сигнала на функцию, зависещую от отношения разницы частот фильтра и подаваемой на него частоты к полосе пропускания фильтра). Это даёт нам возможность по разности фаз этих полосовых фильтров определить отклонение частоты входного сигнала от средней частоты этих фильтров. Фильтры настраиваем на частоту сигнала, а полосы пропускания делаем различающимися в 2 раза. Соответственно, более узкий фильтр будет менять фазу в 2 раза больше широкого. По разнице показаний мгновенных значений фаз сигналов на выходе этих фильтров корректируем среднюю частоту фильтров.

Если на пальцах, то алгоритм такой:
1. Берем выборку для FFT такого размера, чтобы получить частоту с точностью 3 Гц и назовём её Фц.
2. Инициализируем параметры фильтров: полоса пропускания фильтров - 10 и 20 Гц. Оба фильтра настроены на частоту Фц.
3. Подаем входной сигнал на фильтры в течение 100 мсек.
4. Вычисляем мгновенное значение фазы сигнала на выходе первого и второго фильтра, вычисляем их разность (в градусах).

5. Перестраиваем фильтры на частоту, равную разности в градусах, умноженной на коэффициент, скажем, 0.001
6. Переходим на шаг 3
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016