|
|
  |
Вычисление скорости звука на dsPIC, Алгоритм вычисления сдвига фазы синусоидального сигнала |
|
|
|
Feb 21 2015, 16:48
|

Частый гость
 
Группа: Свой
Сообщений: 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 / PITus – период возбуждающего сигнала в мкс. PI это Пи  Ф-ция atanf возвращает значения в диапазоне от –PI до +PI. А фаза принимаемого сигнала может уменьшаться или возрастать на несколько периодов. Если скорость изменения фазы не превышает PI за период, это не проблема, у меня предусмотрена переменная, накапливающая значение фазы и суммирующаяся с результатом. Но иногда фаза меняется быстрей. Хотя это происходит редко и в ходе нормальной эксплуатации изделия вообще происходить не должно, к тому же в изделии предусмотрена специальная кнопка, сбрасывающая накопленную ошибку, если таковая возникнет, все-таки на душе как-то не спокойно. Вот и решил обратиться к многоуважаемым матерым ЦОСникам DSPшникам – поделитесь соображениями, как решить эту задачу поизящней. Это был первый вопрос, теперь второй. 2. Сначала я пытался вычислить изменение скорости звука посылая в звуковой тракт одиночный импульс, принимал его, и, имея в памяти МК образ (набор отсчетов), этого импульса, искал максимум ф-ции взаимной корреляции принимаемого в течении некоторого времени сигнала с этим образом. Скорость АЦП на борту 1Мвыб, мне нужно принимать 2 одинаковых канала, соответственно 500 квыб., отсюда точность определения времени пробега 200нс (или +- 100). И это если брать выборки с максимальной частотой, а памяти в dsPICе в обрез. Заказчик прости «чем точней тем лучше», и 200нс его не устраивает. Применил изложенный выше способ – получилось значительно точней, даже при кол-ве выборок на период порядка 80. По крайней мере, создалось впечатление, что получилось точней. Результат-то получается не в виде номера отсчета, т.е. целочисленного значения, как при поиске максимума в ф-ции взаимной корреляции, а аргумент atanf() в виде числа с плавающей точкой. Так вот собственно вопрос – как оценить точность метода, описанного в первом вопросе?
|
|
|
|
|
Feb 22 2015, 08:32
|
ʕʘ̅͜ʘ̅ʔ
    
Группа: Свой
Сообщений: 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) 
|
|
|
|
|
Feb 22 2015, 14:23
|

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

|
Благодарю за дельные мысли, буду их думать и гуглить незнакомые слова stealth-coder C фазой можно поиграть, это с помощью DDS легко осуществить, надо будет попробовать. Fat Robot Запускать сразу две гармоники кажется очень удачной идеей, у меня как раз на плате еще одна DDS имеется, жаль конечно, что сразу ЦАП не сделал, было бы больше возможностей. Но, предвидятся и сложности. Система, состоящая из динамика, звуковода и мирофона (у него внутри есть маленькая полость), обладает хитрыми свойствами. Как показали эксперименты, у нее есть несколько резонансных частот, 4кГц, 7кГц, 12кГц, и еще где-то в районе 16кГц, (слышал такое умное слово, не знаю на сколько оно в данном случае применимо, "система с распределенными резонансами"). Так вот, раскачав ее на одной частоте и затем пытаясь перевести на другую частоту или изменяя фазу, получаем сложный переходной процесс. Я так понимаю, что газ в полости перед мембраной динамика, воздушная среда в воздуховоде и среда в полости микрофона, каждый "звенит" на своей резонансной частоте и должно пройти время (несколько периодов, а может и штук 10-15), пока они там друг с другом "договорятся". В общем, это я к тому, что мне придется повозится чтобы подобрать частоты или способ изменения фаз посылаемого сигнала.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|