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

📄 randomarray.m

📁 程序为了设置自定义的天线阵列模式
💻 M
📖 第 1 页 / 共 2 页
字号:
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%------------------------------------------
% SIGLISTBOX CLICK ACTION
%------------------------------------------
function siglistbox_Callback(hObject, eventdata, handles)
% Change tokenM according to the selected siglistbox item
handles.tokenM = get(hObject,'Value');

% Update handles structure
guidata(hObject, handles);

%------------------------------------------
% DELETE Signal
%------------------------------------------
function sigdelete_Callback(hObject, eventdata, handles)
% Delete signal indexed by tokenM
if (handles.tokenM ~=1)&&(handles.tokenM~=handles.sourceM)&&(handles.tokenM~=handles.M+1)
  handles.sig(handles.tokenM:(handles.M-1)) = handles.sig((handles.tokenM+1):handles.M);
  handles.sig(handles.M)=[];
  handles.M = handles.M-1;
  handles.tokenM = handles.tokenM-1;
  set(handles.siglistbox,'Value',handles.tokenM);
  handles.needupdate=1;
  displayupdate(handles);
  % Display signals, loclistbox
  displaypattern(handles);
  displaysiglistbox(handles);
  % Update handles structure
  guidata(hObject, handles);
end

%----------------------------------------------------
% DISPLAY SIGLISTBOX
%----------------------------------------------------
function displaysiglistbox(handles)
% Show Signal DOA in both degree and radian
siglbmsg0 = strcat('Source ->',num2str(handles.sig(1)',3));
siglbmsg=[];
if handles.M > 1
  siglbmsg = strcat('Intf #', num2str(-1+(2:handles.M)'),' ->',num2str(handles.sig(2:handles.M)',3));
end
siglbmsg = strvcat(siglbmsg0, siglbmsg,'Add Intf');
set(handles.siglistbox,'String',siglbmsg);

%----------------------------------------------------
% DISPLAY BEAMPATTERN, SNR and SIR
%----------------------------------------------------
function displaypattern(handles)

%  beampattern
resp = handles.w'*exp(j*2*pi*handles.loc*handles.sincos);
absresp = abs(resp);

% Compute and display SNR gain
sincos1 = [cos(handles.sig(1)); sin(handles.sig(1))]; 
signal_gain = norm(handles.w'*exp(j*2*pi*handles.loc*sincos1))^2;
noise_gain = norm(handles.w)^2;
SNRgain = signal_gain/noise_gain;
SNRmsg = ['SNR gain = ',num2str(SNRgain,4)];
% Compute and display SIR gain
intf_gain=0;
for i=2:handles.M
  sincos1 = [cos(handles.sig(i)); sin(handles.sig(i))];     
  intf_gain = intf_gain + (norm(handles.w'*exp(j*2*pi*handles.loc*sincos1)))^2;
end
if intf_gain~=0
  SIRimp = signal_gain/intf_gain;
  SIRmsg = ['SIR gain = ',num2str(SIRimp,4)];
else
   SIRmsg = ['SIR gain = N/A'];
end
set(handles.SNRmsgbox,'String',strvcat(SNRmsg,SIRmsg));

% Display in Polar or Semilogy form
if handles.displaytype==1
  axes(handles.pattern); cla; hold on; 
  axis([-1 1 -1 1]*1.1); 
  % Show beampattern
  polar(handles.theta,absresp); 
  % Show signals
  for i=2:handles.M
     polar(handles.sig(i)+[0 0+eps],[0 2],'k');
  end
  polar(handles.sig(handles.sourceM)+[0 0+eps],[0 2],'c');
else
  axes(handles.pattern); cla; hold on; 
  axis([-pi pi 0 1.1*max(absresp)]); 
  % Show beampattern
  semilogy(handles.theta,absresp); 
  % Show signals
  for i=2:handles.M
     semilogy(handles.sig(i)+[0 0+eps],[0 2],'k');
  end
  semilogy(handles.sig(handles.sourceM)+[0 0+eps],[0 2],'c');
end    
  
%----------------------------------------------------
% ADD or EDIT Signals
%----------------------------------------------------
function AddEditSignal(hObject,eventdata,handles)
% Get mouse click position from map
axes(handles.pattern);
pt = get(gca,'CurrentPoint');
px = pt(1,1); py = pt(1,2);

if handles.tokenM > handles.M
  % Add signal in Polar or Linear Form
  handles.M = handles.M+1;    
  if handles.displaytype==1
    handles.sig(handles.M)=atan(py/px) - pi*(px<0)*(py<0) + pi*(px<0)*(py>0);
  else
    handles.sig(handles.M)=px;      
  end
else
  % Edit signal in Polar or Linear Form
  if handles.displaytype==1
    handles.sig(handles.tokenM)=atan(py/px) - pi*(px<0)*(py<0) + pi*(px<0)*(py>0);
  else
    handles.sig(handles.tokenM)=px;
  end
end

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

%------------------------------------------
% UPDATE BEAMFORMER 
%------------------------------------------
function update_Callback(hObject, eventdata, handles)
switch handles.wtype
  case 1 % Match filter
    tempa = steering(handles.loc,handles.sig(1));
    handles.w = tempa/length(tempa);
  case 2 % MVDR
    tempR = handles.noisepower*eye(handles.N);
    for i=2:handles.M
      tempa = steering(handles.loc,handles.sig(i));        
      tempR = tempR + tempa*tempa';
    end
    tempa = steering(handles.loc,handles.sig(1));        
    tempw = tempR\tempa;
    handles.w = tempw/(tempa'*tempw);
  case 3 % MPDR
    tempR = handles.noisepower*eye(handles.N);
    for i=1:handles.M
      tempa = steering(handles.loc,handles.sig(i));        
      tempR = tempR + tempa*tempa';
    end
    tempa = steering(handles.loc,handles.sig(1));        
    tempw = tempR\tempa;
    handles.w = tempw/(tempa'*tempw);     
  case 4 % MMSE
    tempR = handles.noisepower*eye(handles.N);
    for i=1:handles.M
      tempa = steering(handles.loc,handles.sig(i));        
      tempR = tempR + tempa*tempa';
    end
    tempa = steering(handles.loc,handles.sig(1));        
    tempw = tempR\tempa;
    handles.w = tempw;     
end  

% Turn off Need udpate flag
handles.needupdate=0;
displayupdate(handles);
% Display pattern
displaypattern(handles);
% Display wlistbox
displaywlistbox(handles);
% Update handles structure
guidata(hObject, handles);

%------------------------------------------
% HALT (debugging purposes)
%------------------------------------------
function halt_Callback(hObject, eventdata, handles)
keyboard

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

%------------------------------------------
% DISPLAYTYPE CLICK ACTION
%------------------------------------------
function displaytype_Callback(hObject, eventdata, handles)
handles.displaytype = get(hObject,'Value'); % 1=polar, 2=semilogy

% Display pattern
displaypattern(handles);
% Update handles structure
guidata(hObject, handles);

%------------------------------------------
% RETURN STEERING VECTOR
%------------------------------------------
function w = steering(loc,sig)
% handles    structure with handles and user data (see GUIDATA)
sincos1 = [cos(sig); sin(sig)]; 
w = exp(j*2*pi*loc*sincos1);

%------------------------------------------
% CREATE NOISEPOWER SLIDE
%------------------------------------------
function noisepowerslide_CreateFcn(hObject, eventdata, handles)
usewhitebg = 1;
if usewhitebg
    set(hObject,'BackgroundColor',[.9 .9 .9]);
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%---------------------------------------------
% NOISEPOWER SLIDE CLICK ACTION
%---------------------------------------------
function noisepowerslide_Callback(hObject, eventdata, handles)
handles.noisepower= get(hObject,'Value');
% Display noise power
msg = ['Noise power = ',num2str(handles.noisepower,4)];
set(handles.noisemsgbox,'String',msg);
% Turn on needudpate flag
handles.needupdate=1;
displayupdate(handles);
% Update handles structure
guidata(hObject, handles);

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

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

%----------------------------------------------------
% DISPLAY WLISTBOX
%----------------------------------------------------
function displaywlistbox(handles)
% Show beamformer
% insert blank row
wlbmsg = strvcat(strcat('w',num2str((1:handles.N)'),' = ',num2str(handles.w,3),''),' ');
set(handles.wlistbox,'String',wlbmsg);
% Synchronize highlight with loclistbox
set(handles.wlistbox,'Value',handles.tokenN);

%----------------------------------------------------
% DISPLAY UPDATE BUTTON
%----------------------------------------------------
function displayupdate(handles)
updatemsg0 = ' ';
updatemsg1 = 'Update Beamformer';
% Show Update Button if need update
if handles.needupdate==0
  set(handles.update,'String',updatemsg0);
else
  set(handles.update,'String',updatemsg1);
end

%------------------------------------------
% DUMMY FUNCTIONS
%------------------------------------------
function varargout = randomarray_OutputFcn(hObject, eventdata, handles)

⌨️ 快捷键说明

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