Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что такое mu в демодуляторах Petrova
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
bigo
Помогите пожалуйста разобраться с этим mu в схемах демодуляторов Petrova. Я так понимаю что это значение которое формируется в зависимости от значения временной ошибки и сдвигает сигнал в нужном направлении. Я с англ. не дружу поэтому возникли вопросы в схеме, они отмечены на схеме.
Нажмите для просмотра прикрепленного файла

Первый и четвёртый вопрос мне вообще не понятен. Во втором вопросе я интуитивно :-) чувствую что это какой то стробирующий сигнал, но зачем он нужен не знаю. Третий вопрос, исходя из второго, напрашивается что это компаратор, который выдаёт 1 если первый сигнал меньше второго и 0 если больше, это правильно? А в пятом вопросе я нашёл определение этой функции в инете и там написано что это возвращает остаток от деления X на Y, а зачем это делается здесь не знаю?
И ещё вопрос в книге Незами на схемах нарисовано что временная ошибка подаётся сразу на интерполятор без этого NCO который и вырабатывает mu, возможно сделать без NCO, если да то как и куда именно нужно тогда подавать временную ошибку в интерполяторе.

Извините если есть глупые вопросы, я только учусь rolleyes.gif
petrov
1. Это enable который включает домен в котором осуществляются вычисления один раз за символьный интервал, например принимается решение какой символ передавался, подробнее смотрите в блоке который этот сигнал включает.

2,3. Да.

4. Там по модулю 2 это однобитный счётчик, который делит сигнал включения двух отсчётов на символ пополам, можно выкинуть 1/2 и round и выделение фронта, не обращайте внимания, это тянется из других моделей с экспериментами на тему DDS.

5. Эта оперция по модулю 4 позволяет сделать 2-х битный счётчик, который переполняется один раз за 4 отсчёта, таким образом получаем 2 строба на восьми отсчётный символьный интервал.

Не ленитесь временные диаграммы сигналов в различных точках смотреть.

По DDS литературу посмотрите чтобы понять как NCO работает. А операцию по модулю мы все интуитивно умеем делать на примере mod 2pi, когда угол за 2pi переваливает мы автоматом 2pi отбрасываем, и никакой операции деления не нужно.

Без NCO сделать нельзя, в книжках упрощенно нарисовано, подразумевается что вы сами догадаетесь как все детально сделать.
bigo
спасибо большое, надо переварить и попробовать, возникнут вопросы напишу. А что такое DDS ?

Всё, с DDS разобрался
bigo
А какая сдесь задача NCO ? help.gif
petrov
Цитата(bigo @ Jun 9 2010, 20:55) *
А какая сдесь задача NCO ? help.gif


NCO генерирует два строба на символьный интервал и дробную задержку mu. Два строба поскольку для работы детектора временной ошибки Гарднера требуется 2 отсчёта на символьный интервал, в установившемся режиме один строб попадает в оптимальный отсчёт на выходе согласованного фильтра, другой строб попадает между символами(разумеется с точностью частоты дискретизации). mu управляет интерполятором чтобы точнее вычислить сигнал между исходными отсчётами.
bigo
Спасибо
bigo
После детектора Гарднера стоит петлевой фильтр (рис) Нажмите для просмотра прикрепленного файла.
Вопросы:
- правильно ли я написал алгоритм роботы этого фильтра. Этот алгоритм стоит в цикле программы.
- как расчитываются коэфициенты? Привидите пример рассчёта если не трудно.
Спасибо
petrov
Неправильно.

Читайте литературу по ФАПЧ.
bigo
Я бы с удовольствием, да она в большинстве на англ. А я англ. не знаю. На русском всё что читал не формул по расчёту коэффициентов не находил. А по поводу алгоритма, подскажите плиз где не правильно. В Z я держу предыдущее значение. Не могу понять где ошибка? Я же только учусь :-)
thermit
Все просто, как палка от швабры:

out(n) = 0.0625*in(n) + z(n-1)

z(n) = 0.00390625*in(n)+z(n-1)

Вообще, всю эту лупфильтревую требуху можно привести к каноническому виду, если есть желание
bigo
Большое спасибо Вам, а как расчитываются эти коэфициенты
des00
Цитата(bigo @ Jun 22 2010, 12:07) *
Большое спасибо Вам, а как расчитываются эти коэфициенты

проще подобрать по месту, по форме переходной характеристики
thermit
Цитата
bigo:
как расчитываются эти коэфициенты



0.00390625 = c
0.0625 = d

Дык вот, этот фильтр лучше представить в форме H(z) = k*(z - a) / (z - 1)

Здесь k = d
a = 1 - c/d



k и a расчитываются так:

k = 2*(1 - exp(-alpha*Ts)*cos(beta*Ts))

a = (1 - exp(-2*alpha*Ts)) / k


alpha определяет полосу фап: BW ~ alpha/pi Hz Чем уже полоса, тем тормознее будет фап, тем меньше будет его шум.

beta определяет частоту, на которой у петли фап будет резонанс

Ts = 1 / символьную скорость

Ну и для примера:

alpha = 1 / (20*Ts)
beta = pi/6*(1/Ts)
Ts = 1/2400

даст полосу ~ 40 Гц и резонансом на частоте 200 Гц



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


Сурово...

Цитата
т. к. в коэффициенты надо включать коэффициенты передачи детектора, регулирующего элемента и т. п.


Ну, естественно, подразумевается, что к-ты передачи детектора и рэ - 1, а итп отсутствуют в принципе...


Цитата
Коэффициент передачи детектора зависит от наличия символьных переходов.


Ни к какому типу детектора этот расчет не привязан.


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


С этим трудно не согласиться...
bigo
Посмотрите плиз, у кого есть время, правильно ли я написал код к схеме NCO


Это всё в цикле
//===============NCO=================================//
errt:=1-(errt*sps); // errt - это временная ошибка после петлевого фильтра
point_a:=(bufnco-(floor(bufnco/2)*2))-errt;
bufnco:=point_a;
//===========enabled sybsystem============================//
if bufnco<0 then underflow:=1 else underflow:=0;
if underflow=1 then
begin
mu:=bufnco;
point_b:=1+(point_b-(floor(point_b/2)*2));
2_sps:=round(point_b);
end;
sps_enable:=2_sps*underflow;

И ещё, может глупый вопрос, но всё же - как определять коэффициент передачи детектора Гарднера и NCO ? Или дайте ссылку где можно почитать

Спасибо
petrov
Вот Alex65111 нашёл неплохой источник:
http://electronix.ru/forum/index.php?s=&am...st&p=790106
bigo
Да, действительно не плохой, спасибо, я его уже изучаю, но там, как мне показалось, есть не много различий между Вашими моделями и теми скриптами что наведены в источнике. А я как бы взял за основу вашу модель. Может я ещё не совсем хорошо разобрался. sad.gif Временной детектор там используется ZCTED, я про такой даже не слыхал sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.