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

 
 
> Вычисление скорости звука на 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
Ответов
Gleb80
сообщение Feb 22 2015, 14:23
Сообщение #2


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

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



Благодарю за дельные мысли, буду их думать и гуглить незнакомые слова sm.gif
stealth-coder C фазой можно поиграть, это с помощью DDS легко осуществить, надо будет попробовать.
Fat Robot Запускать сразу две гармоники кажется очень удачной идеей, у меня как раз на плате еще одна DDS имеется, жаль конечно, что сразу ЦАП не сделал, было бы больше возможностей.
Но, предвидятся и сложности. Система, состоящая из динамика, звуковода и мирофона (у него внутри есть маленькая полость), обладает хитрыми свойствами. Как показали эксперименты, у нее есть несколько резонансных частот, 4кГц, 7кГц, 12кГц, и еще где-то в районе 16кГц, (слышал такое умное слово, не знаю на сколько оно в данном случае применимо, "система с распределенными резонансами"). Так вот, раскачав ее на одной частоте и затем пытаясь перевести на другую частоту или изменяя фазу, получаем сложный переходной процесс. Я так понимаю, что газ в полости перед мембраной динамика, воздушная среда в воздуховоде и среда в полости микрофона, каждый "звенит" на своей резонансной частоте и должно пройти время (несколько периодов, а может и штук 10-15), пока они там друг с другом "договорятся". В общем, это я к тому, что мне придется повозится чтобы подобрать частоты или способ изменения фаз посылаемого сигнала.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Feb 22 2015, 16:08
Сообщение #3


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

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



Придется калибровать систему для двухчастотного метода, чтобы понять, какой набег фазы вносят компоненты системы для каждой из частот.

Цитата(Gleb80 @ Feb 22 2015, 15:23) *
Но, предвидятся и сложности. Система, состоящая из динамика, звуковода и мирофона

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 07:14
Рейтинг@Mail.ru


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