exponenta event banner

коммуникация. AGC

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

Описание

comm.AGC Система object™ создает автоматический контроллер усиления (АРУ), который адаптивно регулирует свой коэффициент усиления для достижения постоянного уровня сигнала на выходе. Дополнительные сведения см. в разделе Логарифмический цикл AGC. Этот объект предназначен для потоковых приложений. Дополнительные сведения см. в разделе Советы.

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

  1. Создать comm.AGC и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

agc = comm.AGC создает объект AGC System, который адаптивно регулирует свой коэффициент усиления для достижения постоянного уровня сигнала на выходе.

пример

agc = comm.AGC(Name,Value) задайте свойства, используя одну или несколько пар имя-значение. Заключите каждое имя в кавычки. Например, 'AdaptationStepSize', 0.05 устанавливает размер шага для обновлений усиления равным 0.05.

Свойства

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

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

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Размер шага для обновлений коэффициента усиления, заданный как положительный скаляр. Увеличение размера шага позволяет АРУ быстрее реагировать на изменения уровня входного сигнала, но увеличивает изменение уровня выходного сигнала после достижения стационарного режима работы. Дополнительные сведения см. в разделах «Критерии производительности АРУ», «Варьировать размер шага АРУ» и «График влияния размера шага на примеры производительности АРУ».

Настраиваемый: Да

Типы данных: double

Целевой уровень выходной мощности, заданный как положительный скаляр. Мощность измеряется в ваттах, отсчитываемых к 1 Ом. Дополнительные сведения см. в разделе Пример адаптивной регулировки амплитуды принятого сигнала с помощью АРУ.

Типы данных: double

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

Типы данных: double

Максимальный коэффициент усиления мощности в децибелах, заданный как положительный скаляр. Большая регулировка усиления может вызвать отсечение, когда мощность входного сигнала внезапно увеличивается. Используйте это свойство, чтобы избежать больших регулировок усиления, ограничивая усиление, которое АРУ применяет к входному сигналу. Для получения дополнительной информации см. примеры максимального усиления АРУ и демонстрации влияния максимального усиления АРУ на пакетные данные.

Типы данных: double

Использование

Описание

пример

y = agc(x) адаптивно регулирует усиление входного сигнала для достижения уровня опорного сигнала на выходе. Объект AGC System использует детектор квадратного закона для определения уровня выходного сигнала. Дополнительные сведения см. в разделе Детектор АРУ.

[y,powerlevel] = agc(x) прибыль powerlevelоценку уровня мощности входного сигнала. Вы можете использовать powerlevel в качестве выходного сигнала детектора энергии.

Входные аргументы

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

Входной сигнал, заданный как вектор столбца.

Типы данных: single | double
Поддержка комплексного номера: Да

Выходные аргументы

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

Выходной сигнал, возвращаемый в виде вектора столбца. Выходной сигнал имеет тот же тип данных, что и входной сигнал. x.

Оценка уровня мощности, возвращаемая как вектор столбца NS-элемента. NS - длина входного сигнала, x. Вы можете использовать powerlevel в качестве выходного сигнала детектора энергии.

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

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

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Применять различные длины усреднения АРУ к QAM-модулированным сигналам. Сравните дисперсию и график сигналов после применения АРУ.

Создайте три объекта AGC System со средней длиной окна 10, 100 и 1000 образцов соответственно.

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

Генерирование 16-QAM модулированных и сформированных в форме косинусного импульса пакетированных данных.

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);

Примените АРУ к данным, захватывающим отдельные выходы для каждого объекта АРУ.

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 (Averaging Length is 10 Samples)')
text(4000,5,sprintf('Variance is %f',var(r1(3000:end))))
subplot(4,1,3)
plot(abs(r2))
axis([0 8000 0 10])
title('AGC Output (Averaging Length is 100 Samples)')
text(4000,5,sprintf('Variance is %f',var(r2(3000:end))))
subplot(4,1,4)
plot(abs(r3))
axis([0 8000 0 10])
title('AGC Output (Averaging Length is 1000 Samples)')
text(4000,5,sprintf('Variance is %f',var(r3(3000:end))))

Figure contains 4 axes. Axes 1 with title AGC Input contains an object of type line. Axes 2 with title AGC Output (Averaging Length is 10 Samples) contains 2 objects of type line, text. Axes 3 with title AGC Output (Averaging Length is 100 Samples) contains 2 objects of type line, text. Axes 4 with title AGC Output (Averaging Length is 1000 Samples) contains 2 objects of type line, text.

Применение различных уровней максимального усиления АРУ к QPSK-модулированным сигналам. Сравните график сигналов после применения АРУ.

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

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

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

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);

Примените АРУ к данным, захватывающим отдельные выходы для каждого объекта АРУ.

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

Постройте график входного сигнала и сигнала с регулировкой АРУ с различными максимальными уровнями усиления. Сравните результаты для условий в этом примере.

  • Установка максимального коэффициента усиления 10 дБ слишком мала, и выход АРУ не достигает желаемого уровня выходного сигнала, рискуя потерей данных из-за уменьшенного динамического диапазона сигнала.

  • Установка максимального коэффициента усиления 20 дБ является оптимальной, и выход АРУ достигает требуемого уровня без потерь сигнала из-за насыщения.

  • Установка максимального коэффициента усиления 30 дБ слишком велика, и выход АРУ перевыполняет требуемый уровень сигнала, рискуя насыщением сигнала и потерей данных в начале принятых пакетов.

  • Между пакетами входной сигнал содержит только шум.

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

limits = [0 3];
figure(1)
subplot(4,1,1)
plot(abs(y))
ylim(limits)
title('AGC Input')
subplot(4,1,2)
plot(abs(r1))
ylim(limits)
title('AGC Output (Maximum Power Gain is 10 dB)')
subplot(4,1,3)
plot(abs(r2))
ylim(limits)
title('AGC Output (Maximum Power Gain is 20 dB)')
subplot(4,1,4)
plot(abs(r3))
ylim(limits)
title('AGC Output (Maximum Power Gain is 30 dB)')

Figure contains 4 axes. Axes 1 with title AGC Input contains an object of type line. Axes 2 with title AGC Output (Maximum Power Gain is 10 dB) contains an object of type line. Axes 3 with title AGC Output (Maximum Power Gain is 20 dB) contains an object of type line. Axes 4 with title AGC Output (Maximum Power Gain is 30 dB) contains an object of type line.

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

Создайте системный объект AGC с максимальным значением коэффициента усиления 20 дБ.

agc20 = comm.AGC('MaxPowerGain',20);

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

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

Примените АРУ к данным, захватывающим отдельные выходы для каждого объекта АРУ.

[r2,p2] = agc20(y);

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

limits = [0 3];
figure(1)
subplot(4,1,1)
plot(abs(y))
ylim(limits)
title('AGC Input')
subplot(4,1,2)
plot(abs(p2))
title('Power Level')

Figure contains 2 axes. Axes 1 with title AGC Input contains an object of type line. Axes 2 with title Power Level contains an object of type line.

Применение различных размеров шага АРУ к QPSK-модулированным сигналам. Сравните сигналы после применения АРУ.

Создайте три объекта системы 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);

Примените АРУ к данным, захватывающим отдельные выходы для каждого объекта АРУ.

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

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

  • При установленном размере шага 1e-1 видно превышение выходного сигнала АРУ. Выходной сигнал очень быстро сходится.

  • При установленном размере шага 1e-3 превышение выходного сигнала АРУ исчезает. Выходной сигнал постепенно сходится.

  • При установленном размере шага 1e-4 выходной сигнал АРУ сходится в 2-3 раза дольше, чем размер шага 1e-3.

figure
subplot(4,1,1)
plot(abs(y))
title('AGC Input')
subplot(4,1,2)
plot(abs(r1))
title('AGC Output (Adaption Step Size is 1e-1)')
subplot(4,1,3)
plot(abs(r2))
title('AGC Output (Adaption Step Size is 1e-3)')
subplot(4,1,4)
plot(abs(r3))
title('AGC Output (Adaption Step Size is 1e-4)')

Figure contains 4 axes. Axes 1 with title AGC Input contains an object of type line. Axes 2 with title AGC Output (Adaption Step Size is 1e-1) contains an object of type line. Axes 3 with title AGC Output (Adaption Step Size is 1e-3) contains an object of type line. Axes 4 with title AGC Output (Adaption Step Size is 1e-4) contains an object of type line.

Модулировать и усиливать сигнал QPSK. Установите амплитуду принятого сигнала приблизительно на 1 В с помощью АРУ. Постройте график вывода.

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

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

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

txSig = 0.1*modData;

Создайте объект системы AGC и передайте через него передаваемый сигнал. АРУ регулирует мощность принятого сигнала приблизительно до 1 Вт.

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

Постройте график совокупностей сигналов передаваемых и принимаемых сигналов после того, как АРУ достигнет установившегося состояния.

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

Figure Scatter Plot contains an axes. The axes with title Scatter plot contains 2 objects of type line. These objects represent Input of AGC, Output of AGC.

Измерьте и сравните мощность передаваемых и принимаемых сигналов после того, как АРУ достигнет установившегося состояния. Мощность передаваемого сигнала в 100 раз меньше мощности принимаемого сигнала.

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

    0.0100    0.9970

Создайте два системных 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 соответственно.

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

Примените АРУ к модулированному сигналу, фиксирующему отдельные выходы для каждого объекта АРУ.

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

Фильтрация выходных сигналов АРУ с помощью фильтра приема с увеличенным косинусом.

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

Постройте график мощности отфильтрованных ответов АРУ при учете задержки в 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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Step size 0.01, Step size 0.1.

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

Постройте график мощности стационарных отфильтрованных сигналов АРУ, включив только последние 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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Step size 0.01, Step size 0.1.

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

Создайте два 200-символьных пакета данных QSPK. Передача пакетов по кадру из 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)')
title('Signal Power Before Applying AGC')

Figure contains an axes. The axes with title Signal Power Before Applying AGC contains an object of type line.

Создайте два AGC с максимальным усилением мощности 30 дБ и 24 дБ соответственно.

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

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

Примените АРУ к ослабленному сигналу, захватывая отдельные выходы для каждого объекта АРУ. Вычислите выходную мощность для каждого случая.

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

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

Постройте график выходной мощности. Первоначально для второго пакета agc1 мощность выходного сигнала слишком высока, поскольку АРУ применяет свой максимальный коэффициент усиления в течение периода, когда данные не передавались. Передача agc2 мощность выходного сигнала (2,5 Вт) превышает целевой уровень мощности 1 Вт значительно меньше, чем agc1 мощность выходного сигнала (10 Вт). Время сходимости для agc2 короче времени сходимости для agc1, потому что сигнал на вход agc2 применяет меньший максимальный коэффициент усиления, чем agc1.

plot([pwrAGC1 pwrAGC2])
legend('AGC1','AGC2')
grid
xlabel('Symbols')
ylabel('Power (W)')
title('Signal Power After Applying AGC')

Figure contains an axes. The axes with title Signal Power After Applying AGC contains 2 objects of type line. These objects represent AGC1, AGC2.

Подробнее

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

Совет

  • Этот объект System предназначен для потоковых приложений.

  • Если амплитуда сигнала не изменяется в кадре, можно смоделировать идеальный АРУ путем вычисления среднего коэффициента усиления, требуемого для кадра выборок. Затем примените коэффициент усиления к каждой выборке в кадре.

  • При использовании АРУ с сигналами КАМ более высокого порядка может потребоваться уменьшить изменение коэффициента усиления во время работы в установившемся режиме. Осмотрите диаграмму созвездия на выходе АРУ во время работы в установившемся режиме. Можно увеличить длину усреднения, чтобы избежать частых регулировок коэффициента усиления. Увеличение усредненной длины снижает скорость выполнения.

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

.

См. также

Блоки

Представлен в R2013a