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

📄 guibuildactivecircuit.m

📁 Talking about adaptive filter digital
💻 M
📖 第 1 页 / 共 2 页
字号:
hold on
text(x+width/2-20,YSTART+HEIGHT/2,label);

function DrawArrow(x,len)
ARROWLEN = 5;
YSTART = 25;
vx = x+[0 len len-ARROWLEN len len-ARROWLEN];
vy = YSTART+[0 0 ARROWLEN 0 -ARROWLEN];
plot(vx,vy,'k','LineWidth',1)

function DrawText(x,label)
text(x,25,label)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                             UpdateTopThirdGUI                             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateTopThirdGUI(handles)
global strFilterObject
global strCircuit
% create the figure title bar
set(handles.uiBuildActiveCircuit,'Name',strFilterObject.sTitle)
% draw the boxes
curStage = get(handles.uipmStage,'Value');
DrawStages(strCircuit.nStages,curStage,handles.uiaxStage)
% error check to make sure a stage was not deleted making current stage to edit non-existant
maxStage = strCircuit.nStages;
if curStage > maxStage
    if curStage==1
        error('Zero or negative maxStage')
    else
        curStage = maxStage;
        set(handles.uipmStage,'Value',curStage);
    end
end
% fill the popup "stage to edit" with the correct number of choices
tString={};
for i=1:maxStage
    tString{i}=num2str(i);
end
tString=tString';
set(handles.uipmStage,'String',tString)
% set the passband polarity popup box correctly
sPolarity = strCircuit.sPolarity;
switch sPolarity
    case 'd', set(handles.uipmPolarity,'Value',1)
    case 'n', set(handles.uipmPolarity,'Value',2)
    case 'i', set(handles.uipmPolarity,'Value',3)
end
% set the resistor tolerance popup box correctly
nRTol=strCircuit.nRTol;
switch nRTol
    case 0, set(handles.uipmRTol,'Value',1)
    case 1, set(handles.uipmRTol,'Value',2)
    case 5, set(handles.uipmRTol,'Value',3)
end
% set the capacitor tolerance popup box correctly
nCTol=strCircuit.nCTol;
switch nCTol
    case 0,  set(handles.uipmCTol,'Value',1)
    case 1,  set(handles.uipmCTol,'Value',2)
    case 5,  set(handles.uipmCTol,'Value',3)
    case 10, set(handles.uipmCTol,'Value',4)
end
% Set the title of the middle third of figure
set(handles.uitxStage,'String',sprintf('Stage %g',curStage))

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           UpdateMiddleThirdGUI                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Draws the schematic and grays out unused boxes in bottom third
function UpdateMiddleThirdGUI(handles)
% load pictures of schematics
persistent strGraphic
if isempty(strGraphic)
    t=load('BuildCircuit.mat');
    strGraphic = t.strGraphic;
end
% display curStage schematic
curStage = get(handles.uipmStage,'Value');
axes(handles.uiaxCircuit)
schName = lower(handles.strCircuit.vStage(curStage).schName);
hImage = image(strGraphic.(schName), 'Parent', handles.uiaxCircuit);
% fix the display details
set(handles.uiaxCircuit, ...
    'Visible', 'off', ...
    'YDir'   , 'reverse'       , ...
    'XLim'   , get(hImage,'XData'), ...
    'YLim'   , get(hImage,'YData')  ...
    );
set(handles.uiBuildActiveCircuit,'Colormap',gray(16))
% fill in "selected circuit" box with options
schName = handles.strCircuit.vStage(curStage).schName;
sPurpose = handles.strCircuit.sPurpose;
curChoice = handles.strCircuit.vStage(curStage).schTitle;
curRec = handles.strCircuit.vStage(curStage).recTitle;
switch schName(1:2)
    case {'ZO','SO'}
        vcStrings = {curChoice};
    otherwise
        switch sPurpose
            case 'LP'
                vcStrings = {'Sallen-Key','Multiple Feedback','Ackerberg-Mossberg (+)','Ackerberg-Mossberg (-)'};
            case 'HP'
                vcStrings = {'Sallen-Key','Ackerberg-Mossberg'};
            case 'Notch'
                vcStrings = {'Multiple Feedback','Ackerberg-Mossberg'};
            otherwise
                error('Unidentified schematic name and purpose')
        end
end
set(handles.uipmSelectedCircuit,'String',vcStrings);
% fill in "selected circuit" box with current choice, allowing for possible spelling error
for i=1:length(vcStrings)
    index(i)=isequal(curChoice,vcStrings{i});
end
[dummy,i] = max(index);
set(handles.uipmSelectedCircuit,'Value',i)
% fill in "recommended circuit" box
set(handles.uitxRecommendedCircuit,'String',curRec)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           UpdateBottomThirdGUI                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateBottomThirdGUI(handles)
curStage = get(handles.uipmStage,'Value');
nCSelect = length(handles.strCircuit.vStage(curStage).vfCSelect);
nRSelect = length(handles.strCircuit.vStage(curStage).vfRSelect);
nCCalc = length(handles.strCircuit.vStage(curStage).vfCCalc);
nRCalc = length(handles.strCircuit.vStage(curStage).vfRCalc);
% gray out unused boxes
switch nCSelect
    case 0
        set(handles.uitxCa,'Enable','off'); set(handles.uitxCa,'String','0');
        set(handles.uipmCa,'Enable','off'); set(handles.uipmCa,'Value',1);
        set(handles.uitxCb,'Enable','off'); set(handles.uitxCb,'String','0');
        set(handles.uipmCb,'Enable','off'); set(handles.uipmCb,'Value',1);
    case 1
        set(handles.uitxCa,'Enable','on');  set(handles.uitxCa,'String',handles.strCircuit.vStage(curStage).csCSelectMan{1})
        set(handles.uipmCa,'Enable','on');  set(handles.uipmCa,'Value',handles.strCircuit.vStage(curStage).vnCSelectExp(1)/3+5)
        set(handles.uitxCb,'Enable','off'); set(handles.uitxCb,'String','0');
        set(handles.uipmCb,'Enable','off'); set(handles.uipmCb,'Value',1);
    case 2
        set(handles.uitxCa,'Enable','on');  set(handles.uitxCa,'String',handles.strCircuit.vStage(curStage).csCSelectMan{1})
        set(handles.uipmCa,'Enable','on');  set(handles.uipmCa,'Value',handles.strCircuit.vStage(curStage).vnCSelectExp(1)/3+5)
        set(handles.uitxCb,'Enable','on');  set(handles.uitxCb,'String',handles.strCircuit.vStage(curStage).csCSelectMan{2})
        set(handles.uipmCb,'Enable','on');  set(handles.uipmCb,'Value',handles.strCircuit.vStage(curStage).vnCSelectExp(2)/3+5)
    otherwise, error('bad nCSelect')
end
switch nRSelect
    case 0
        set(handles.uitxRa,'Enable','off'); set(handles.uitxRa,'String','0');
        set(handles.uipmRa,'Enable','off'); set(handles.uipmRa,'Value',1);
        set(handles.uitxRb,'Enable','off'); set(handles.uitxRb,'String','0');
        set(handles.uipmRb,'Enable','off'); set(handles.uipmRb,'Value',1);
    case 1
        set(handles.uitxRa,'Enable','on');  set(handles.uitxRa,'String',handles.strCircuit.vStage(curStage).csRSelectMan{1})
        set(handles.uipmRa,'Enable','on');  set(handles.uipmRa,'Value',handles.strCircuit.vStage(curStage).vnRSelectExp(1)/3+1)
        set(handles.uitxRb,'Enable','off'); set(handles.uitxRb,'String','0');
        set(handles.uipmRb,'Enable','off'); set(handles.uipmRb,'Value',1);
    case 2
        set(handles.uitxRa,'Enable','on');  set(handles.uitxRa,'String',handles.strCircuit.vStage(curStage).csRSelectMan{1})
        set(handles.uipmRa,'Enable','on');  set(handles.uipmRa,'Value',handles.strCircuit.vStage(curStage).vnRSelectExp(1)/3+1)
        set(handles.uitxRb,'Enable','on');  set(handles.uitxRb,'String',handles.strCircuit.vStage(curStage).csRSelectMan{2})
        set(handles.uipmRb,'Enable','on');  set(handles.uipmRb,'Value',handles.strCircuit.vStage(curStage).vnRSelectExp(2)/3+1)
    otherwise, error('bad nRSelect')
end
switch nCCalc
    case 0
        set(handles.uitxC1,'Visible','off')
        set(handles.uitxC2,'Visible','off')
        set(handles.uitxC3,'Visible','off')
        set(handles.uitxC4,'Visible','off')
        set(handles.uitxStaticC1,'Enable','off')
        set(handles.uitxStaticC2,'Enable','off')
        set(handles.uitxStaticC3,'Enable','off')
        set(handles.uitxStaticC4,'Enable','off')
        set(handles.uitxStaticC1sub,'Enable','off')
        set(handles.uitxStaticC2sub,'Enable','off')
        set(handles.uitxStaticC3sub,'Enable','off')
        set(handles.uitxStaticC4sub,'Enable','off')
    case 1
        set(handles.uitxC1,'Visible','on'); set(handles.uitxC1,'String',handles.strCircuit.vStage(curStage).csCCalc{1})
        set(handles.uitxC2,'Visible','off')
        set(handles.uitxC3,'Visible','off')
        set(handles.uitxC4,'Visible','off')
        set(handles.uitxStaticC1,'Enable','on')
        set(handles.uitxStaticC2,'Enable','off')
        set(handles.uitxStaticC3,'Enable','off')
        set(handles.uitxStaticC4,'Enable','off')
        set(handles.uitxStaticC1sub,'Enable','on')
        set(handles.uitxStaticC2sub,'Enable','off')
        set(handles.uitxStaticC3sub,'Enable','off')
        set(handles.uitxStaticC4sub,'Enable','off')
    case 2
        set(handles.uitxC1,'Visible','on'); set(handles.uitxC1,'String',handles.strCircuit.vStage(curStage).csCCalc{1})
        set(handles.uitxC2,'Visible','on'); set(handles.uitxC2,'String',handles.strCircuit.vStage(curStage).csCCalc{2})
        set(handles.uitxC3,'Visible','off')
        set(handles.uitxC4,'Visible','off')
        set(handles.uitxStaticC1,'Enable','on')
        set(handles.uitxStaticC2,'Enable','on')
        set(handles.uitxStaticC3,'Enable','off')
        set(handles.uitxStaticC4,'Enable','off')
        set(handles.uitxStaticC1sub,'Enable','on')
        set(handles.uitxStaticC2sub,'Enable','on')
        set(handles.uitxStaticC3sub,'Enable','off')
        set(handles.uitxStaticC4sub,'Enable','off')
    case 3
        set(handles.uitxC1,'Visible','on'); set(handles.uitxC1,'String',handles.strCircuit.vStage(curStage).csCCalc{1})
        set(handles.uitxC2,'Visible','on'); set(handles.uitxC2,'String',handles.strCircuit.vStage(curStage).csCCalc{2})
        set(handles.uitxC3,'Visible','on'); set(handles.uitxC3,'String',handles.strCircuit.vStage(curStage).csCCalc{3})
        set(handles.uitxC4,'Visible','off')
        set(handles.uitxStaticC1,'Enable','on')
        set(handles.uitxStaticC2,'Enable','on')
        set(handles.uitxStaticC3,'Enable','on')
        set(handles.uitxStaticC4,'Enable','off')
        set(handles.uitxStaticC1sub,'Enable','on')
        set(handles.uitxStaticC2sub,'Enable','on')
        set(handles.uitxStaticC3sub,'Enable','on')
        set(handles.uitxStaticC4sub,'Enable','off')
    case 4
        set(handles.uitxC1,'Visible','on'); set(handles.uitxC1,'String',handles.strCircuit.vStage(curStage).csCCalc{1})
        set(handles.uitxC2,'Visible','on'); set(handles.uitxC2,'String',handles.strCircuit.vStage(curStage).csCCalc{2})
        set(handles.uitxC3,'Visible','on'); set(handles.uitxC3,'String',handles.strCircuit.vStage(curStage).csCCalc{3})
        set(handles.uitxC4,'Visible','on'); set(handles.uitxC4,'String',handles.strCircuit.vStage(curStage).csCCalc{4})
        set(handles.uitxStaticC1,'Enable','on')
        set(handles.uitxStaticC2,'Enable','on')
        set(handles.uitxStaticC3,'Enable','on')
        set(handles.uitxStaticC4,'Enable','on')
        set(handles.uitxStaticC1sub,'Enable','on')
        set(handles.uitxStaticC2sub,'Enable','on')
        set(handles.uitxStaticC3sub,'Enable','on')
        set(handles.uitxStaticC4sub,'Enable','on')
    otherwise, error('bad nCCalc')
end
switch nRCalc
    case 0
        set(handles.uitxR1,'Visible','off')
        set(handles.uitxR2,'Visible','off')
        set(handles.uitxR3,'Visible','off')
        set(handles.uitxR4,'Visible','off')
        set(handles.uitxStaticR1,'Enable','off')
        set(handles.uitxStaticR2,'Enable','off')
        set(handles.uitxStaticR3,'Enable','off')
        set(handles.uitxStaticR4,'Enable','off')
        set(handles.uitxStaticR1sub,'Enable','off')
        set(handles.uitxStaticR2sub,'Enable','off')
        set(handles.uitxStaticR3sub,'Enable','off')
        set(handles.uitxStaticR4sub,'Enable','off')
    case 1
        set(handles.uitxR1,'Visible','on'); set(handles.uitxR1,'String',handles.strCircuit.vStage(curStage).csRCalc{1})
        set(handles.uitxR2,'Visible','off')
        set(handles.uitxR3,'Visible','off')
        set(handles.uitxR4,'Visible','off')
        set(handles.uitxStaticR1,'Enable','on')
        set(handles.uitxStaticR2,'Enable','off')
        set(handles.uitxStaticR3,'Enable','off')
        set(handles.uitxStaticR4,'Enable','off')
        set(handles.uitxStaticR1sub,'Enable','on')
        set(handles.uitxStaticR2sub,'Enable','off')
        set(handles.uitxStaticR3sub,'Enable','off')
        set(handles.uitxStaticR4sub,'Enable','off')
    case 2
        set(handles.uitxR1,'Visible','on'); set(handles.uitxR1,'String',handles.strCircuit.vStage(curStage).csRCalc{1})
        set(handles.uitxR2,'Visible','on'); set(handles.uitxR2,'String',handles.strCircuit.vStage(curStage).csRCalc{2})
        set(handles.uitxR3,'Visible','off')
        set(handles.uitxR4,'Visible','off')
        set(handles.uitxStaticR1,'Enable','on')
        set(handles.uitxStaticR2,'Enable','on')
        set(handles.uitxStaticR3,'Enable','off')
        set(handles.uitxStaticR4,'Enable','off')
        set(handles.uitxStaticR1sub,'Enable','on')
        set(handles.uitxStaticR2sub,'Enable','on')
        set(handles.uitxStaticR3sub,'Enable','off')
        set(handles.uitxStaticR4sub,'Enable','off')
    case 3
        set(handles.uitxR1,'Visible','on'); set(handles.uitxR1,'String',handles.strCircuit.vStage(curStage).csRCalc{1})
        set(handles.uitxR2,'Visible','on'); set(handles.uitxR2,'String',handles.strCircuit.vStage(curStage).csRCalc{2})
        set(handles.uitxR3,'Visible','on'); set(handles.uitxR3,'String',handles.strCircuit.vStage(curStage).csRCalc{3})
        set(handles.uitxR4,'Visible','off')
        set(handles.uitxStaticR1,'Enable','on')
        set(handles.uitxStaticR2,'Enable','on')
        set(handles.uitxStaticR3,'Enable','on')
        set(handles.uitxStaticR4,'Enable','off')
        set(handles.uitxStaticR1sub,'Enable','on')
        set(handles.uitxStaticR2sub,'Enable','on')
        set(handles.uitxStaticR3sub,'Enable','on')
        set(handles.uitxStaticR4sub,'Enable','off')
    case 4
        set(handles.uitxR1,'Visible','on'); set(handles.uitxR1,'String',handles.strCircuit.vStage(curStage).csRCalc{1})
        set(handles.uitxR2,'Visible','on'); set(handles.uitxR2,'String',handles.strCircuit.vStage(curStage).csRCalc{2})
        set(handles.uitxR3,'Visible','on'); set(handles.uitxR3,'String',handles.strCircuit.vStage(curStage).csRCalc{3})
        set(handles.uitxR4,'Visible','on'); set(handles.uitxR4,'String',handles.strCircuit.vStage(curStage).csRCalc{4})
        set(handles.uitxStaticR1,'Enable','on')
        set(handles.uitxStaticR2,'Enable','on')
        set(handles.uitxStaticR3,'Enable','on')
        set(handles.uitxStaticR4,'Enable','on')
        set(handles.uitxStaticR1sub,'Enable','on')
        set(handles.uitxStaticR2sub,'Enable','on')
        set(handles.uitxStaticR3sub,'Enable','on')
        set(handles.uitxStaticR4sub,'Enable','on')
    otherwise, error('bad nRCalc')
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                            UpdateFilter_Z1P1k1                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function UpdateFilter_Z1P1k1(strCircuit)
% makes the overall strFilterObject Z1,P1,k reflect the individual stage's z1,p1,k
global strFilterObject

% setup
nBiquads=strCircuit.nBiquads;
bFirstOrderStage=strCircuit.bFirstOrderStage;
bGainStage=strCircuit.bGainStage;
nStages=strCircuit.nStages;
% find zeros
vZeros1=[];
vPoles1=[];
fK1=1;
for i=1:nBiquads
    vZeros1 = [vZeros1; strCircuit.vStage(i).z1(:)];
    vPoles1 = [vPoles1; strCircuit.vStage(i).p1(:)];
    fK1=fK1*strCircuit.vStage(i).k1;
end
if bFirstOrderStage | bGainStage
    vZeros1 = [vZeros1; strCircuit.vStage(nStages).z1];
    vPoles1 = [vPoles1; strCircuit.vStage(nStages).p1];
    fK1=fK1*strCircuit.vStage(nStages).k1;
end
strFilterObject.vZeros1=vZeros1;
strFilterObject.vPoles1=vPoles1;
strFilterObject.fK1=fK1;

⌨️ 快捷键说明

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