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

📄 lxzq.m

📁 信号实验常用的simulink模型和mfile,可直接在matlan下运行。
💻 M
📖 第 1 页 / 共 2 页
字号:
function lxzq(action,in1,in2);
%LXZQ	连续周期信号的频谱分析

%	possible actions:
%	  'start'
%	  'down'
%	  'move'
%	  'up'
%	  'redraw'
%	  'done'
%	  'setfreq'
%	  'setwindow'
%	  'showwin'

if nargin<1,
    action='start';
end;

global lxzq_DAT
global fun_str
global zkb1 zkb2 zkb3 

if strcmp(action,'start'),

    %====================================
    % Graphics initialization
    oldFigNumber = watchon;
    figNumber = figure;
    set(gcf, ...
        'NumberTitle','off', ...
        'Name','连续周期信号的频谱分析', ...
        'backingstore','off',...
        'Units','normalized');

    %====================================
    % Information for all buttons
    labelColor=192/255*[1 1 1];
    top=0.95;
    bottom=0.05;
    left=0.75;
    yInitLabelPos=0.90;
    left = 0.78;
    labelWid=0.18;
    labelHt=0.05;
    btnWid = 0.18;
    btnHt=0.07;
    % Spacing between the label and the button for the same command
    btnOffset=0.003;
    % Spacing between the button and the next command's label
    spacing=0.01;
 
    %====================================
    % The CONSOLE frame
    frmBorder=0.02;
    yPos=0.05-frmBorder;
    frmPos=[left-frmBorder yPos btnWid+2*frmBorder 0.9+2*frmBorder];
    h=uicontrol( ...
        'Style','frame', ...
        'Units','normalized', ...
        'Position',frmPos, ...
        'BackgroundColor',[0.5 0.5 0.5]);
    
    %====================================
    % The SIGNAL command popup button

    btnNumber=1;
    yLabelPos=top-(btnNumber-1)*(btnHt+labelHt+spacing);
    labelStr=' 信号';

    % Generic label information
    labelPos=[left yLabelPos-labelHt labelWid labelHt];
    uicontrol( ...
        'Style','text', ...
        'Units','normalized', ...
        'Position',labelPos, ...
        'BackgroundColor',labelColor, ...
        'HorizontalAlignment','left', ...
        'String',labelStr);

    btnPos=[left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt];
    popup=uicontrol('Style','Popup','String','正弦波|方波1|方波2|锯齿波|自定义',...
        'Units','normalized',...
        'Position', btnPos, ...
        'BackgroundColor','w', ...
        'ForegroundColor','k', ...
        'CallBack',[...
		'global lxzq_DAT zkb1 zkb2 zkb3 ;',...
		'popup=lxzq_DAT(10);',...
		'val = get(popup,''Value'');',...
		'if (val ==2 | val==3)', ...
		'   set(zkb1,''Visible'',''on'');', ...
		'   set(zkb2,''Visible'',''on'');', ...
		'   set(zkb3,''Visible'',''on'');', ...
		'   lxzq(''redraw'');',...
		'else,', ...
		'   set(zkb1,''Visible'',''off'');', ...
		'   set(zkb2,''Visible'',''off'');', ...
		'   set(zkb3,''Visible'',''off'');', ...
		'   if (val==1 | val==4 )',...
		'      lxzq(''redraw'');',...
		'   else,',...
		'      getsig;',... % 输入对话框
		'   end,', ...
		'end;']);


    %====================================
    % 矩形波占空比
     btnNumber=2;
    yLabelPos=top-(btnNumber-1)*(btnHt+labelHt+2*spacing)-btnHt;
    labelStr='占空比';
    
    % Generic label information
    labelPos=[left yLabelPos-labelHt labelWid-0.09 labelHt];
    zkb1 = uicontrol( ...
        'Style','text', ...
        'Units','normalized', ...
        'Position',labelPos, ...
        'BackgroundColor',labelColor, ...
        'HorizontalAlignment','left', ...
	'Visible','off', ...
        'String',labelStr);

    % Generic slider button information
    btnPos=[left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt-0.02];
    zkb2 = uicontrol( ...
        'Style','slider', ...
        'Units','normalized', ...
        'BackgroundColor','w', ...
        'ForegroundColor','k', ...
        'Position',btnPos, ...
	'value',0.5,'Min',0.05,'Max',0.95, ...
	'visible','off',...
        'Callback','lxzq(''setzkb2'')');

    editPos=[left+0.095 yLabelPos-labelHt labelWid-0.09 labelHt];
    zkb3 = uicontrol( ...
        'Style','edit', ...
        'Units','normalized', ...
        'Position',editPos, ...
        'BackgroundColor','w', ...
        'HorizontalAlignment','left', ...
	'Visible','off', ...
        'String',' 0.5', ...
	'callback','lxzq(''setzkb3'')');

 

  %====================================
    % The FUNDAMENTAL editable text box
    btnNumber=3;
    yLabelPos=top-(btnNumber-1)*(btnHt+labelHt+spacing)-2*btnHt;
    labelPos=[left yLabelPos-labelHt labelWid+0.02 labelHt];
    freq_text = uicontrol( ...
        'Style','text', ...
        'Units','normalized', ...
        'Position', labelPos, ...
        'BackgroundColor',[0.5 0.5 0.5], ...
        'ForegroundColor','w', ...
        'HorizontalAlignment','left', ...
        'String','基波频率:(Hz)');

    btnPos=[left+0.02  yLabelPos-labelHt-btnHt-btnOffset ...
            0.5*btnWid+frmBorder  btnHt];
    freq_field = uicontrol( ...
        'Style','edit', ...
        'BackgroundColor','w', ...
        'ForegroundColor','k', ...
        'Units','normalized', ...
        'Position', btnPos, ...
        'HorizontalAlignment','left', ...
        'String','5',...
        'CallBack','lxzq(''setfreq''); lxzq(''redraw'')');

   %====================================
    % The INFO button
    uicontrol( ...
        'Style','push', ...
        'Units','normalized', ...
        'Position',[left bottom+(3*labelHt)+spacing btnWid 2*labelHt], ...
        'String','信息', ...
        'Callback','lxzq(''info'')');

   %========================================
   % The CLOSE button
    done_button=uicontrol('Style','Pushbutton', ...
        'Units','normalized', ...
        'Position',[left bottom btnWid 2*labelHt], ...
        'Callback','lxzq(''done'')','String','关闭');

   %====================================
   % Create intial signal
    N=200;     % number of samples
    amp=0.5;
    freq=5;    % hertz
    t0=0;      % seconds
    t1=1;      % seconds
    t=linspace(t0,t1,N)';
    T=(t1-t0)/N;            % sampling rate in seconds
    M=256;     % length of fft
    window=ones(N,1);    % use window to lower side-lobes in the freq. domain
                             % (makes peaks wider)
    ratio = 0.5;	% 矩形波占空比

    % create axes for time domain and frequency domain plot
    ax_freq=axes('Position',[.12 .14 .6 .3],'XLim',...
             [0 1/(2*T)],'YLim',[0 1]);
    
    % time domain
    val = get(popup,'Value');
    if (val == 1),
        f=amp*sin(freq*t*2*pi);
    elseif (val == 2),   % square wave1
        tt=freq*t*2*pi;
        tmp=rem(tt,2*pi);
        f=amp*(2*rem((tt<0)+(tmp>2*ratio*pi | tmp<-2*ratio*pi)+1,2)-1);
    elseif (val == 3),   % square wave2
        tt=freq*t*2*pi;
        tmp=rem(tt,2*pi);
        f=amp*(2*rem((tt<0)+(tmp>2*ratio*pi | tmp<-2*ratio*pi)+1,2)-1);
        f=(f>0).*f;
       % f=(f-.5)*2;
    elseif (val == 4),   % sawtooth
        tt=freq*t*2*pi;
        f=amp*((tt < 0) + rem(tt,2*pi)/2/pi - .5)*2;
    elseif (val == 5),   % self-defined waveform
        f=eval(fun_str);
    end;

    % frequency domain
    F=fft(window.*f,2*M);
    F=F(1:M);
    w=(0:M-1)*pi/M;
    FF=abs(F);
    FF=FF*2;
    FF(1)=FF(1)/2;
    FF(M)=FF(M)/2;
    FF=FF/length(f);
    freq_line=plot(w/2/pi/T,FF,'EraseMode','xor');
    axis([0 1/(2*T)  0 1]);
    grid;
    ylabel('幅频特性');
    xlabel('频率 (Hz)');

    ax_time=axes('Position',[.12 .58 .6 .3],'XLim',[t0 t1],'YLim',[min(f)-amp 1]);
    time_line=plot(t,f,'-','markersize',8,'EraseMode','xor');
    axis([t0 t1 min(f)-amp 1]);
    % (set to xor mode to prevent re-rendering, that is, for speed)
    grid;
    ylabel('波形');
    xlabel('时间(秒)');
    text(0.05, 1.55,'点击并拖放信号波形以改变其基频与振幅。');

    set(time_line,'ButtonDownFcn','lxzq(''down'')');

    lxzq_DAT = [freq; amp; N; M; 0; 0; ...
		time_line; freq_line; freq_field; popup; -1; gcf; ...
		t(:); window(:); ratio];

    watchoff(oldFigNumber);

elseif strcmp(action,'down'),

  popup=lxzq_DAT(10);
  val = get(popup,'Value');
  if val<=4
    % assumes that a line was clicked

⌨️ 快捷键说明

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