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

    

Вопрос по амплитудному детектору

Коллеги, есть такая схема : АЦП с тактовой 1100МГц - преобразователь Гильберта - прореживание на 4 - вычисление модуля комплексного сигнала - прореживание на 2 - слабенький ФНЧ - логарифм. Т.е. общий коэффициент децимации 8 и частота клока на выходных модулях ФНЧ и логарифма равна 137,5МГц. Проблема в том что при уменьшении уровня входного сигнала (на АЦП подаётся импульсный радиосигнал с генератора длительностью 10мкс) на выходе логарифма становится видно частоту биений между частотой радиосигнала и тактовой частотой 137,5МГц. На картинке видно это биение с частотой 2МГц при частоте радиосигнала 139,5МГц. Раньше эта схема работала с децимацией 16 раз - ничего подобного не замечалось. Модули,входящие в тракт,  не изменялись, изменился только второй коэффициент прореживания (вместо 4 стал 2). И в матлабе ничего подобного не наблюдается. Помогите,плз,разобраться. Я понимаю что сигнал с частотой 139,5МГц реально после децимации в 8 раз будет находиться на частоте 2МГц,но сигнал ведь комплексный, модуль должен остаться константой...

2018-10-29_153031.png

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


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

Я бы на косяк в модуле (или до него) поставил, если раньше этого не было видно - на выходе явно ж гармошка есть, которой там не должно быть - модуль комплексной экспоненты должен оставаться постоянным как его ни прореживай. Не видно ее могло быть из-за того, что ФНЧ ее отфильтровывал, а с уменьшением фактора прореживания его полоса раздулась, вот он и перестал. Гармоника из модуля может вылезти если например квадратуры брать несинхронно (re и im отсчеты сдвинуты относительно друг друга).

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


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

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

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


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

Большое спасибо, коллеги! Мне нужен был начальный толчок и я его получил. Очень похоже что вы оба правы - вычислитель модуля у меня работает без квадратов и корней, по Лайонсу. Отложил все дела и занялся этим вплотную.

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


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

Пришёл к выводу что и ПГ, и вычислитель модуля работают хорошо и не имеют никакого отношения к проблеме. А проблему создаёт постоянная составляющая во входном сигнале. Как-то упустил я при моделировании этот фактор. Величина амплитуды пульсаций как раз равна величине смещения. А так как вклад смещения наибольший при слабом входном сигнале то логарифм усиливает эту пульсацию(на этом участке большая крутизна). Причина возникновения пульсации понятна, а вот как решить проблему не ясно. Поставил перед ПГ блок автоматического устранения смещения, амплитуда пульсаций уменьшилась, но она остаётся видна - на картинке импульс неприятного вида. Буду рад выслушать любые советы.

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


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

Немного отвлёкся от этой темы, сейчас вот опять вернулся. Прихожу к выводу что блок автоматического устранения смещения и вычислитель модуля нужно выполнять в математике с плавающей точкой. Что скажете, коллеги?

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


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

Алгоритм аппроксимации модуля alpha*Min+betta*Max может дать такие волны, которые зависят от фазы сигнала, запросто.

Вы заменяли оценку abs на "правильное вычисление", сравнивали результаты? Какая у вас разрядность фиксированной точки?

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


Ссылка на сообщение
Поделиться на другие сайты
59 минут назад, coding4dsp сказал:

Алгоритм аппроксимации модуля alpha*Min+betta*Max может дать такие волны, которые зависят от фазы сигнала, запросто.

Вы заменяли оценку abs на "правильное вычисление", сравнивали результаты? Какая у вас разрядность фиксированной точки?

Так эти волны даже в матлабе есть. Взять идеальные sin,cos например амплитудой 10, и прибавить к ним небольшое смещение, например +1. После этого вычислить abs(x).

2018-12-18_161751.png

Комплексный сигнал на входе abs(x) перестаёт быть аналитическим со всеми вытекающими...

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


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

Тогда расскажите о реализации блока компенсации постоянной составляющей!

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, coding4dsp сказал:

Тогда расскажите о реализации блока компенсации постоянной составляющей!

Банальный сумматор с интегратором в обратной связи. Но у него всегда будет ошибка в пределах 1МЗР. На картинке видно к чему приводит такая ошибка.

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


Ссылка на сообщение
Поделиться на другие сайты
15 hours ago, _sda said:

Банальный сумматор с интегратором в обратной связи. Но у него всегда будет ошибка в пределах 1МЗР. На картинке видно к чему приводит такая ошибка.

отфильтрована нужная полоса, с учетом эффективной разрядности, сделано честное округление?

Ну и в вашем случае, радиосигнала, comb фильтр поставить или парочку не пойдет?

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


Ссылка на сообщение
Поделиться на другие сайты
В 18.12.2018 в 16:19, _sda сказал:

Так эти волны даже в матлабе есть. Взять идеальные sin,cos например амплитудой 10, и прибавить к ним небольшое смещение, например +1. После этого вычислить abs(x).

Не могу понять, как постоянная добавка приводит к порче abs(x). Может, из-за смещения по разному округляются верх и низ синусов с косинусами?

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


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, ViKo сказал:

Не могу понять, как постоянная добавка приводит к порче abs(x). 

Я ведь выше ответил - с добавкой сигнал перестаёт быть аналитическим. Ну представьте что Вы берёте от балды комплексный сигнал и считаете его модуль - получите мусор. Константа появится только для аналитического сигнала. Когда компоненты связаны уравнением A = SQRT(RE^2 + IM^2).

 

3 часа назад, des00 сказал:

отфильтрована нужная полоса, с учетом эффективной разрядности, сделано честное округление?

Ну и в вашем случае, радиосигнала, comb фильтр поставить или парочку не пойдет?

Comb фильтр стоит, после модуля, но тут компромисс - или давим пульсацию вместе с сигналом, или пропускаем сигнал вместе с пульсацией. Сейчас выбрана оптимальная полоса фильтра.

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


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

Abs() это расстояние от нулевой точки до комплексной точки на диаграмме квадратур. Для exp(1j*phi*t) колебания (круг на комплексной диаграмме) без всяких смещений и дисбалансов будет константа, а, например, DC смещение сдвинет круг куда-то в сторону, вот и расстояние от нулевой точки поплывет. 

Судя по амплитуде пульсаций, постоянка велика, как будто бы ее и не компенсировали. Неужели блок компенсации оставляют такое смещение? А какое время накопления в блоке оценки DC?

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


Ссылка на сообщение
Поделиться на другие сайты
18 минут назад, coding4dsp сказал:

Abs() это расстояние от нулевой точки до комплексной точки на диаграмме квадратур. Для exp(1j*phi*t) колебания (круг на комплексной диаграмме) без всяких смещений и дисбалансов будет константа, а, например, DC смещение сдвинет круг куда-то в сторону, вот и расстояние от нулевой точки поплывет. 

Судя по амплитуде пульсаций, постоянка велика, как будто бы ее и не компенсировали. Неужели блок компенсации оставляют такое смещение? А какое время накопления в блоке оценки DC?

А как по Вашему какое смещение должен оставить компенсатор? На мой взгляд +-1 при шине integer имеет право быть. Ведь компенсатор примет за ноль значения в диапазоне -1...+1 , ведь у целочисленных значений дробной части нет.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация