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

 
 
> Реализация AGC на FPGA, Автоматический контроль усиления
vea
сообщение Jan 8 2014, 14:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 5-12-11
Из: Киев
Пользователь №: 68 692



Здравствуйте!
Попробовал смоделировать схему (с целью дальнейшей реализации в FPGA), предложенную в статье Carrier Recovery and Automatic Gain Control on
FPGA’s based platform
, рис. 8.
Результат неадекватный (начиная с некоторого момента алгоритм расходится). Менял параметры (наугад, поскольку никакой понятной теории не нашел), результата нет.
Может быть, кто-то сталкивался с этим?
Для сравнения - код по Незами (рис. 4-27). Тут все нормально, но это для double точности.
Или посоветуйте другие варианты - поиск пока лучших результатов не дал.
Спасибо!
Код
% input signal gereration start
N=5*1000; % length of input signal
ft=N/5;
fs=(1-1/5)*N;
A(1:N/5)= 2^5; % max values
A(N/5+1:2*N/5)  = 2^5;
A(2*N/5+1:3*N/5)= 2^8;
A(3*N/5+1:4*N/5)= 2^11;
A(4*N/5+1:5*N/5)= 2^7;
x= A.*exp(2*pi*j*ft*[1:N]/fs);
x=x.';
% input signal end
% initialization start
y1   = zeros(1,length(x));
y2   = zeros(1,length(x));
norm = zeros(1,length(x));
A1(1)= 0;  % Gain for exp
A2(1)= 1;  % Gain for linear
avg  = 0;
acc  = 0;
% initialization end

% PARAMETERS of AGC
R  = 10;     % reference
a1 = 0.0001; % for exp
K  = 9;
B  = 2^3; % length of buffer
% ---------

% main
for k=1:length(x)-1
% exp AGC (Nezami)
    y1(k) = 2^[A1(k)] * x(k);
    A1(k+1) = A1(k) + a1*(2^R - [abs(real(y1(k))) + abs(imag(y1(k)))]);
% linear AGC
    y2(k) = A2(k) * x(k);
    norm(k) = abs(real(y2(k))) + abs(imag(y2(k)));
    if (k<=B) % AVG in buffer
        avg = avg + norm(k);
    else
        avg = avg + norm(k)-norm(k-B);
    end
    diff    = 2^R - floor(avg/B);   % 2^R is reference level
    acc     = acc + diff;           % accumulator
    result  = floor(acc/2^K);      
    A2(k+1) = result;  
end
figure
subplot(311); plot([ real(x).' ]); grid;shg
subplot(312); plot([ real(y1).']); grid;shg
subplot(313); plot([ real(y2).']); grid;shg
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andyp
сообщение Jan 9 2014, 14:05
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



На счет литературы посоветовать не могу - набирался понемногу из разных книжек и собственных шишек sm.gif, используя здравый смысл и немного элементарной математики.

На счет задержки - детектор в петле АРУ использует усреднение для получения оценки мощности входного сигнала. Т.е. если мощность меняется в окне усреднения, то детектор выдаст нечто среднее для отсчетов, попавших в окно, соответствующее оценке мощности для одного из прошлых отсчетов. Рассмотрим почему это может быть плохо - если мощность меняется по синусоидальному закону, то оценка, полученная для "ямы" синуса будет в худшем случае из-за задержки применяться к "горбу" - на выходе получим большие колебания мощности, чем на входе. Т.е. петля может стать нестабильной. Обычно это не проблема в системах АРУ (мощность меняется медленно), но все-же... Это все можно почерпнуть из науки Control Systems, где рассуждают об устойчивости и phase margin. Поэтому разумно сузить полосу петли АРУ реже обновляя значение усиления (вовсе не обязательно обновлять усиление для каждого входного отсчета и использовать скользящую оценку мощности - можно просто взять кусочек сигнала, подсчитать оценку мощности, применить ее для следующего кусочка и т.п. - фактически, для оценки мощности используем интегратор со сбросом)

На счет деления - аккумулятор должен использовать т.н. fractional arithmetic (можно почитать wiki про fixed-point arithmetic и Q (number format)). Это просто - внутри разрядов аккумулятора ставим точку. Разряды до точки соответствуют целой части, после точки - дробной (т.е. фактически при использовании таких чисел оставляем сколько нам нужно дробных разрядов). Положение точки нужно учитывать при умножении и делении, нужным образом сдвигая результат. Точка не влияет на реализацию сложения и вычитания (оно такое же как и для обычных fixed-point целых чисел) . Про это есть в книжке Koren Computer Arithmetic Algorithms, но я бы не стал ее читать только ради этого sm.gif
Go to the top of the page
 
+Quote Post



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

 


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


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