Перейти к содержанию
    

Измерение разности фаз

Какой алгоритм лучше использовать?, для измерения разности фаз двух гармонических сигналов 10Кгц  сигналы не сильно зашумлены разница меду сигналом и шумом примерно 30дб  . Амплитуда меняется от 10в до 2в на обоих сигналах плавно но не одинаково (это датчик расстояния)  зависит от расстояния. Амплитуду не нужно учитывать. Нужно измерять только разницу фаз , частота стабильная +-10гц.  Задача измерить насколько можно точно и быстро 10мс. и не дорого )  Так же есть сигнал постоянный амплитудного значения этих сигналов от 0 до 10в. 

Так как сигнал низкочастотный то  думал преобразовать его в меандр и завести на таймер микроконтроллер stm32h723 у этого мк. таймеры работаю на Мгц использовать один сигнал как старт а другой как стоп счета.

Второй вариант зависти сигналы на ацп. Этот вариант больше ресурсов займет точность увеличиться или нет не знаю ? сомнения то что это сложнее и больше ресурсов мк. будет расходовать это точно.

Третий вариант использовать первый и второй вариант. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем gridinp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если таймером посчитать период импульсов после 360 разделить на  результат это будет значение одного отсчета а потом измерять через xor 2 сигналы и умножить на один отсчет будет угол.  Какой способ будет точнее мне хочется найти способ который будет точнее сначала теоретически а потом я проверю на железке ) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, SergeyVas сказал:

Если таймером посчитать период импульсов после 360 разделить на  результат это будет значение одного отсчета а потом измерять через xor 2 сигналы и умножить на один отсчет будет угол.  Какой способ будет точнее мне хочется найти способ который будет точнее сначала теоретически а потом я проверю на железке ) ?

Теоретически точно фазу меряют перенося сигнал на низкую ПЧ где это дслеать просто. Т.е. домножаем на 10001Гц и получаем 1 Гц с той же фазой. Которую уже можно легко и просто измерять. 

но у вас ограничение по времени. Мол нужен ответ 100 раз в секунту. Т.е. переносить вниз можно лишь до 100 гц... что тоже неплохо :))

Но можно без переноса. Просто интегреровать xor двух сигналов. В результате аналоговый уровень будет пропорционален фазе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 минуты назад, SergeyVas сказал:

Если таймером посчитать период

Похоже, Вы ни разу этого не делали.

Берётся постоянно работающий таймер на максимальной частоте, затем, для измерения его защёлками (capture), т.е. две одного и того же, на их входы (у каждой он свой) подаются сигналы с двух компараторов, причём, заведомо смещённых от нуля, в данном случае, порядка +500 мВ, тогда три перепада дают частоту, фазу и полярность сигналов — каждая меньшая разность двух перепадов это положительная полуволна, далее вычисляете среднее каждых двух перепадов, это будут 90° и 270°, одноимённые разности которых это фаза, которую затем усредняете, т.е. этот способ даёт результат каждый полупериод.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/22/2024 at 3:32 PM, Plain said:

Похоже, Вы ни разу этого не делали.

Берётся постоянно работающий таймер на максимальной частоте, затем, для измерения его защёлками (capture), т.е. две одного и того же, на их входы (у каждой он свой) подаются сигналы с двух компараторов, причём, заведомо смещённых от нуля, в данном случае, порядка +500 мВ, тогда три перепада дают частоту, фазу и полярность сигналов — каждая меньшая разность двух перепадов это положительная полуволна, далее вычисляете среднее каждых двух перепадов, это будут 90° и 270°, одноимённые разности которых это фаза, которую затем усредняете, т.е. этот способ даёт результат каждый полупериод.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, spirit_1 сказал:

не просто компараторы а усилители ограничители

Это уничтожит амплитуду, тогда как с компараторами она видна в виде Кзап ШИМ, плюс она у автора есть в явном виде, хотя он не сказал, на какой момент.

Похоже, у автора синус двуполярный, а у МК питание однополярное, тогда преобразовать ±10 В можно посредством BAW56 — аноды через резистор на +3,3 В, на катод сигнал, второй катод на вход компаратора и резистор на общий провод.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да не приходилось делать. Синус двух полярный, сигнал амплитуды есть с отдельного операционного усилителя он соответствует амплитудному значению сигналов. В любой момент можно считать. Есть две ацп ads8681 могу на них завести  в микроконтроллере есть cordic  только с ацп думаю вариант дороже, сильнее будет грузить проц , программно сложнее, а точность значительно не увеличиться по сравнению с компараторами. Поправте если ошибаюсь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, SergeyVas said:

Второй вариант зависти сигналы на ацп. Этот вариант больше ресурсов займет точность увеличиться или нет не знаю ? сомнения то что это сложнее и больше ресурсов мк. будет расходовать это точно.

точность от АЦП конечно зависит, но я много раз такие вещи считал в цифре и хочу вас склонить к этому методу 🙂

Вам надо оцифровать два сигнала длительностью больше, чем одна амплитуда, и на основе этого набора чисел можно посчитать сдвиг фаз. Вычислительная стоимость будет несколько синусов/арктангенсов + сколько-то (константное число около полусотни) арифметических операций + 7*n умножений и 7*n сложений, где n - число оцифрованных точек. В вашем случае, если оцифровывать на частоте 500кГц, скажем примерно 5 периодов, то есть 0.5мс, то должно хватить с очень большим запасом да и процессор, как а понимаю, должен справиться.

 

Что именно делать могу рассказать, но будет заумно. Если решитесь, могу запрограммировать (вытащив из своих наработок) и здесь выложить.

 

Ключевая идея в следующем: у вас есть два сигнала, f(x), g(x), каждый из которых есть сумма синуса и косинуса с одной и той же частотой. Вы к этому всему добавляете еще пару сигналов f(x+dx), g(x+dx), где dx - шаг оцифровки, и получаете уже набор из 4 таких сумм. На них надо набросить сингулярное разложение и вытащить две самые "численно яркие" функции, которые как раз соответствуют этим синусам и косинусам. Если не добавить f(x+dx), g(x+dx) - вы получите только линейную комбинацию с шумами, и это вас тотально запутает. Получив синусы и косинусы надо только посчитать МНК каждого из сигналов в терминах этих синусов и косинусов, а потом по коэффициентам выполнить тригонометрическую формулу и посчитать фазу.

 

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

 

EDIT: то, что я предлагаю относится к классу алгоритмов Generalized pencil-of-function method и метода Прони, ссылки на эти методы конечно же гуглятся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

55 minutes ago, SergeyVas said:

Есть две ацп ads8681 могу на них завести  в микроконтроллере есть cordic  только с ацп думаю вариант дороже, сильнее будет грузить проц , программно сложнее, а точность значительно не увеличиться по сравнению с компараторами. Поправте если ошибаюсь?

встроенных АЦП для 10кГц и 30дБ вроде как должно хватить с запасом.

при известной частоте косинусное преобразование делается парой целочисленных умножений на отсчёт. см. "Алгоритм Гёрцеля"

с компараторами ухудшение точности от уровня шума зависит, так как весь период превращается в одну единственную точку (перехода через 0), и соответственно все шумы делённые на производную сигнала прямиком попадают как ошибка фазы для всего периода. если же фаза считается умножением на синус/косинус через ДПФ, то шумы заметно давятся им как узкополосным фильтром и на фазу влияния оказывают меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, _pv said:

при известной частоте косинусное преобразование делается парой целочисленных умножений на отсчёт. см. "Алгоритм Гёрцеля"

а у ТС частота известна точно, или нет? Если точно, то да, Герцелем тоже можно, но ИМХО, еще проще и понятнее вообще через МНК оба сигнала по синусу, косинусу и константе разложить и по полученным коэффициентам посчитать фазу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для дальномера частоту ТС скорее всего сам себе и генерирует, так что должна быть известна.

при неизвестной частоте МНК делать как-то совсем не проще, а частота если известна, то вроде как вообще без разницы - результат будет одинаковый, но Гёрцель тригонометрию всю через одно единственное умножение считает.

а если частота известна "примерно", можно тем же Гёрцелем несколько точек вокруг посчитать, через них какую-нибудь параболу провести, найти где у неё максимум на самом деле и на этой частоте уже считать фазу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, _pv said:

для дальномера частоту ТС скорее всего сам себе и генерирует, так что должна быть известна.

по идее да, я тоже так вначале подумал, но если ТС аналогом где-то не в МК это делает и там еще какой-нибудь Доплер над ней шаманит, там может быть не все так просто. Но, дождемся ответа ТС.

4 minutes ago, _pv said:

а если частота известна "примерно", можно тем же Гёрцелем несколько точек вокруг посчитать, через них какую-нибудь параболу провести, найти где у неё максимум на самом деле и на этой частоте уже считать фазу.

ох от там глюков наловит, и данные все хранить надо. Там проще Фурьем грохнуть сразу и на спектральной части параболу строить, по крайней мере из коробки Фурье для STMов думаю, найти можно. Не спорю, что через сингулярное разложение посложнее для понимания, но арифметическая сложность совсем копеешная получается, и всегда во Фробениусовой норме все как-то надежнее и точнее вычисляется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, iiv said:

и данные все хранить надо. Там проще Фурьем грохнуть сразу 

для нескольких определённых частот ДПФ будет быстрее ФФТ, да и как раз на лету считается без буферизации вообще, в отличии от. И того же Гёрцеля можно попробовать скрестить с примитивным БИХ фильтром, чтобы он старые отсчёты "забывал" экспоненциально и просто на каждом новом отсчёте за нескольких умножений уточнять значение фазы за последние N милисекунд.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, _pv said:

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

согласен, что смысла нет, но Герцель-то тоже не бесплатно считается. Для последовательности из n чисел ему надо 6n операций, а ФФТ (при n=1024) потребует только 25n, то есть от 5-ой частоты ФФТ будет быстрее. Да и для Герцеля основное преимущество - работа на дробной частоте, но если она заранее не известна и подбирается, то тоже хранить все придется.

 

То есть будь я на месте ТС примерно с его уровнем знаний, и если бы частота точно известна была бы, то да, Герцелем или МНК, а если частота известна только прикидочно - тут все будет зависеть от того, что проще где-то утянуть, чтобы самому не отлаживать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...