comm.AGC

Адаптивно настройте усиление для постоянного уровня выходного сигнала

Описание

comm.AGC Система object™ создает автоматический контроллер усиления (AGC), который адаптивно настраивает ее усиление, чтобы достигнуть постоянного уровня сигнала при выходе.

Адаптивно настраивать усиление для постоянного уровня выходного сигнала:

  1. Задайте и настройте свой автоматический контроллер усиления объект. Смотрите Конструкцию.

  2. Вызовите step адаптивно настроить усиление и достигнуть постоянного уровня сигнала при выходе согласно свойствам comm.AGC. Поведение step характерно для каждого объекта в тулбоксе.

Примечание

Запуск в R2016b, вместо того, чтобы использовать step метод, чтобы выполнить операцию, заданную Системным объектом, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x) и y = obj(x) выполните эквивалентные операции.

Конструкция

H = comm.AGC создает Системный объект AGC, H, это адаптивно настраивает его усиление, чтобы достигнуть постоянного уровня сигнала при выходе.

H = comm.AGC(Name,Value) создает объект AGC, H, с заданным свойством Name установите на заданный Value. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN).

Свойства

AdaptationStepSize

Размер шага для обновлений усиления

Задайте размер шага как действительную положительную скалярную величину. Значением по умолчанию является 0.01. Увеличение размера шага разрешает AGC более быстро отвечать на изменения на уровне входного сигнала, но изменение увеличений уровня выходного сигнала во время установившейся операции.

DesiredOutputPower

Целевой уровень выходной мощности

Задайте желаемый уровень выходной мощности как действительную положительную скалярную величину. Степень измеряется в Уоттсе, на которого ссылаются к 1 Ому. Значением по умолчанию является 1.

AveragingLength

Длина окна усреднения

Задайте длину окна усреднения в выборках как положительный целочисленный скаляр. Значением по умолчанию является 100.

Примечание

Если вы используете AGC с сигналами QAM высшего порядка, смотрите график рассеивания при выходе AGC во время установившейся операции и увеличиваете продолжительность усреднения, если вы видите частые корректировки усиления. Увеличение AveragingLength уменьшает скорость выполнения.

MaxPowerGain

Усиление максимальной мощности в децибелах

Задайте максимальное усиление AGC в децибелах как положительная скалярная величина. Значением по умолчанию является 60.

Большие корректировки усиления могут вызвать усечение, когда маленькая степень входного сигнала внезапно увеличивается. Используйте MaxPowerGain избегать больших корректировок усиления путем ограничения усиления, что AGC применяется к входному сигналу.

Методы

сбросСбросьте внутренние состояния автоматического контроллера усиления
шагПримените адаптивное усиление к входному сигналу
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

развернуть все

Применяйтесь различные продолжительности усреднения AGC к QAM модулировали сигналы. Сравните отклонение и график сигналов после того, как AGC будет применен.

Инициализируйте три Системных объекта AGC со средним набором длины окна к 10, 100, и 1 000 выборок.

agc1 = comm.AGC('AveragingLength',10);
agc2 = comm.AGC('AveragingLength',100);
agc3 = comm.AGC('AveragingLength',1000);

Сгенерируйте M-QAM модулируемый и повышенный косинус packetized данные импульсной формы.

M = 16;
d = randi([0 M-1],1000,1);
s = qammod(d,M);
x = 0.1*s;
pulseShaper = comm.RaisedCosineTransmitFilter;
y = awgn(pulseShaper(x),inf);

Примените AGC.

r1 = agc1(y);
r2 = agc2(y);
r3 = agc3(y);

Постройте и сравните сигналы.

figure(1)
subplot(4,1,1)
plot(abs(y))
title('AGC input')
subplot(4,1,2)
plot(abs(r1))
axis([0 8000 0 10])
title('AGC output (AveragingLength = 10 samples)')
text(4000, 5, sprintf('Variance = %f',var(r1(3000:end))))
subplot(4,1,3)
plot(abs(r2))
axis([0 8000 0 10])
title('AGC output (AveragingLength = 100 sample)')
text(4000, 5, sprintf('Variance = %f',var(r2(3000:end))))
subplot(4,1,4)
plot(abs(r3))
axis([0 8000 0 10])
title('AGC output (AveragingLength = 1000 samples)')
text(4000, 5, sprintf('Variance = %f',var(r3(3000:end))))

Когда продолжительность усреднения увеличивает отклонение при выходе уменьшений AGC.

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

Инициализируйте три Системных объекта AGC с максимальным набором значений усиления к 10 дБ, 20 дБ и 30 дБ.

agc1 = comm.AGC('MaxPowerGain', 10);
agc2 = comm.AGC('MaxPowerGain', 20);
agc3 = comm.AGC('MaxPowerGain', 30);

Сгенерируйте QPSK модулируемый и повышенный косинус packetized данные импульсной формы.

M = 4;
pktLen = 10000;
d = randi([0 M-1],pktLen,1);
s = pskmod(d,M,pi/4);
x = repmat([zeros(pktLen,1); 0.3*s],3,1);
pulseShaper = comm.RaisedCosineTransmitFilter;
y = awgn(pulseShaper(x),50);

Примените AGC и график.

r1 = agc1(y);
r2 = agc2(y);
r3 = agc3(y);

Постройте и сравните сигналы.

figure(1)
subplot(4,1,1)
plot(abs(y))
title('AGC input')
subplot(4,1,2)
plot(abs(r1))
title('AGC output (MaxPowerGain = 10 dB)')
subplot(4,1,3)
plot(abs(r2))
title('AGC output (MaxPowerGain = 20 dB)')
subplot(4,1,4)
plot(abs(r3))
title('AGC output (MaxPowerGain = 30 dB)')

Этот график сравнивает вход сигнала с AGC и выходом от AGC с различными максимальными уровнями усиления. С максимальным набором усиления к 10 дБ AGC выход не может достигнуть желаемого уровня выходной мощности. С максимальным набором усиления к 20 дБ AGC выход достигает желаемого уровня без насыщения. С максимальным набором усиления к 30 дБ, AGC перерегулирования выхода, рискуя насыщением сигнала и потерей данных. Между пакетами во входном сигнале существует только шум.

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

Применяйтесь различные размеры шага AGC к QPSK модулировали сигналы. Сравните сигналы после того, как AGC будет применен.

Инициализируйте три Системных объекта AGC с набором размеров шага к 1e-1, 1e-3, и 1e-4.

agc1 = comm.AGC('AdaptationStepSize',1e-1);
agc2 = comm.AGC('AdaptationStepSize',1e-3);
agc3 = comm.AGC('AdaptationStepSize',1e-4);

Сгенерируйте модулируемые данные QPSK с повышенным формированием импульса косинуса.

d = randi([0 3],500,1);
s = pskmod(d,4,pi/4);
x = 0.1*s;
pulseShaper = comm.RaisedCosineTransmitFilter;
y = pulseShaper(x);

Примените AGC.

r1 = agc1(y);
r2 = agc2(y);
r3 = agc3(y);

Постройте вход сигнала к AGC и выведите после различных размеров шага AGC.

figure
subplot(4,1,1)
plot(abs(y))
title('AGC input')
subplot(4,1,2)
plot(abs(r1))
title('AGC output (AdaptionStepSize = 1e-1)')
subplot(4,1,3)
plot(abs(r2))
title('AGC output (AdaptionStepSize = 1e-3)')
subplot(4,1,4)
plot(abs(r3))
title('AGC output (AdaptionStepSize = 1e-4)')

С набором размера шага к 1e-1, AGC перерегулирование выхода, но сходится очень быстро. С набором размера шага к 1e-3 AGC исчезает перерегулирование выхода, и AGC сходится гладко, но более медленно. С максимальным набором усиления к 1e-4 AGC занимает очень долгое время, чтобы сходиться.

Модулируйте и усильте сигнал QPSK. Установите полученную амплитуду сигнала приблизительно на 1 вольт с помощью AGC. Затем постройте выход.

Создайте QPSK модулируемый сигнал с помощью Системного объекта QPSK.

data = randi([0 3],1000,1);
qpsk = comm.QPSKModulator;
modData = qpsk(data);

Ослабьте модулируемый сигнал.

txSig = 0.1*modData;

Создайте Систему AGC object™ и передайте переданный сигнал через него с помощью step функция. AGC настраивает полученную степень сигнала приблизительно к 1 Вт.

agc = comm.AGC;
rxSig = agc(txSig);

Постройте сигнальные созвездия передачи и полученных сигналов после того, как AGC достигнет установившийся.

h = scatterplot(txSig(200:end),1,0,'*');
hold on
scatterplot(rxSig(200:end),1,0,'or',h);
legend('Input of AGC', 'Output of AGC')

Измерьте и сравните степень переданных и полученных сигналов после того, как AGC достигнет устойчивого состояния. Степень переданного сигнала в 100 раз меньше, чем степень полученного сигнала.

txPower = var(txSig(200:end));
rxPower = var(rxSig(200:end));
[txPower rxPower]
ans = 1×2

    0.0100    0.9970

Создайте две Системы AGC objects™, чтобы настроить уровень полученного сигнала с помощью двух различных размеров шага с идентичными периодами обновления.

Сгенерируйте сигнал 8-PSK иметь силу, равную 10 Вт.

data = randi([0 7],200,1);
modData = sqrt(10)*pskmod(data,8,pi/8,'gray');

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

txfilter = comm.RaisedCosineTransmitFilter('Gain',sqrt(8));
rxfilter = comm.RaisedCosineReceiveFilter('Gain',sqrt(1/8));

Пропустите модулируемый сигнал через повышенный объект фильтра передачи косинуса.

txSig = txfilter(modData);

Создайте два объекта AGC настроить полученный уровень сигнала. Выберите размер шага 0,01 и 0.1, соответственно. Установите период обновления на 10.

agc1 = comm.AGC('AdaptationStepSize',0.01);
agc2 = comm.AGC('AdaptationStepSize',0.1);

Передайте модулируемый сигнал через два объекта AGC.

agcOut1 = agc1(txSig);
agcOut2 = agc2(txSig);

Фильтр выходные сигналы AGC при помощи повышенного косинуса получает объект фильтра.

rxSig1 = rxfilter(agcOut1);
rxSig2 = rxfilter(agcOut2);

Постройте степень отфильтрованных ответов AGC, в то время как составление 10 задержек символа через передачу - получает пару фильтра.

plot([abs(rxSig1(11:110)).^2 abs(rxSig2(11:110)).^2])
grid on
xlabel('Symbols')
ylabel('Power (W)')
legend('Step Size 0.01','Step Size 0.1')

Сигнал с большим размером шага сходится быстрее к целевому уровню мощности AGC 1 Вт.

Постройте степень установившихся отфильтрованных сигналов AGC включением только последних 100 символов.

plot((101:200),[abs(rxSig1(101:200)).^2 abs(rxSig2(101:200)).^2])
grid on
xlabel('Symbols')
ylabel('Power (W)')
legend('Step Size 0.01','Step Size 0.1')

Больший размер шага AGC приводит к менее точной коррекции усиления.

Уменьшаемая точность предлагает компромисс с AdaptationStepSize свойство. Большие значения приводят к более быстрой сходимости за счет менее точного управления усилением.

Передайте ослабленные пакетные данные о QPSK двум AGCs наличие различных максимальных усилений. Затем отобразите результаты.

Создайте два, пакеты данных QSPK с 200 символами. Передайте пакеты по системе координат с 1200 символами.

modData1 = pskmod(randi([0 3],200,1),4,pi/4);
modData2 = pskmod(randi([0 3],200,1),4,pi/4);
txSig = [modData1; zeros(400,1); modData2; zeros(400,1)];

Ослабьте переданный пакетный сигнал на 20 дБ и постройте его степень.

rxSig = 0.1*txSig;
rxSigPwr = abs(rxSig).^2;
plot(rxSigPwr)
grid
xlabel('Symbols')
ylabel('Power (W)')

Создайте два AGCs, где agc1 имеет усиление максимальной мощности 30 дБ и agc2 имеет усиление максимальной мощности 24 дБ.

agc1 = comm.AGC('MaxPowerGain',30, ...
    'AdaptationStepSize',0.02);

agc2 = comm.AGC('MaxPowerGain',24, ...
    'AdaptationStepSize',0.02);

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

rxAGC1 = agc1(rxSig);
rxAGC2 = agc2(rxSig);

pwrAGC1 = abs(rxAGC1).^2;
pwrAGC2 = abs(rxAGC2).^2;

Постройте выходную мощность.

plot([pwrAGC1 pwrAGC2])
legend('AGC1','AGC2')
grid
xlabel('Symbols')
ylabel('Power (W)')

Первоначально, для второго пакета, agc1 степень выходного сигнала слишком высока, потому что AGC применил свое максимальное усиление в период, когда никакие данные не были переданы. Соответствующий agc2 степень выходного сигнала не промахивается по целевому уровню мощности 1 Вт той же суммой. Это сходится к правильной степени более быстро из-за ее меньшего максимального усиления.

Алгоритмы

Логарифмический AGC цикла

Для логарифмического AGC цикла выходной сигнал является продуктом входного сигнала и экспоненциалом усиления цикла. Сигнал ошибки является различием между контрольным уровнем и продуктом логарифма детектора выход и экспоненциал усиления цикла. После умножения на размер шага AGC передает сигнал ошибки интегратору.

Логарифмический AGC цикла обеспечивает хорошую производительность для множества типов сигнала, включая амплитудную модуляцию. В отличие от предыдущего AGC (R2015a и ранее), детектор применяется к входному сигналу, который приводит к более быстрому времени сходимости и увеличил изменение степени сигнала во входе детектора. Большее изменение не является проблемой для систем с плавающей точкой. Блок-схему алгоритма показывают.

Математически, алгоритм получен в итоге как

y(n)=x(n)exp(g(n1))z(n)=D(x(n))exp(2g(n1))e(n)=Aln(z(n))g(n)=g(n1)+Ke(n),

где

  • x представляет входной сигнал.

  • y представляет выходной сигнал.

  • g представляет усиление цикла.

  • D(•) представляет функцию детектора.

  • z представляет детектор выход.

  • A представляет ссылочное значение.

  • e представляет сигнал ошибки.

  • K представляет размер шага.

Детектор AGC

Детектор AGC выход, z, вычисляет квадратичный детектор:

z(m)=1Nn=mN(m+1)N1|y(n)|2,

где N представляет период обновления.

Критерии производительности AGC

  • Время атаки — длительность это берет AGC, чтобы ответить на увеличение входной амплитуды.

  • Время затухания — длительность это берет AGC, чтобы ответить на уменьшение во входной амплитуде.

  • Получите нагнетание — изменение значения усиления во время установившейся операции.

Увеличение размера шага уменьшает время атаки и времена затухания, но это также увеличивает нагнетание усиления.

Расширенные возможности

Смотрите также

Введенный в R2013a