Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Построение диаграмма направленности
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
vatyl
Стоит задача построить диагармму направленности в 3D.

Имеем:

Значения угла по азимуту в полярной системе координат (градус, минута, секунда)
Значения угла по углу места в полярной системе координат (градус, минута, секунда)
Напряжонность эллектрического поля в Вольтах

Значений масса диаграмма будет гладнькая.

Хотелось бы получить изображение 3D диаграммы привязанной к полярной системе координат, чтобы можно было её поворачивать (вращать)

У меня получилось построить даграмму в полярных координатах (Строил в Mathlab (построть 3D в полярных координах он не может)), но плоскость не наглядно, темболее значений столлько что грех не воспользоваться.

Поделитесь своми мыслями.
jam
Цитата(vatyl @ Apr 14 2009, 15:16) *
Стоит задача построить диагармму направленности в 3D.

Имеем:

Значения угла по азимуту в полярной системе координат (градус, минута, секунда)
Значения угла по углу места в полярной системе координат (градус, минута, секунда)
Напряжонность эллектрического поля в Вольтах

Значений масса диаграмма будет гладнькая.

Хотелось бы получить изображение 3D диаграммы привязанной к полярной системе координат, чтобы можно было её поворачивать (вращать)

У меня получилось построить даграмму в полярных координатах (Строил в Mathlab (построть 3D в полярных координах он не может)), но плоскость не наглядно, темболее значений столлько что грех не воспользоваться.

Поделитесь своми мыслями.

Для программы mmana был где-то 3D-визуализатор, но поскольку это увеличивает время рассчёта, особо ей не пользовался, обходился двумя проекциями.
Alexey_B
Цитата(vatyl @ Apr 14 2009, 15:16) *
У меня получилось построить даграмму в полярных координатах (Строил в Mathlab (построть 3D в полярных координах он не может)), но плоскость не наглядно, темболее значений столлько что грех не воспользоваться.

Поделитесь своми мыслями.


Если в полярных строить 3D не может, тогда нужно перевести их в декартовы и строить трёхмерный график в них. Преобразования там элементарные.
vatyl
Цитата(Alexey_B @ Apr 14 2009, 20:14) *
Если в полярных строить 3D не может, тогда нужно перевести их в декартовы и строить трёхмерный график в них. Преобразования там элементарные.

Построение по оси X,Y проблемм не вызывает, а вот построение по оси Z проекция угла через тангенс (tan(PHI) PHI угол места) очень сильно искажает график.
Жаль что нет средств для таких задач.

кому интересно данные в файле

первые 3 колонки данные угла места, следующие 3 колонки данные угла по азимуту, последняя колонка значение мощьности

60;54;30; ;106;26;8; ;1,39


визуализация должна выглядеть следующим образом: 4 блина диаграммы направленности расположенные на углах 0град, 30град, 60град, 90град (практически цилиндр),
Daddy Torque
Наткнулся на эту ветку, пытаясь построить ДН для своей антенны... в итоге построил таким образом:


dia_sq = dia .* conj(dia);
[U,V] = meshgrid((hor_begin*pi/180:hor_step*pi/180:hor_end*pi/180),(ver_begin*pi/180:ver_step*pi/180:ver_end*pi/180));
X = dia_sq .* cos(V) .* cos(U);
Y = dia_sq .* cos(V) .* sin(U);
Z = dia_sq .* sin(V);
figure(2);
mesh(X,Z,Y);


поясняю: dia - это сетка комплексных значений где орты сетки это углы по горизонтали и вертикали.
соответственно, dia_sq это аналогичная сетка мощностей с разных направлений
дальше из полярных трёхмерных координат переходим в декартовые трёхмерные и строим mesh.

На всякий случай привожу полную функцию (хотя там есть ещё другие функции, которые здесь не буду приводить)

function f=directive_pattern_vert_hfa_3d(freq, hor_begin, hor_end, hor_step, ver_begin, ver_end, ver_step)
antenna = init_antenna_def();
LO_FREQ_LIM = antenna.lo_freq_limit;
HI_FREQ_LIM = antenna.hi_freq_limit;
antenna.beams_count = 1;
antenna.elevation = 0;
elevation_grid = (ver_begin:ver_step:ver_end)';
azimuth_grid = (hor_begin:hor_step:hor_end)';
elevation_steps_count = size(elevation_grid, 1);
azimuth_steps_count = size(azimuth_grid, 1);
dia = zeros(elevation_steps_count,azimuth_steps_count);
bin = convert_freq_to_bin(freq, 12207, 2048);
freq = convert_bin_to_freq(bin, 12207, 2048);
progress_bar(sprintf('frequency corrected to %f to be equal to closest bin\n',freq), 0, 0);
for j = (1:1:azimuth_steps_count);
azimuth = azimuth_grid(j);
antenna.beams(1) = azimuth*pi/180;
for i = (1:1:elevation_steps_count);
progress_bar('', (i-1)+elevation_steps_count*(j-1), azimuth_steps_count*elevation_steps_count);
elevation = elevation_grid(i);
signal_time = sim_signal_hfa(freq, 1, 0, -azimuth*pi/180, elevation*pi/180, antenna );
signal_freq = FftTime(antenna, signal_time, '', LO_FREQ_LIM, HI_FREQ_LIM);
clear signal_time;
spectrum = sim_antenna3d_direct_beam_forming(signal_freq, antenna, bin);
dia(i,j) = spectrum(bin);
end
end
fprintf(1,'\n');
figure(1);
surf(azimuth_grid, elevation_grid, dia.*conj(dia));
title(sprintf('direct transform, f=%f Hz',freq));
dia_sq = dia .* conj(dia);
[U,V] = meshgrid((hor_begin*pi/180:hor_step*pi/180:hor_end*pi/180),(ver_begin*pi/180:ver_step*pi/180:ver_end*pi/180));
X = dia_sq .* cos(V) .* cos(U);
Y = dia_sq .* cos(V) .* sin(U);
Z = dia_sq .* sin(V);
figure(2);
mesh(X,Z,Y);
f = dia;


на рисунке моя диаграмма в 3d:
Нажмите для просмотра прикрепленного файла
Daddy Torque
поясню ещё... то, что строится и нарисовано - это не совсем ДН, т.к. направление компенсации антенны тоже меняется с изменением направления прихода сигнала - это скорее диаграмма отклика.. не знаю, как правильно это назвать. И ещё там перепутано, надо делать mesh(X,Y,Z). Но это не суть важно, важно, что код пригоден для формирования 3d диаграмм направленности.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.