Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
1

GUI: расчет фазированной антенной решетки

30.05.2013, 18:00. Просмотров 4835. Ответов 43
Метки faq+ (Все метки)

Добрый вечер!
Узнал что в matlab можно создавать приложения, но к сожалению, не знаю как... Сам интерфейс сделал, а как каждой кнопке присвоить значения не знаю. Кто делал, подскажите как? Смотрел видеокурс по youtube, но как-то не помагло...
Может быть у мня слишком запутанный код?
Могу выложить архив с подробным описанием и интерфейсом.
Кому не сложно, помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 18:00
Ответы с готовыми решениями:

Как построить кристаллические решетки в Matlab?
Как можно построить(визуализировать в 3D) кристаллические решетки (например,...

Сдвиг антенной решетки
Есть 2 антенные решетки отдаленные друг от друга на расстоянии 1λ. Для них...

Диаграмма направленности антенной решетки
Есть формулы диаграммы направленности и главных максимумов(тета и альфа),...

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

Определить число максимумов в спектре дифракционной решетки, период дифракционной решетки.
Дифракционная решетка шириной 12 мм содержит 4800 штрихов. Определить: 1) число...

43
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
31.05.2013, 23:32 21
Цитата Сообщение от Dimast Посмотреть сообщение
По умолчанию на панели должны стоять цифры, которые я выставил
это где вы их выставили?

Цитата Сообщение от Dimast Посмотреть сообщение
должен быть включен cos на пьедестале и прямоугольная решётка. Дискретное фазирование при этом должно быть выключено.
в FARa_OpeningFcn:
Matlab M
1
2
3
set(handles.cos,'Value',1)
set(handles.disc,'Value',0) % а стояла 1
set(handles.rectan,'Value',1)
Цитата Сообщение от Dimast Посмотреть сообщение
p1 это дискретное фазирование и его необходимо заменить на D.
По подробнее об этом. p1 и D это переменные в скрипте FAR1_file. Есть ещё графические объекты disc и D. Чего тут заменять?

Цитата Сообщение от Dimast Посмотреть сообщение
(при отключенном дискретном фазировании каким то образом должна ставиться в plot вместо Px-K1 и наоборот)
Здесь?:
str=['(',num2str((floor((ar1(ik))*100))/100),',',num2str(Px(ik)*180/pi),')'];

Цитата Сообщение от Dimast Посмотреть сообщение
при нажатии кнопки Показать Амплитуды и фазы должен появиться текст у квадратиков,
тогда наверно кнопка "Показать Амплитуды и фазы" должна быть в стиле Toggle Button, а не Push Button. Откройте FARa.fig через guide, сделайте двойной щелчёк на "Показать Амплитуды и фазы" и измените свойство Style на togglebutton. Сохраните FARa.fig через guide. Запустите FAR1_file и понажимайте на кнопку.
Я вижу цикл для прорисовки надписей уже в show_Callback этой кнопки. Теперь надо достать даные ar1, Px, T, у. Их можно прочитать из рабочего пространства 'base' перед выполнением цикла:
Matlab M
1
2
3
4
ar1 = evalin('base', 'ar1');
Px = evalin('base', 'Px');
T = evalin('base', 'T');
y = evalin('base', 'y');
Тоже относится и к save_Callback. Там надо прочитать N,T

Цитата Сообщение от Dimast Посмотреть сообщение
(как кнопку в кнопке сделать я не знаю)
а как вы FARa.fig сделали? так само можно и таблички нарисовать и кнопки. Нажимаете кнопку New Figure в guide и рисуете. Только сохранитесь и сделайте соответствующий *.m перед тем как использовать. А потом этот новый интерфейс можно вызвать из из сallback какой-нибудь кнопки. Абсолютно так же как FAR1_file вызывает функцию FARa.

P.S. можем перейти на ты?
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
01.06.2013, 07:58  [ТС] 22
Объясню про p1.

Цитата Сообщение от tvoretsmira Посмотреть сообщение
Undefined function or variable 'p1'.
Error in FAR1_file (line 90)
disPx = floor((psi/p1)+0.5).*p1;
Вот здесь p1 необходимо заменить на D
И всё будет работать.
В моей программе дискрет вычисляется здесь:

Px = floor((K1/D)+0.5).*D;

Значение Px должно всавляться в plot при нажатии "Дискретное фазирование"
(T=[x;y;z;ar1;Px];
T=T';
plot(hax,T(:,1),y,'sr')

Без дискретного фазирования в plot должна быть вставлена K1
(T=[x;y;z;ar1;K1];
T=T';
plot(hax,T(:,1),y,'sr')

Добавлено через 26 минут
Цитата Сообщение от tvoretsmira Посмотреть сообщение
ar1 = evalin('base', 'ar1');
Px = evalin('base', 'Px');
T = evalin('base', 'T');
y = evalin('base', 'y');
Это куда необходимо вставить, или как применить?

Добавлено через 5 минут
Цитата Сообщение от tvoretsmira Посмотреть сообщение
а как вы FARa.fig сделали? так само можно и таблички нарисовать и кнопки. Нажимаете кнопку New Figure в guide и рисуете. Только сохранитесь и сделайте соответствующий *.m перед тем как использовать. А потом этот новый интерфейс можно вызвать из из сallback какой-нибудь кнопки. Абсолютно так же как FAR1_file вызывает функцию FARa.
Ты имеешь ввиду, что необходимо зайти в guid и сделать новый файл, который потом необходимо связать с FARa.fig?
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
01.06.2013, 09:35 23
Переменная p, она передаётся из интерфейса, но нигде не используется.



Цитата Сообщение от Dimast Посмотреть сообщение
Значение Px должно всавляться в plot при нажатии "Дискретное фазирование"
Matlab M
1
2
3
4
5
if disc==1
  T=[x;y;z;ar1;Px];
else
 T=[x;y;z;ar1;K1];
end
а надписи на графике при этом разве не должны менятся?


Цитата Сообщение от Dimast Посмотреть сообщение
Это куда необходимо вставить, или как применить?
втсавлять в
Цитата Сообщение от tvoretsmira Посмотреть сообщение
show_Callback
перед
Matlab M
1
2
3
4
for ik=1:N
str=['(',num2str((floor((ar1(ik))*100))/100),',',num2str(Px(ik)*180/pi),')'];
text(T(ik,1),y(ik),str,'VerticalAlignment','baseline','FontSize',8)
end

Цитата Сообщение от Dimast Посмотреть сообщение
Ты имеешь ввиду, что необходимо зайти в guid и сделать новый файл, который потом необходимо связать с FARa.fig?
да
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
01.06.2013, 09:58  [ТС] 24
Цитата Сообщение от tvoretsmira Посмотреть сообщение
if disc==1
* T=[x;y;z;ar1;Px];
else
*T=[x;y;z;ar1;K1];
end
Ой не в плот а в эту матрицу, так как значения из этой матрицы должны сохраняться в txt именно столбиками как сделаны в м-файле, я этот файл потом буду использовать в другой программе...

K1 это просто будут углы с любыми значениями, а когда поставим Px, то они будут кратными выбранному нами значению.
Как сделать, чтобы как в primerchik значения можно было вводить по несколько раз?
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
01.06.2013, 10:32 25
Цитата Сообщение от Dimast Посмотреть сообщение
Ой не в плот а в эту матрицу, так как значения из этой матрицы должны сохраняться в txt именно столбиками как сделаны в м-файле, я этот файл потом буду использовать в другой программе...
Это можно сделать и после прорисовки
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
% Результаты для сохранения документа txt.
T=[x;y;z;ar1;Px];
T=T';
plot(hax,T(:,1),y,'sr');
for ik=1:N
  str=['(',num2str((floor((ar1(ik))*100))/100),',',num2str(Px(ik)*180/pi),')'];
  text(T(ik,1),y(ik),str,'VerticalAlignment','baseline','FontSize',8)
end
if disc==1
  T=[x;y;z;ar1;Px];
else
  T=[x;y;z;ar1;K1];
end
T=T';

Цитата Сообщение от Dimast Посмотреть сообщение
Как сделать, чтобы как в primerchik значения можно было вводить по несколько раз?
так само, в цикле. А в интерфейсе надо будет предусмотреть альтернативный вариант выходных переменных, на случай если пользователь закроет окно интерфейса. Пример у тебя есть.
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
01.06.2013, 12:51  [ТС] 26
У нас с тобой совсе разный уровень знания matlab, я вообще не ориентируюсь в таком большом количестве строк и различных функций (то, что написано в м-файле и то сделано с вашей помащью), а самое главное я не знаю как правильно их прописывать... Это всё для меня как буд-то я попал в другую страну где всё вижу, но не могу понять ни одного слова...
Я делаю всё как ты говоришь, но ничего не получается.
Возникают непонятные для меня ошибки...
fara.rar
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.06.2013, 09:23 27
Нельзя требовать от функции то, чего она не должна давать. Вот ты вызываеш в FAR1_file.m функцию FARa
[hax,Nx,Ny,dx,dy,delx,dely,theta,fi,lym,K1]=FARa;
а функция FARa отвечает тем, что попадает в varargout (VARiable ARGument OUTput). В коментариях функции я писал что она выдаёт:
Matlab M
1
2
function varargout = FARa_OutputFcn(hObject, eventdata, handles) 
%[hax,Nx,Ny,dx,dy,delx,dely,teta,fi,lym,D,cs,disc,LocEl]=FARa
значит K1=D, а cs,disc,LocEl тебе не нужны, так?

Matlab M
1
2
3
Undefined function or variable 'disc'.
Error in FAR1_file (line 77)
if disc==1
Что ты хотел сделать то?
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.06.2013, 10:21 28
Я зацыклил программу и изменил работу кнопок Показать амплитуды и фазы токов и Амплитуда и фаза токов
faraN.rar
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
02.06.2013, 13:48  [ТС] 29
Я вижу, что теперь работает и работает на порядок лучше! Спасибо огромное за помощь!
Но не понимаю почему не работает дискретное фазирование и переменные theta и fi? Как отключить автоматическое включение гистограммы при нажатии кнопки "Вид АР", как можно сделать, чтобы при изменении параметров (например, "cos на пьдестале") и потом при нажатии вновь "Вид АР" была включена именно та кнопка, которую я нажал?
Обьясню как работало дискретное фазирование в моём м-файле.
Когда дискретное фазирование не применялось, то файл формировался только со значениями K1, который в свою очередь зависел от переменных theta и fi, при включении дискретное фазирование должна была формироваться матрица со значениями Px, которая формируется на основе K1 (Px = floor((K1/D)+0.5).*D в свою очередь D является переменной которая задаёт кратность всех значений выбранному (единственное я упустил момент, что если вдруг выпадет число 370 градусов, то программа его так и пишет, а хотелось бы, чтобы она писала как 10 градусов и т.д.).
Как сделать, чтобы экран на котором показываются точки можно было увеличить? Это делается в Guid или прописывается функция? После создания интерфейса и отладки всех проблемных мест, как правильно проверять работоспособность программы, в самом guid или в м-файл? Просто Guid выдаёт ошибки, а м-файл нет.
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.06.2013, 14:33 30
С guide ты ничего не должен запускать.

Цитата Сообщение от Dimast Посмотреть сообщение
как можно сделать, чтобы при изменении параметров (например, "cos на пьдестале") и потом при нажатии вновь "Вид АР" была включена именно та кнопка, которую я нажал?
Удалить из FARa_OpeningFcn. A то, что хочеш чтоб было включено при старте тогда выставляеш в guide.
Matlab M
1
2
3
set(handles.cos,'Value',1)
set(handles.disc,'Value',0)
set(handles.rectan,'Value',1)
Ниже инструкция в картинках, показывающая как включить checkbox в guide:
Жмёш правой кнопкой мыши на checkboxe и выбираеш Property Inspector
GUI: расчет фазированной антенной решетки

В инспекторе находиш свойство Value и жмёш кнопку [:] в этой строке
GUI: расчет фазированной антенной решетки

Делаеш двойной щелчок на цифре и пишеш нужное значение (0 -выкл; 1-вкл.). Затем жмёш OK
GUI: расчет фазированной антенной решетки

Теперь в guide отобразилось сделаное изменение. Дальше нужно сохранить этот fig файл в guide
GUI: расчет фазированной антенной решетки

Выствленые и сохранённые таким образом Свойства отображаются при открытии.

тоже самое можна проделать и с radiobutton
2
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
02.06.2013, 14:50 31
Цитата Сообщение от Dimast Посмотреть сообщение
Как отключить автоматическое включение гистограммы при нажатии кнопки "Вид АР"
закоментировать или удалить код программы выводящий гистограму
Цитата Сообщение от Dimast Посмотреть сообщение
Когда дискретное фазирование не применялось, то файл формировался только со значениями K1, который в свою очередь зависел от переменных theta и fi, при включении дискретное фазирование должна была формироваться матрица со значениями Px, которая формируется на основе K1 (Px = floor((K1/D)+0.5).
Проверить включено ли дискретное фазирование в FAR1_file можно с помощью переменной disc.
Matlab M
1
2
3
4
5
if disc==0 %get(handes.disc,'Value')==0 в FARа
%Выполняются действия при выключеном дискретном фазировании
else
%Выполняются действия при включённом дискретном фазировании
end
Добавлено через 5 минут
Цитата Сообщение от Dimast Посмотреть сообщение
Но не понимаю почему не работает дискретное фазирование и переменные theta и fi?
Переменные theta и fi переданы в FAR1_file. Не работает, а в чём это выражается?
Цитата Сообщение от Dimast Посмотреть сообщение
Как сделать, чтобы экран на котором показываются точки можно было увеличить?
Зачем тогда надо было его включать в интерфейс? сделал бы отдельным графиком.
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
03.06.2013, 15:18  [ТС] 32
Спасибо огромное, что подробно расписали и показали!
theta и fi работают, не работает правильно дискретное фазирование и возникают проблемы с "cos^2", а также когда нажимаю "Амплитуда и фаз токов", то там значения фазы записываются не в столбики и строчки, а только в строчку.
Как избавиться от окна появляющегося при нажатии кнопки "Вид АР"?,
Вложение 277004
Я ставлю значение "cos^2" и нажимаю "Вид АР" то происходит зацикливание "cos", как от этого избавиться?
Вложение 277010
При нажатии кнопки "Амплитуда и фаз токов" матрица строится в строку, а я её преобразовывал в строки и столбцы, как в данном случае привязать правильную матрицу?
Вложение 277013
Дискретное фазирование должно зависеть от выставленного значения переменной p=22.5 (Эта переменная в коде обозначается как D), и в этом случае все фазы должны становиться кратными 22.5 градусам (т.е. матрица должна строитсья как Px, а не K1). Вообще не знаю как в этом случае сделать правильно?
Проблема с включением значения "дискретное фазирование" (нажимаю, что оно включено), нажимаю "Вид АР" оно отключается, как настроить правильно?
Прошу простить меня, за то, что я высылаю вам целое задание, но ничего не могу сделать сам, вновь появляется необходимость прибегнуть к вашей помощи.
P.S. программирование, для меня, - это самая большая головная боль.

Добавлено через 12 минут
С составлением матрицы в кнопке "Амплитуда и фаза токов" я разобрался и сделал сам, единственное, не знаю как сделать, чтобы все значения записывались в пределах 360 градусов (например, там появится число 385 градусов, а это тоже самое, что и 25 градусов). Есть ли возможность это исправить?

Добавлено через 1 час 23 минуты
Как ограничить количество знаков после запятой (до двух), можно ли остальные скрыть? Где-то находил функцию для этого, но не помню....

Добавлено через 7 секунд
Как ограничить количество знаков после запятой (до двух), можно ли остальные скрыть? Где-то находил функцию для этого, но не помню....

Пчему-то вложения не работают, отправляю заново
GUI: расчет фазированной антенной решетки


GUI: расчет фазированной антенной решетки
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
03.06.2013, 20:35 33
Цитата Сообщение от Dimast Посмотреть сообщение
единственное, не знаю как сделать, чтобы все значения записывались в пределах 360 градусов (например, там появится число 385 градусов, а это тоже самое, что и 25 градусов). Есть ли возможность это исправить?
пускай a переменная в которой есть эти углы, тогда
Matlab M
1
2
mask=a>360;
a(mask)=a(mask)-360;
Цитата Сообщение от Dimast Посмотреть сообщение
Как ограничить количество знаков после запятой (до двух), можно ли остальные скрыть? Где-то находил функцию для этого, но не помню....
где надо ограничить? Не всюду это делается одинаково.

Откуда там график пустой на первом вложении я не вкурсе, это ты уже чего-то намудрил. Выкладывай текущую версию програмы.

Цитата Сообщение от Dimast Посмотреть сообщение
Я ставлю значение "cos^2" и нажимаю "Вид АР" то происходит зацикливание "cos", как от этого избавиться?
В чём это "зацыкливание" выражается?


Цитата Сообщение от Dimast Посмотреть сообщение
когда нажимаю "Амплитуда и фаз токов", то там значения фазы записываются не в столбики и строчки, а только в строчку.
В FARa2_OpeningFcn вот эти строки пишут данные в таблицы
Matlab M
1
2
3
4
ar1= evalin('base', 'ar1');
K1= evalin('base', 'K1');
set(handles.uitable1,'Data',ar1)
set(handles.uitable2,'Data',K1)
транспонируй если надо вот так:
Matlab M
1
2
set(handles.uitable1,'Data',ar1.')
set(handles.uitable2,'Data',K1.')
Цитата Сообщение от Dimast Посмотреть сообщение
Проблема с включением значения "дискретное фазирование" (нажимаю, что оно включено), нажимаю "Вид АР" оно отключается, как настроить правильно?
Уже писал писал об этом
Цитата Сообщение от tvoretsmira Посмотреть сообщение
Удалить из FARa_OpeningFcn.
set(handles.cos,'Value',1)
set(handles.disc,'Value',0)
set(handles.rectan,'Value',1)
Добавлено через 8 минут
Цитата Сообщение от Dimast Посмотреть сообщение
Дискретное фазирование должно зависеть от выставленного значения переменной p=22.5 (Эта переменная в коде обозначается как D), и в этом случае все фазы должны становиться кратными 22.5 градусам (т.е. матрица должна строитсья как Px, а не K1). Вообще не знаю как в этом случае сделать правильно?
Я тоже не знаю как, твоя програма = тебе решать. Например, можно умножить p на целые числа. Тогда результат будет кратным p.
1
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
03.06.2013, 20:50  [ТС] 34
Зацикливание выражается в том, что нажатая кнопка работает совместно с назначенной изначально (по условию).

Добавлено через 1 минуту
Про дискретное фазирование...
Здесь имеется в в иду, что сама кнопка работает не правильно...
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
03.06.2013, 20:55  [ТС] 35
В программном коде дискретное фазирование работает...
Давай я скину качественную прогу где показано как правильно работает дискретное фазирование и многое другое... только этот файл в личку...
скидываю свой файл:
faraN123.rar
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
03.06.2013, 21:01  [ТС] 36
Здесь нормальный файл, правда к другому интерфейсу, но описывает половину моих функций....
far.rar
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
03.06.2013, 21:29 37
Цитата Сообщение от Dimast Посмотреть сообщение
Как избавиться от окна появляющегося при нажатии кнопки "Вид АР"?
Ты в FAR1_file меняеш карту цветов (colormap) каким-то странным образом для текущего графика, а поскольку теущего графика нет, то Матлаб создаёт пустой. Вот это выражение, которое это делает:
Matlab M
1
flag==1;
Кроме того, надо указать на какие оси писать текст свойством Parent в FAR1_file
for ik=1:N
str=['(',num2str((floor((ar1(ik))*100))/100),',',num2str(Px(ik)*180/pi),')'];
text(T(ik,1),y(ik),str,'VerticalAlignment','baseline','FontSize',8,'Parent',hax)
end
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
03.06.2013, 21:34  [ТС] 38
От этого окна избавиться можно?
0
tvoretsmira
457 / 447 / 56
Регистрация: 28.05.2013
Сообщений: 699
03.06.2013, 21:41 39
Цитата Сообщение от Dimast Посмотреть сообщение
От этого окна избавиться можно?
ты сам сделал так, чтобы оно создавалось. А теперь спрашиваеш?
что ты хотел этим выражением сделать?
Matlab M
1
flag==1;
0
Dimast
12 / 2 / 0
Регистрация: 20.02.2013
Сообщений: 94
03.06.2013, 21:48  [ТС] 40
это выражение делает амплитудное распределеие не больше 1 (ar1)
0
03.06.2013, 21:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 21:48

Как запустить qt gui программу, как демон, без gui, скрыв gui?
Как запустить qt gui программу, как демон, без gui, скрыв gui? В gui браузер...

nRF24L01+ с антенной. Аппаратная закладка.
Эту тему создал для информирования участников форума. Несколько дней парился...

nRF24L01 с антенной. Народ! Нужна ваша помощь!
1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru