Адаптивная регулировка усиления для выхода постоянного уровня сигнала
comm.AGC Система object™ создает автоматический контроллер усиления (АРУ), который адаптивно регулирует свой коэффициент усиления для достижения постоянного уровня сигнала на выходе. Дополнительные сведения см. в разделе Логарифмический цикл AGC. Этот объект предназначен для потоковых приложений. Дополнительные сведения см. в разделе Советы.
Для адаптивной регулировки усиления для постоянного уровня сигнала на выходе:
Создать comm.AGC и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
создает объект AGC System, который адаптивно регулирует свой коэффициент усиления для достижения постоянного уровня сигнала на выходе.agc = comm.AGC
задайте свойства, используя одну или несколько пар имя-значение. Заключите каждое имя в кавычки. Например, 'agc = comm.AGC(Name,Value)AdaptationStepSize', 0.05 устанавливает размер шага для обновлений усиления равным 0.05.
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
AdaptationStepSize - Размер шага для обновлений усиления0.01 (по умолчанию) | положительный скалярРазмер шага для обновлений коэффициента усиления, заданный как положительный скаляр. Увеличение размера шага позволяет АРУ быстрее реагировать на изменения уровня входного сигнала, но увеличивает изменение уровня выходного сигнала после достижения стационарного режима работы. Дополнительные сведения см. в разделах «Критерии производительности АРУ», «Варьировать размер шага АРУ» и «График влияния размера шага на примеры производительности АРУ».
Настраиваемый: Да
Типы данных: double
DesiredOutputPower - Целевой уровень выходной мощности1 W (по умолчанию) | положительный скалярЦелевой уровень выходной мощности, заданный как положительный скаляр. Мощность измеряется в ваттах, отсчитываемых к 1 Ом. Дополнительные сведения см. в разделе Пример адаптивной регулировки амплитуды принятого сигнала с помощью АРУ.
Типы данных: double
AveragingLength - Длина окна усреднения100 samples (по умолчанию) | положительное целое числоДлина окна усреднения в выборках, заданная как положительное целое число. Дополнительные сведения о том, как усредненная длина влияет на дисперсию выходного сигнала АРУ в установившемся режиме и скорость выполнения, см. в разделе Советы и пример изменения усредненной длины АРУ.
Типы данных: double
MaxPowerGain - Максимальный коэффициент усиления мощности60 dB (по умолчанию) | положительный скалярМаксимальный коэффициент усиления мощности в децибелах, заданный как положительный скаляр. Большая регулировка усиления может вызвать отсечение, когда мощность входного сигнала внезапно увеличивается. Используйте это свойство, чтобы избежать больших регулировок усиления, ограничивая усиление, которое АРУ применяет к входному сигналу. Для получения дополнительной информации см. примеры максимального усиления АРУ и демонстрации влияния максимального усиления АРУ на пакетные данные.
Типы данных: double
адаптивно регулирует усиление входного сигнала для достижения уровня опорного сигнала на выходе. Объект AGC System использует детектор квадратного закона для определения уровня выходного сигнала. Дополнительные сведения см. в разделе Детектор АРУ.y = agc(x)
[ прибыль y,powerlevel] = agc(x)powerlevelоценку уровня мощности входного сигнала. Вы можете использовать powerlevel в качестве выходного сигнала детектора энергии.
x - Входной сигналВходной сигнал, заданный как вектор столбца.
Типы данных: single | double
Поддержка комплексного номера: Да
y - Выходной сигналВыходной сигнал, возвращаемый в виде вектора столбца. Выходной сигнал имеет тот же тип данных, что и входной сигнал. x.
powerlevel - Оценка уровня мощностиОценка уровня мощности, возвращаемая как вектор столбца NS-элемента. NS - длина входного сигнала, x. Вы можете использовать powerlevel в качестве выходного сигнала детектора энергии.
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
Применять различные длины усреднения АРУ к 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))))

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

Постройте график сигнала и оценки уровня мощности. Сравните результаты. Оценка уровня мощности может служить детектором мощности, точно указывающим, когда поступит принятый пакет.
Создайте системный объект 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')

Применение различных размеров шага АРУ к 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)')

Модулировать и усиливать сигнал 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')

Измерьте и сравните мощность передаваемых и принимаемых сигналов после того, как АРУ достигнет установившегося состояния. Мощность передаваемого сигнала в 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')

Сигнал с большим размером шага быстрее сходится к целевому уровню мощности АРУ 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')

Передача ослабленных пакетных данных 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')

Создайте два 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')

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

Логарифмический контур АРУ хорошо работает для различных типов сигналов, включая амплитудную модуляцию. Детектор АРУ применяется к входному сигналу, что улучшает время сходимости, но увеличивает изменение мощности сигнала на входе детектора. Большая вариация сигнала на входе детектора приемлема для систем с плавающей запятой.
Математически алгоритм суммируется следующим образом:
(n)), и g (n) = g (n − 1) +K⋅e (n),
где:
x - входной сигнал.
y - выходной сигнал.
g - коэффициент усиления контура.
D (•) - функция детектора.
z - выходной сигнал детектора.
A - ссылочное значение.
e - сигнал ошибки.
K - размер шага.
Выход детектора АРУ, z, вычисляет детектор квадратного закона, заданный
| y (n) | 2,
где N - период обновления. Детектор квадратного закона выдает выходной сигнал, пропорциональный квадрату входного сигнала y.
Увеличение размера шага уменьшает время атаки и время распада, но также увеличивает накачку усиления.
Время атаки - длительность реакции АРУ на увеличение входной амплитуды
Время затухания - длительность реакции АРУ на уменьшение входной амплитуды
Накачивание усиления - изменение значения усиления во время работы в установившемся режиме
Этот объект System предназначен для потоковых приложений.
Если амплитуда сигнала не изменяется в кадре, можно смоделировать идеальный АРУ путем вычисления среднего коэффициента усиления, требуемого для кадра выборок. Затем примените коэффициент усиления к каждой выборке в кадре.
При использовании АРУ с сигналами КАМ более высокого порядка может потребоваться уменьшить изменение коэффициента усиления во время работы в установившемся режиме. Осмотрите диаграмму созвездия на выходе АРУ во время работы в установившемся режиме. Можно увеличить длину усреднения, чтобы избежать частых регулировок коэффициента усиления. Увеличение усредненной длины снижает скорость выполнения.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.