⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 randomarray.m

📁 程序为了设置自定义的天线阵列模式
💻 M
📖 第 1 页 / 共 2 页
字号:
%---------------------------------------------------------------
% randomarray.m  (last updated 5/24/2005)
% written by Chunwei Jethro Lam, UIUC, jethrolam@gmail.com
%
% An interactive MATLAB GUI platform for realizing the pattern of a narrowband 
% beamformer with a random array. User can specify the array geometry, 
% directions of incoming signals, noise power, and the type of beamformer.
% Useful for gaining insight about collaborative beamforming in sensor
% networks and random arrays.
%
% Instructions and notes:
%  1. Specify an array on the grid map
%      - ADD: select "Add" from list and click on map
%      - EDIT: select sensor from list and click on map
%      - DELETE: select sensor from list and push Delete button
%      - SAVE: save array geometry to loc_data.mat as loc_data (Nx2)
%      - LOAD: load array geomtry from loc_data.mat
%      * first sensor cannot be deleted or edited
%      * unit of measurement: wavelength of the carrier sinusoid
%      * example: ULA with half wavelength spacing: 
%                 loc_data = [0.5*ones(N,1); zeros(N,1)]
%  2. Specify the source signal, interference signals, and noise
%      - ADD: select "Add Intf" from list and click on map
%      - EDIT: select signal from list and click on map 
%      - DELETE: select signal from list and push Delete button 
%      * source and interference power are assumed to be 1.0
%      * source signal cannot be deleted
%      * adjust noise power by slide
%  3. Compute Beamformer based on current array geometry
%      - select beamformer type: MATCH, MVDR, MPDR or MMSE
%      - push "Compute Beamformer..." button to compute new beamformer
%  4. Display Beampattern, SNR gain, SIR gain
%      - Choose polar or semilogy for beampattern plot
%      * SNR gain = SNR_out / SNR_in
%      * SIR gain = SIR_out / SIR_out
%      * SNR = signal-to-noise ratio, SIR = signal-to-interference ratio
%---------------------------------------------------------------
function varargout = randomarray(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @randomarray_OpeningFcn, ...
                   'gui_OutputFcn',  @randomarray_OutputFcn, ...
                   'gui_LayoutFcn',  [], ...
                   'gui_Callback',   []);
if nargin & isstr(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

%----------------------------------------------------
% OPENING FUNCTION
%----------------------------------------------------
function randomarray_OpeningFcn(hObject, eventdata, handles, varargin)

% Choose default command line output for randomarray
handles.output = hObject;

% Initialize sensor locations
handles.loc = zeros(1,2); 
handles.N=1;
handles.tokenN=2; % default next action is ADD
set(handles.loclistbox,'Value',handles.N+1); 

% Initialize signals and noise
handles.sig = pi/2;
handles.M=1;
handles.tokenM=1; 
handles.sourceM=1; 
set(handles.siglistbox,'Value',handles.M); 
handles.noisepower=0.1;

% Initialize beamformer and beampattern
handles.wtype = 1; % 1=match, 2=mvdr, 3=mmse
handles.w = 1;
handles.needupdate = 0; % 0=no 1=yes
handles.theta=linspace(-pi,pi,1024);
handles.sincos=[cos(handles.theta); sin(handles.theta)];
handles.displaytype = 1; %1=polar, 2=semilogy


% Display sensors and loclistbox
displaymap(handles);
displayloclistbox(handles);

% Display signals and siglistbox
displaypattern(handles);
displaysiglistbox(handles);

% Display beamformer wlistbox and update button
displayupdate(handles)
displaywlistbox(handles);

% Display noise power
msg = ['Noise power = ',num2str(handles.noisepower,4)];
set(handles.noisemsgbox,'String',msg);

% Add ButtonDnFcn to map
set(handles.map,'ButtonDownFcn','randomarray(''AddEditSensor'',gcbo,[],guidata(gcbo))'); 

% Add ButtonDnFcn to pattern
set(handles.pattern,'ButtonDownFcn','randomarray(''AddEditSignal'',gcbo,[],guidata(gcbo))'); 

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes randomarray wait for user response (see UIRESUME)
% uiwait(handles.figure1);

%----------------------------------------------------
% DISPLAY LOCLISTBOX
%----------------------------------------------------
function displayloclistbox(handles)

lbmsg = strcat(num2str((1:handles.N)'),' (',num2str(handles.loc,3),')');
lbmsg = strvcat(lbmsg,'Add')    ;
set(handles.loclistbox,'String',lbmsg);

%----------------------------------------------------
% DISPLAY SENSORS on MAP
%----------------------------------------------------
function displaymap(handles)

% Display Sensors on Map
axes(handles.map); cla; hold on; grid on; axis([-5 5 -5 5]); 
plot(handles.loc(1:handles.N,1),handles.loc(1:handles.N,2),'bo');
if handles.tokenN <= handles.N
  plot(handles.loc(handles.tokenN,1),handles.loc(handles.tokenN,2),'ro');
end

%----------------------------------------------------
% ADD or EDIT Sensors
%----------------------------------------------------
function AddEditSensor(hObject,eventdata,handles)
% Get mouse click position from map
axes(handles.map);
pt = get(gca,'CurrentPoint');
px = pt(1,1); py = pt(1,2);

if handles.tokenN > handles.N
  % Add sensor
  handles.N = handles.N+1;    
  handles.loc(handles.N,:)=[px py];
  % Next action is ADD
  handles.tokenN = handles.tokenN+1;  
  set(handles.loclistbox,'Value',handles.tokenN);
  % Add dummy beamformer and display
  handles.w=[handles.w; 0];
  % Update beampattern
  displaypattern(handles);
else
  % Edit sensor indexed by tokenN, first sensor cannot be edited
  if handles.tokenN~=1
    handles.loc(handles.tokenN,:)=[px py];
  end
  % Update beampattern
  displaypattern(handles);
end

% Turn on needupdate flag
handles.needupdate=1;
displayupdate(handles);
% Display sensors and loclistbox and wlistbox
displaymap(handles);
displayloclistbox(handles);
displaywlistbox(handles);
% Update handles structure
guidata(hObject, handles);

%----------------------------------------------------
% DELETE Sensors
%----------------------------------------------------
function locdelete_Callback(hObject, eventdata, handles)

% Delete sensor indexed by tokenN, first sensor cannot be deleted
if (handles.tokenN ~=1)&&(handles.tokenN<=handles.N)
  % Delete sensors
  handles.loc(handles.tokenN:(handles.N-1),:) = handles.loc((handles.tokenN+1):handles.N,:);
  handles.loc(handles.N,:)=[];
  % Delete beamformer weight
  handles.w(handles.tokenN:(handles.N-1),:) = handles.w((handles.tokenN+1):handles.N,:);
  handles.w(handles.N,:)=[];
  % Decrease number of senosr by 1
  handles.N = handles.N-1;

  % Turn on Need udpate flag
  handles.needupdate=1;
  displayupdate(handles);
  % Display map, Update loclistbox, Display pattern, Display beamformer
  displaymap(handles);
  displaypattern(handles);
  displaywlistbox(handles);
  displayloclistbox(handles);
  % Update handles structure
  guidata(hObject, handles);
end

%----------------------------------------------------
% CREATE LOCLISTBOX
%----------------------------------------------------
function loclistbox_CreateFcn(hObject, eventdata, handles)
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%----------------------------------------------------
% LOCLISTBOX CLICK ACTION
%----------------------------------------------------
function loclistbox_Callback(hObject, eventdata, handles)
% Change tokenN according to the selected loclistbox item
handles.tokenN= get(hObject,'Value');
% Synchronize highlight with wtypelistbox
set(handles.wlistbox,'Value',handles.tokenN);
% Displaymap due to color changes
displaymap(handles);
% Update handles structure
guidata(hObject, handles);

%----------------------------------------------------
% SAVE
%----------------------------------------------------
function save_Callback(hObject, eventdata, handles)

% save handles.loc to loc_data.mat
loc_data = handles.loc;
save loc_data loc_data;


%------------------------------------------
% LOAD
%------------------------------------------
function load_Callback(hObject, eventdata, handles)

% load handles.loc from loc_data.mat
load loc_data loc_data;
handles.loc = loc_data;
handles.N = size(loc_data,1);
% next action is ADD by default
handles.tokenN = handles.N+1;  
set(handles.loclistbox,'Value',handles.N+1);
% Add dummy beamformer
handles.w=[1; zeros(handles.N-1,1)];

% Turn on Need udpate flag
handles.needupdate=1;
displayupdate(handles);
% Display map, Update loclistbox, Display pattern, Display beamformer
displaymap(handles);
displaypattern(handles);
displayloclistbox(handles);
displaywlistbox(handles);
% Update handles structure
guidata(hObject, handles);

%------------------------------------------
% CREATE WTYPE MENU
%------------------------------------------
function wtype_CreateFcn(hObject, eventdata, handles)
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%------------------------------------------
% WTYPE MENU CLICK ACTION
%------------------------------------------
function wtype_Callback(hObject, eventdata, handles)
handles.wtype = get(hObject,'Value');

handles.needupdate=1;
displayupdate(handles);

% Turn on Need udpate flag
handles.needupdate=1;
displayupdate(handles);
% Update handles structure
guidata(hObject, handles);


%------------------------------------------
% CREATE SIGLISTBOX
%------------------------------------------
function siglistbox_CreateFcn(hObject, eventdata, handles)
if ispc
    set(hObject,'BackgroundColor','white');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -