2014-02-08 4 views
1

Я использую Matlab, чтобы попытаться исследовать диаграммы направленности антенн дальнего поля. В принципе, я пытаюсь построить 3 разных функции х и их преобразование Фурье. Я разработал, как написать скрипт, который вычисляет дальнее поле трех разных распределений и вычисляет их.Использование ползунка Matlab для обновления нескольких графиков и вычислений

Однако в сценарии я использую переменную 'a'. Я хотел бы иметь возможность обновлять переменную в режиме реального времени с помощью слайдера. Когда перемещается ползунок, a изменяется, и все вычисления, которые используют a, пересчитываются, и графики обновляются.

Я считаю, что мне нужно изменить свой скрипт на функцию и использовать обратный вызов. Я пробовал разные вещи, мне удалось получить слайдер, который обновляет значение a, но он не пересчитывает и не реплицирует.

Мой сценарий выглядит следующим образом. Это мой первый опыт использования Matlab, так что это может быть немного сумасшедшим.

% ------- APERTURE FUNCTIONS ------- 

x = -5 : 0.001 : 5; % Define the x axis 
a = 1;    % Define aperture size 
f1 = zeros(size(x)); % Initialise an aperture function 
f2 = zeros(size(x)); % Initialise an aperture function 
f3 = zeros(size(x)); % Initialise an aperture function 

% Declaration of functions 
for i = 1 : length(x) 
    if abs(x(i)) <= a/2 
    f1(i) = 1;    % Rectangular Function 
    f2(i) = cos(pi*x(i)/a); % Cosine Function 
    f3(i) = 1-2*abs(x(i))/a; % Triangular Function 
    else 
    f1(i) = 0; 
    f2(i) = 0; 
    f3(i) = 0; 
    end 
end 

figure; 

subplot(2,3,1); plot(x,f1,'LineWidth',2); 
ylim([0 1.5]) 
xlabel('x (m)'); 
ylabel('f1(x)'); 
title('Rectangular Aperture Function'); 

subplot(2,3,2); plot(x,f2,'LineWidth',2); 
ylim([0 1.5]) 
xlabel('x (m)'); 
ylabel('f3(x)'); 
title('Cosine Aperture Function'); 

subplot(2,3,3); plot(x,f3,'LineWidth',2); 
ylim([0 1.5]) 
xlabel('x (m)'); 
ylabel('f2(x)'); 
title('Triangular Aperture Function'); 

%------------- FARFIELD CALCULATION ------------ 

u = [-4 : 0.01 : 4]; % Define the u axis 
G1 = zeros(size(u)); % Initialise a Farfield function 
G2 = zeros(size(u)); % Initialise a Farfield function 
G3 = zeros(size(u)); % Initialise a Farfield function 

for i = 1 : length(u) 
    G1(i) = trapz(x,f1.*exp(-j*2*pi*u(i)*x)); % Fourier Transform 
    G2(i) = trapz(x,f2.*exp(-j*2*pi*u(i)*x)); % Fourier Transform 
    G3(i) = trapz(x,f3.*exp(-j*2*pi*u(i)*x)); % Fourier Transform 
end 

subplot(2,3,4); 
plot(u,20*log(abs(G1)),'LineWidth',2); 
axis([-4 4 -200 0]); 
xlabel('u'); 
ylabel('|G(u)|'); 
title('Far-Field Magnitude of a Rectangular Function'); 

subplot(2,3,5); 
plot(u,20*log(abs(G2)),'LineWidth',2); 
axis([-4 4 -200 0]); 
xlabel('u'); 
ylabel('|G(u)|'); 
title('Far-Field Magnitude of a Cosine Function'); 

subplot(2,3,6); 
plot(u,20*log(abs(G3)),'LineWidth',2); 
axis([-4 4 -200 0]); 
xlabel('u'); 
ylabel('|G(u)|'); 
title('Far-Field Magnitude of a Triangular Function'); 
+0

Я бы предложил сначала создать файл функции matlab, который вычисляет вашу функцию, учитывая некоторые входные аргументы. Затем создайте функцию обратного вызова в другом файле для вашего слайдера. Наконец, ваш обратный вызов должен иметь обработчики сюжета, чтобы обновить их. Попытайтесь заставить его работать только с одним сюжетом, тогда должно быть легко заставить всех работать. – jerad

ответ

0

Мне кажется, что вам нужно создать простой графический интерфейс с тремя графиками и слайдером. Проверьте this MathWorks site на введение в создание GUI с GUIDE. Я думаю, вы найдете несколько примеров того, что вы пытаетесь сделать.

Смежные вопросы