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

 
 
> Вычисление скорости звука на dsPIC, Алгоритм вычисления сдвига фазы синусоидального сигнала
Gleb80
сообщение Feb 21 2015, 16:48
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 25-09-08
Из: Москва
Пользователь №: 40 470



Приветствую, уважаемые!
1. Требовалось измерить изменение скорости звука в некотором объеме. Для этого была собрана схема на баз dsPIC33F (далее МК). Генератор звуковых сигналов состоит из DDS AD9834 и усилителя мощности. Клоки на МК и на DDS приходят от одного источника, т.е. у них единая точка отсчета времени. Синусоидальный сигнал с DDS идет на динамик, который возбуждает звуковые колебание в интересующем объеме, колебания принимаются микрофоном, затем усилитель, фильтр и АЦП на борту МК. Частота звуковых сигналов в районе нескольких кГц. В МК заранее сформированы 2 массива значений синуса и косинуса, с количеством отсчетов равным количеству выборок на период принимаемого сигнала. Для того, чтобы жестко привязать выборки к началу периода посылаемого сигнала от DDS на МК заведен сигнал прямоугольной формы, при «+» полуволне он имеет знач-е 1, а при «-» 0. От этого сигнала настроено прерывание.
Ну так вот, затем вычисляю корреляцию принимаемого сигнала s(n) с таблицами синуса и косинуса (SUMn – это сумма по n):
Re = SUMn( s(n) * cos(n) )
Im = SUMn( s(n) * sin(n) )

это сделано на ассемблере, чтобы побыстрей.
Затем, вычисляю сдвиг фазы в радианах с помощью библиотечной ф-ции:
Arg = atanf(Im, Re)
Сдвиг фазы в микросекундах
deltaT = Tus * 180 *Arg / PI
Tus – период возбуждающего сигнала в мкс.
PI это Пи sm.gif
Ф-ция atanf возвращает значения в диапазоне от –PI до +PI. А фаза принимаемого сигнала может уменьшаться или возрастать на несколько периодов. Если скорость изменения фазы не превышает PI за период, это не проблема, у меня предусмотрена переменная, накапливающая значение фазы и суммирующаяся с результатом. Но иногда фаза меняется быстрей. Хотя это происходит редко и в ходе нормальной эксплуатации изделия вообще происходить не должно, к тому же в изделии предусмотрена специальная кнопка, сбрасывающая накопленную ошибку, если таковая возникнет, все-таки на душе как-то не спокойно. Вот и решил обратиться к многоуважаемым матерым ЦОСникам DSPшникам – поделитесь соображениями, как решить эту задачу поизящней.

Это был первый вопрос, теперь второй.

2. Сначала я пытался вычислить изменение скорости звука посылая в звуковой тракт одиночный импульс, принимал его, и, имея в памяти МК образ (набор отсчетов), этого импульса, искал максимум ф-ции взаимной корреляции принимаемого в течении некоторого времени сигнала с этим образом. Скорость АЦП на борту 1Мвыб, мне нужно принимать 2 одинаковых канала, соответственно 500 квыб., отсюда точность определения времени пробега 200нс (или +- 100). И это если брать выборки с максимальной частотой, а памяти в dsPICе в обрез. Заказчик прости «чем точней тем лучше», и 200нс его не устраивает. Применил изложенный выше способ – получилось значительно точней, даже при кол-ве выборок на период порядка 80. По крайней мере, создалось впечатление, что получилось точней. Результат-то получается не в виде номера отсчета, т.е. целочисленного значения, как при поиске максимума в ф-ции взаимной корреляции, а аргумент atanf() в виде числа с плавающей точкой. Так вот собственно вопрос – как оценить точность метода, описанного в первом вопросе?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Fat Robot
сообщение Feb 22 2015, 08:32
Сообщение #2


ʕʘ̅͜ʘ̅ʔ
*****

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



Делаете вы всё совершенно правильно. Для разрешения фазовой неоднозначности вам нужно передавать 2 или более синусоид, последовательно, а лучше одновременно, обрабатывать их аналогично вашему п.1. Например, если F1= 997 гц, F2=1003 гц, то вы сможете разрешить фазовую неоднозначность на интервале 1с. Естественно при интервалах накопления, при которых будет выполняться условие ортогональности для этих синусоид.

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

Оценка snr также даcт вам представление о точности вашего метода : посмотрите, например Тихонов В.И. Статистическая радиотехника. Там рассказано, как отношение сигнал-шум в канале с абгш для синусоидального сигнала пересчитывается в параметры распределения фазы. Тут уже будет нужна 'правильная' оценка snr.

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

Увеличение частоты отсчетов до уровней много выше частоты Найквиста не даст никакого выигрыша. Выигрыш даст количество не коррелированных отсчетов, т.е. время накопления. Вполне достаточно около 4-10 отсчетов за период. Умножение и накопление вы можете делать 'на лету', это снизит требования к объёму памяти.

Опорные сигналы sin и cos лучше формировать тем же способом, что и в dds.

Цитата(Gleb80 @ Feb 21 2015, 17:48) *
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 19:19
Рейтинг@Mail.ru


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