- •Содержание
- •1. Использование системы Microwave Office для решения задач радиофизики 6
- •2. Использование программной среды hfss для решения задач радиофизики 55
- •3. Использование системы matlab для решения задач радиофизики 64
- •Введение Общие требования к выполнению лабораторных работ
- •Основные рекомендации по использованию инструктивно-методических материалов
- •1. Использование системы Microwave Office для решения задач радиофизики Основные сведения о системе Microwave Office
- •Элементы пользовательского интерфейса программной среды Microwave Office
- •Основы работы в Microwave Office
- •Лабораторная работа № 1.1 Анализ пассивных цепей на основе сосредоточенных элементов в среде Microwave Office Задания к работе
- •Пояснения к работе
- •9 Баллов
- •Пояснения к работе
- •12 Баллов
- •Пояснения к работе
- •17 Баллов
- •Пояснения к работе
- •14 Баллов
- •Пояснения к работе
- •20 Баллов
- •Лабораторная работа № 2.1 Проектирование волноводного делителя средствами hfss Задания к работе
- •Пояснения к работе
- •18 Баллов
- •Программные единицы matlab
- •Символы и знаки matlab
- •Основные операторы и команды matlab
- •Ввод-вывод данных matlab
- •Математические функции matlab
- •Операции с матрицами в matlab
- •Графические функции matlab
- •2D графики.
- •2D графики 3d данных.
- •3D графики.
- •Вспомогательные графические функции matlab
- •Функции обработки звука matlab
- •Вспомогательные команды и функции matlab
- •Символьная математика matlab
- •Работа в среде matlab
- •Лабораторная работа № 3.1 Расчет полей в прямоугольном резонаторе средствами matlab Задания к работе
- •Варианты заданий
- •Пояснения к работе
- •7 Баллов
- •Пояснения к работе
- •5 Баллов
- •Пояснения к работе
- •Максимальное число баллов за работу
- •Литература
Лабораторная работа № 3.1 Расчет полей в прямоугольном резонаторе средствами matlab Задания к работе
Для заданных
значений a, b,
l, m,
n, s
найти резонансную частоту прямоугольного
резонатора
,
построить двумерное поле векторов
в плоскости 0XY и
в плоскости 0XZ. Построить
распределение трехмерного поля векторов
и
внутри резонатора и сделать анимацию
этих полей. При построении двумерных
распределений векторных полей использовать
оператор quiver, а
для построения трехмерных распределений
векторных полей использовать оператор
quiver3. Для
выделения сечения резонатора – закрасить
его (при помощи оператора area).
Задать масштабы осей (при помощи оператора
axis). Сделать надписи
около осей координат, заголовок графика
и вывести на экран значения m,
n, s,
f0.
Варианты заданий
Номер варианта |
a, см |
b, см |
l, см |
m |
n |
s |
1 |
2.3 |
1.0 |
3.9 |
1 |
0 |
2 |
2 |
2.3 |
1.0 |
1.95 |
1 |
0 |
1 |
3 |
2.3 |
1.0 |
2 |
2 |
1 |
2 |
4 |
2.3 |
1.0 |
6 |
3 |
2 |
3 |
5 |
2.3 |
1.0 |
4 |
2 |
1 |
2 |
Пояснения к работе
Для выполнения работы необходимо рассчитать резонансную частоту резонатора f0 и для полученного значения определить пространственное распределение заданных полей. Для проведения указанных расчетов использовать приведенные ниже теоретические сведения.
Геометрия задачи изображена на рис. 3.1.1, где показан прямоугольный резонатор с размерами вдоль соответствующих осей a, b, l.
В таком резонаторе
могут существовать колебания
и
,
где m, n,
s – целые числа,
указывающие число вариаций поля
соответственно вдоль координат x,
y, z.
Компоненты полей для
колебаний
имеют следующий вид:
;
;
;
;
;
.
Здесь: A
– амплитуда волны;
– поперечное волновое число;
– резонансная частота объемного
резонатора;
;
– абсолютные магнитная и диэлектрическая
проницаемости вещества, заполняющего
резонатор;
– абсолютные магнитная и диэлектрическая
проницаемости вакуума в системе СИ.
Программу на MATLAB, реализующую поставленное задание, необходимо написать в виде отдельного скрипта. Перед проведением расчетов необходимо задать значения используемых параметров и констант. Например:
a = 0.023; b = 0.010; % x and y dimensions of the waveguide (m)
l = 0.039; % length of cavity (m)
m = 1; n = 0; s = 2; % TM or TE mode indices m and n
eps = 8.854E-12; mu = 4*pi*1E-7; % eps and mu constant
Комментарии на MATLAB рекомендуется делать на английском языке, чтобы избежать возможных проблем с русификацией на используемой платформе. Используемые при расчетах значения параметров задачи для контроля рекомендуется выводить в командное окно MATLAB:
disp( sprintf( 'Размеры волновода: a = %5.2f cm; b = %5.2f cm', a*100, b*100 ) );
disp( sprintf( 'Длина резонатора: l = %5.2f cm', l*100 ) );
disp( sprintf( 'Значения индексов поля: m = %i; n = %i; s = %i', m, n, s ) );
Затем необходимо выполнить расчет резонансной частоты и вывод полученного значения в командное окно MATLAB, например, при помощи оператора следующего вида:
disp( sprintf( 'Резонансная частота резонатора: %g ГГц', f0/1e9 ) );
Затем для дискретизации рассматриваемой внутренней области прямоугольного резонатора следует определить вектора (одномерные массивы) x, y, z со значениями сетки вдоль соответствующих осей. Затем на полученной трехмерной сетке выполнить расчет значений компонент полей (6 компонент полей E и H, каждая из них является трехмерной).
Затем следует сформировать отдельные окна (figure) для графического отображения распределения полей и анимации их временной зависимости. При этом желательно (например, для анимации) получить дескриптор (указатель или handler) для каждого из открытых окон:
hf = figure( 'Name', 'Vector fields E and H' );
Перед выводом двумерного распределения поля (на плоскости сечения) необходимо определиться с координатой плоскости сечения. При этом необходимо учитывать, например, что в некоторых сечениях или в некоторые моменты времени поле может быть нулевым, и оно не будет отображаться. Для вывода двумерного распределения поля использовать оператор quiver:
he = quiver( x*100, y*100, Ex(ix,iy,(Nz-1)/2+1)', Ey(ix,iy,(Nz-1)/2+1)', 0, 'r' );
Здесь x*100, y*100 – вектора с координатами сетки (в см) по x и y; (Nz-1)/2+1 – индекс элемента сетки по z, в котором размещается сечение поля; Ex(ix,iy,(Nz-1)/2+1)', Ey(ix,iy,(Nz-1)/2+1)' – двумерные массивы с соответствующими значениями компонент поля соответствующим образом сориентированные. Предпоследний параметр – это масштабный коэффициент, определяющий отображаемую длину вектора при использовании автомасштабирования. Если задать его равным нулю, то автомасштабирование не действует и вектор выводиться в соответствии с его фактической длиной. Такой подход необходимо использовать при анимации векторных полей, поскольку выполнение автомасштабирования для каждого отдельного кадра изображения исказить общую картину при анимации. Последний параметр задает цвет вектора. Для исключения автомасштабирования по осям следует использовать команду:
axis equal
Для отображения трехмерного распределения векторного поля необходимо использовать функцию MATLAB quiver3. Перед ее вызовом необходимо сгенерировать матрицы аргументов для трехмерного представления векторных функций:
[ X, Y, Z ] = ndgrid( x(ix), z(iz), y(iy) );
После этого можно определить вызов функции quiver3, например, в следующем виде:
h = quiver3( X*100, Y*100, Z*100, permute( real(Ex0), [1 3 2] ), …
permute( real(Ez0), [1 3 2] ), permute( real(Ey0), [1 3 2] ), 0, 'r' );
Здесь X*100, Y*100, Z*100 – координаты позиций векторов (в см); permute( real(Ex0), [1 3 2] ), permute( real(Ez0), [1 3 2] ), permute( real(Ey0), [1 3 2] ) – значения соответствующих компонент векторов; предпоследний и последний параметр имеют тот же смысл, что и у функции quiver. Таким образом, первые шесть параметров функции quiver3 должны иметь совпадающий размер и содержать позиции и значения векторных компонент. В данном примере для передачи значений векторных компонент использована функция permute для того, чтобы изменить порядок размерной трехмерного массива. Сделано это потому, что в системе координат графического окна вертикальная ось определяется как ось 0Z, а для рассматриваемого отображения (рис. 3.1.1) – это ось 0Y. Поэтому вторая и третье размерность матриц со значениями компонент меняются местами при помощи функции permute( E, [1 3 2] ).
Рассмотренный пример вызова функции quiver3 отображает только распределение поля Е. Для того, чтобы отобразить и поле Н, необходимо в этом же графическом окне поверх имеющегося изображения сделать аналогичный вызов функции quiver3 для компонент поля Н. Это позволяет сделать следующий фрагмент:
hold on; axis equal
quiver3( X*100, Y*100, Z*100, permute( real(Hx0), [1 3 2] ), permute( real(Hz0),…
[1 3 2] ), permute( real(Hy0), [1 3 2] ), 0, 'b' );
Полученное распределение поля можно использовать в качестве первого кадра для анимации временной зависимости. Перед выполнением анимации нужно подготовить (выделить память и т.п.) матрицу для размещения в ней кадров анимации:
Frames = moviein( NumFrame+1, hf );
Здесь NumFrame – число кадров анимации, кроме исходного (уже созданного) первого кадра; hf – дескриптор графического окна, в котором будут отображаться кадры анимации. Поскольку первый кадр анимации уже создан, его можно разместить в матрице Frames:
Frames(:,1) = getframe(hf);
Данной командой изображение графического окна с дескриптором hf помещается в матрицу кадров для анимации.
Для дальнейшей анимации необходимо в цикле пересчитать распределение компонент поля с учетом конкретного значения момента времени (предполагается, что исходное распределение получено для значения времени t = 0). Для этого можно не использовать абсолютные значения времени, а использовать соответствующие значения в виде долей периода, например, в следующем виде:
Ex = Ex0 * exp(1i*2*pi*iFrame/NumFrame);
Для вновь полученных значений компонент поля в цикле следует снова сделать отображение полученного векторного распределения аналогично тому, как это делалось для первого кадра (для t = 0), и зафиксировать полученное изображение (в окне с дескриптором hf) как кадр для анимации:
Frames(:,iFrame+1) = getframe(hf);
Чтобы не рисовать новый кадр поверх старого, необходимо перед началом цикла анимации определить:
set( gca, 'nextplot', 'replacechildren' );
а после получения каждого кадра анимации использовать команду
hold off
После выполненных действий по формированию кадров анимации (по завершению цикла), можно вызвать команду запуска анимации, например, в следующем виде:
figure( hf );
movie( hf, Frames, 10 );
Здесь 10 – число повторений анимации, представленной в матрице Frames. Команда figure( hf ) необходимо для активизации окна с дескриптором hf.
Максимальное число баллов за работу
