Пользовательская нелинейная модель усилителя

В этом примере показано, как к:

  • Сгенерируйте пользовательские пользовательские модели путем создания объекта RF Toolbox™ в рабочей области MATLAB® и импорта ее в Эквивалентный Основополосный блок усилителя.

  • Создайте нелинейный усилитель с корректируемой кривой Выпячивания Контакта.

  • Симулируйте продукты межмодуляции в двухцветной тестовой модели.

В примере отношение Вина-Вута для усилителя является простым полиномом. Пример использует это отношение напряжения, чтобы сгенерировать кривую Выпячивания Контакта, которая включена в модель усилителя. Несмотря на то, что пример использует определенную полиномиальную функцию, тот же подход может использоваться, чтобы создать произвольные функции степени и фазы по сравнению со степенью в и частотой. Действительно, это может использоваться, чтобы установить любое из перезаписываемых свойств компонента, таких как S-параметры или шумовые свойства.

Задайте напряжение по сравнению с напряжением - в отношении

Используйте команды MATLAB, чтобы создать вектор полиномиальных коэффициентов, которые задают желаемое отношение Вина-Вута. Соглашение MATLAB состоит в том, чтобы сохранить полиномиальные коэффициенты n-го порядка подряд вектор длины n+1 с энной степенью в первом элементе и нулевой степенью (постоянной) в последнем (n+1 th) элемент. Степенной ряд здесь для рисунка и может легко быть изменен. Можно распознать значения первыми двенадцатью сроками полиномиального последовательного расширения гиперболической функции тангенса.

TanhSeries = [-1382/155925 0 62/2835 0 -17/315 0 2/15 0 -1/3 0 1 0];

Затем выберите область значений для независимой переменной, Вина, и задайте вектор значений входного напряжения в этой области значений. Нижний уровень (1 мВ здесь) должен быть достаточно низким, что линейный член доминирует над Vout. Верхний уровень должен быть выбран таким образом, что Vout только достигает своего локального максимального значения. Получившийся Vout будет экстраполироваться для всего Вина, больше, чем 1,23. Затем вычислите вектор значений выходного напряжения, Vout, с помощью степенного ряда.

Vin = linspace(0.001,1.23,100);     % volts
Vout = polyval(TanhSeries, Vin);    % volts

Создайте нелинейный усилитель и сгенерируйте кривую выпячивания контакта

Создайте объект усилителя RF Toolbox со значениями свойств по умолчанию. Затем сгенерируйте данные Выпячивания Контакта (в ваттах) для усилителя путем деления квадрата векторов напряжения ввода и вывода ссылочным импедансом усилителя. Используйте данные Выпячивания Контакта, чтобы задать нелинейность объекта усилителя. В данном примере кривая Выпячивания Контакта задается для одной точки частоты (2,1 ГГц) и используется (экстраполяцией) во всех точках частоты. См. документацию RF Toolbox для получения информации о том, как создать компонент с отдельно заданными кривыми для любого количества точек частоты.

amp = rfckt.amplifier;
amp.NonlinearData.Freq = 2.1e9;             % Hz
Zref = 50;                                  % ohm
amp.NonlinearData.Pin  = {(Vin.^2)./Zref};  % watts
amp.NonlinearData.Pout = {(Vout.^2)./Zref}; % watts

В этом примере мы задаем фазовый переход, чтобы быть нулем для всего Контакта и всех частот, но RF Toolbox позволяет вам установить его быть функцией Контакта и частоты.

amp.NonlinearData.Phase = {zeros(size(Vin))};

Сделайте усиление маленькое сигнала в соответствии с наклоном усиления степени в малой мощности

Задайте параметр S21 усилителя в точке частоты, для которой вы задали данные о степени. Параметр сети S21 должен быть сопоставим с наклоном усиления в конце малой мощности кривой Выпячивания Контакта в той точке частоты. Если эти значения будут противоречивы, программное обеспечение RF Blockset попытается согласовать данные и выдать предупреждение, которое является, сделал так. Чтобы гарантировать непротиворечивость, задайте параметр S21, чтобы быть линейным членом степенного ряда, который задает отношение Вина-Вута. Линейный член является предпоследним элементом в векторе. Постройте кривую Выпячивания Контакта.

amp.NetworkData.Freq = amp.NonlinearData.Freq;
amp.NetworkData.Data = [0 0; TanhSeries(end-1) 0];
fig = figure;
plot(amp,'Pout');

Запустите Тестовую обвязку с Входной мощностью 7 dBm На Тон

Следующий рисунок показывает тестовую обвязку для вашего нового усилителя. Входной сигнал состоит из суммы двух тонов, один на 10 кГц ниже центральной частоты, и один на 10 кГц выше его. Осциллограф спектра показывает различные продукты межмодуляции в выше и более низкие частоты, чем два тестовых тона. Подсистема EVM вычисляет величину вектора ошибок. Открытый и Запуск "rfb_user_defined_amp_mdl" модель. Чтобы просмотреть и отредактировать предварительно установленные значения рабочего пространства модели, выберите View ==> Model Explorer из панели меню модели.

open('rfb_user_defined_amp_mdl.slx');

sim('rfb_user_defined_amp_mdl');

Повторно выполните Симуляцию Используя Уровень Входной мощности 8 dBm На Тон

Чтобы увеличить исходную степень от 7dBm до 8 dBm из скрипта MATLAB, сначала получите указатель на текущее рабочее пространство модели Simulink®. Затем установите соответствующую переменную рабочей области (power_in_dBm в этом примере) к значению 8. Повторно выполните симуляцию. Заметьте, что 11-е межmod порядка (наиболее удаленные тоны на осциллографе спектра) увеличиваются приблизительно на 11 дБ.

hws=get_param(bdroot, 'modelworkspace');
hws.assignin('power_in_dBm', 8);
sim('rfb_user_defined_amp_mdl');

Обрежьте гиперболический ряд касательной только до первых четырех сроков

Сбросьте входную мощность к 7 dBm. Затем задайте степенной ряд для гиперболической касательной, использующей только первые четыре термина ряда. Повторно вычислите значения выходного напряжения и данные Выпячивания Контакта усилителя. Повторно выполните симуляцию. Осциллограф спектра показывает, что только третьи продукты межмодуляции производятся. Можно также установить время остановки на inf, повторно выполнить симуляцию и экспериментировать, чтобы видеть эффект усиления ползунка (Синее поле на модели Simulink).

hws.assignin('power_in_dBm', 7);
TanhSeries = [-1/3 0 1 0];
Vin = linspace(0.001,1,100);                % volts
Vout = polyval(TanhSeries, Vin);            % volts
amp.NonlinearData.Pin  = {(Vin.^2)./Zref};  % watts
amp.NonlinearData.Pout = {(Vout.^2)./Zref}; % watts
sim('rfb_user_defined_amp_mdl');

bdclose('rfb_user_defined_amp_mdl');
close(fig);