📄 filtdemo.m
字号:
function [num,den]=filtdemo(action,s);
%FILTDEMO Demonstrates filter design tools in the Signal Processing Toolbox.
%
% To start the demo, type "filtdemo".
%
% For more information, hit the "info" button once the demo is
% running.
%
% Once you've designed a filter that you like,
% [b,a] = filtdemo('getfilt');
% gives you the filter coefficients.
%
% See also CZTDEMO, MODDEMO, SOSDEMO.
% Copyright (c) 1988-98 by The MathWorks, Inc.
% $Revision: 1.27 $ $Date: 1997/12/02 18:36:51 $
% T. Krauss, 11/15/93
% Possible actions and button callbacks:
% initialize
% changemethod
% setFreqs
% setRipples
% dragRp
% dragRs
% dragWp
% dragWs
% setord
% radio
% design
% axesredraw
% info
% closehelp
% getfilt
if nargin<1,
action='initialize';
end;
if strcmp(action,'initialize'),
shh = get(0,'ShowHiddenHandles');
set(0,'ShowHiddenHandles','on')
figNumber=figure( ...
'Name','Lowpass Filter Design Demo', ...
'handlevisibility','callback',...
'IntegerHandle','off',...
'NumberTitle','off');
%==================================
% Set up the frequency response axes
axes( ...
'Units','normalized', ...
'Position',[0.10 0.1 0.60 0.8], ...
'XTick',[],'YTick',[], ...
'Box','on');
set(figNumber,'defaultaxesposition',[0.10 0.1 0.60 0.80])
freqzHnd = subplot(1,1,1);
set(gca, ...
'Units','normalized', ...
'Position',[0.10 0.1 0.60 0.8], ...
'XTick',[],'YTick',[], ...
'Box','on');
%====================================
% Information for all buttons (and menus)
labelColor=[0.8 0.8 0.8];
yInitPos=0.90;
menutop=0.95;
btnTop = 0.6;
top=0.75;
left=0.785;
btnWid=0.175;
btnHt=0.06;
textHeight = 0.05;
textWidth = 0.06;
% Spacing between the button and the next command's label
spacing=0.019;
%====================================
% The CONSOLE frame
frmBorder=0.019; frmBottom=0.04;
frmHeight = 0.92; frmWidth = btnWid;
yPos=frmBottom-frmBorder;
frmPos=[left-frmBorder yPos frmWidth+2*frmBorder frmHeight+2*frmBorder];
h=uicontrol( ...
'Style','frame', ...
'Units','normalized', ...
'Position',frmPos, ...
'BackgroundColor',[0.5 0.5 0.5]);
%====================================
% The Filter Design Routine Selection Menu
btnNumber=1;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
btnPos=[left yPos-btnHt btnWid btnHt];
labelStr='REMEZ|FIRLS|KAISER|BUTTER|CHEBY1|CHEBY2|ELLIP';
callbackStr='filtdemo(''changemethod'');';
methodHndl=uicontrol( ...
'Style','popupmenu', ...
'Units','normalized', ...
'Position',btnPos, ...
'String',labelStr, ...
'Interruptible','on', ...
'Callback',callbackStr);
%===================================
% Sampling frequency label
btnNumber=1;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
top = yPos - btnHt - spacing;
labelWidth = frmWidth-textWidth-.01;
labelBottom=top-textHeight;
labelLeft = left;
labelPos = [labelLeft labelBottom labelWidth textHeight];
h = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',labelPos, ...
'Horiz','left', ...
'String','Fsamp', ...
'Interruptible','off', ...
'BackgroundColor',[0.5 0.5 0.5], ...
'ForegroundColor','white');
%===================================
% Passband edge frequency label
btnNumber=2;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
top = yPos - btnHt - spacing;
labelWidth = frmWidth-textWidth-.01;
labelBottom=top-textHeight;
labelLeft = left;
labelPos = [labelLeft labelBottom labelWidth textHeight];
h = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',labelPos, ...
'Horiz','left', ...
'String','Fpass', ...
'Interruptible','off', ...
'BackgroundColor',[0.5 0.5 0.5], ...
'ForegroundColor','white');
%===================================
% Stopband edge frequency label and text field
btnNumber=3;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
top = yPos - btnHt - spacing;
labelWidth = frmWidth-textWidth-.01;
labelBottom=top-textHeight;
labelLeft = left;
labelPos = [labelLeft labelBottom labelWidth textHeight];
h = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',labelPos, ...
'Horiz','left', ...
'String','Fstop', ...
'Interruptible','off', ...
'BackgroundColor',[0.5 0.5 0.5], ...
'ForegroundColor','white');
% Text field
textPos = [labelLeft+labelWidth-.015 labelBottom textWidth+.025 5*.85*textHeight];
callbackStr = 'filtdemo(''setFreqs'')';
str = sprintf('2000\n\n500\n\n600');
mat = [2000; 500; 600];
FreqsHndl = uicontrol( ...
'Style','edit', ...
'Units','normalized', ...
'Position',textPos, ...
'Max',2, ... % makes this a multiline edit object
'Horiz','right', ...
'Background','white', ...
'Foreground','black', ...
'String',str,'Userdata',mat, ...
'callback',callbackStr);
%===================================
% passband ripple label
btnNumber=4;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
top = yPos - btnHt - spacing;
labelWidth = frmWidth-textWidth-.01;
labelBottom=top-textHeight;
labelLeft = left;
labelPos = [labelLeft labelBottom labelWidth textHeight];
h = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',labelPos, ...
'Horiz','left', ...
'String','Rpass', ...
'Interruptible','off', ...
'BackgroundColor',[0.5 0.5 0.5], ...
'ForegroundColor','white');
%===================================
% stopband attenuation label and text field
btnNumber=5;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
top = yPos - btnHt - spacing;
labelWidth = frmWidth-textWidth-.01;
labelBottom=top-textHeight;
labelLeft = left;
labelPos = [labelLeft labelBottom labelWidth textHeight];
h = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',labelPos, ...
'Horiz','left', ...
'String','Rstop', ...
'Interruptible','off', ...
'BackgroundColor',[0.5 0.5 0.5], ...
'ForegroundColor','white');
% Text field
textPos = [labelLeft+labelWidth labelBottom textWidth 3*.85*textHeight];
textPos = [labelLeft+labelWidth-.015 labelBottom textWidth+.025 3*.85*textHeight];
callbackStr = 'filtdemo(''setRipples'')';
str = sprintf('3\n\n50');
mat = [3;50];
RipplesHndl = uicontrol( ...
'Style','edit', ...
'Units','normalized', ...
'Position',textPos, ...
'Max',2, ... % makes this a multiline edit object
'Horiz','right', ...
'Background','white', ...
'Foreground','black', ...
'String',str,'Userdata',mat, ...
'callback',callbackStr);
%====================================
% Filter Order text label
btnNumber=6;
yPos=menutop-(btnNumber-1)*(btnHt+spacing);
top = yPos - btnHt - spacing;
labelWidth = frmWidth-.01;
labelBottom=top-textHeight;
labelLeft = left;
labelPos = [labelLeft labelBottom labelWidth textHeight];
h = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',labelPos, ...
'Horiz','center', ...
'String','Order', ...
'Interruptible','off', ...
'BackgroundColor',[0.5 0.5 0.5], ...
'ForegroundColor','white');
%====================================
% Estimate radio button and text field
btnTop = labelBottom-spacing;
btnNumber=8;
yPos=menutop-(btnNumber-1)*(btnHt+spacing)+.02;
labelStr='Auto:';
callbackStr='filtdemo(''radio'',1)';
btnPos=[left yPos-btnHt btnWid*.6 btnHt];
btn1Hndl=uicontrol( ...
'Style','radiobutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'String',labelStr, ...
'value',1,'Userdata',1, ...
'Callback',callbackStr);
yPos=menutop-(btnNumber-1)*(btnHt+spacing) + .02;
textPos=[left+btnWid*.62 yPos-btnHt btnWid*.45 btnHt];
ord1Hndl = uicontrol( ...
'Style','text', ...
'Units','normalized', ...
'Position',textPos, ...
'String','22','Userdata',[22 -1]);
%'Background',[.5 .5 .5], ...
%'Foreground','white', ...
%====================================
% Specify radio button and text field
btnTop = labelBottom-spacing;
btnNumber=9;
yPos=menutop-(btnNumber-1)*(btnHt+spacing)+.02;
labelStr='Set:';
callbackStr='filtdemo(''radio'',2);';
btnPos=[left yPos-btnHt btnWid*.6 btnHt];
btn2Hndl=uicontrol( ...
'Style','radiobutton', ...
'Units','normalized', ...
'Position',btnPos, ...
'String',labelStr, ...
'value',0, ...
'Callback',callbackStr);
% btnTop = labelBottom-spacing;
yPos=menutop-(btnNumber-1)*(btnHt+spacing) + .02;
textPos=[left+btnWid*.62 yPos-btnHt btnWid*.45 btnHt];
%top = yPos - btnHt - spacing;
%labelWidth = frmWidth-textWidth-.01;
%labelBottom=top-textHeight;
%labelLeft = left;
%textPos = [labelLeft+labelWidth labelBottom textWidth textHeight];
callbackStr = 'filtdemo(''setord'')';
ord2Hndl = uicontrol( ...
'Style','edit', ...
'Units','normalized', ...
'Position',textPos, ...
'Horiz','right', ...
'Background','white', ...
'Foreground','black', ...
'String','22','Userdata',22, ...
'callback',callbackStr);
%====================================
% View Popup - Menu
labelStr='Full view|Passband|Stopband';
callbackStr='filtdemo(''axesredraw'');';
viewHndl=uicontrol( ...
'Style','popupmenu', ...
'Units','normalized', ...
'Position',[left frmBottom+2*(btnHt+spacing) btnWid btnHt], ...
'String',labelStr, ...
'Interruptible','on', ...
'Callback',callbackStr);
%====================================
% The INFO button
labelStr='Info';
callbackStr='filtdemo(''info'')';
helpHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',[left frmBottom+btnHt+spacing btnWid btnHt], ...
'String',labelStr, ...
'Callback',callbackStr);
%====================================
% The CLOSE button
labelStr='Close';
callbackStr='close(gcf)';
closeHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normalized', ...
'Position',[left frmBottom btnWid btnHt], ...
'String',labelStr, ...
'Callback',callbackStr);
fhndlList=[freqzHnd 0 0 FreqsHndl RipplesHndl ...
0 viewHndl btn1Hndl btn2Hndl ord1Hndl ord2Hndl ...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -