www.gusucode.com > signal 案例源码程序 matlab代码 > signal/FilterAnalysisExample.m
%% Filter Analysis using FVTool % This example shows how to use several filter analysis functions in a % single figure window by using the Filter Visualization Tool (FVTool), a % Graphical User Interface available in the Signal Processing Toolbox(TM). % % FVTool also has an Application Program Interface (API) that allows you to % interact with the GUI from the command line. This enables you to % integrate FVTool into other applications. % Copyright 1988-2014 The MathWorks, Inc. %% Launching FVTool % We want to create a lowpass filter with a passband frequency of 0.4*pi % rad/sample, a stopband frequency of 0.6*pi rad/sample, a passband ripple % of 1 dB and a stopband attenuation of 80 dB. We will design the filters % using some of the Signal Processing Toolbox's filter design tools and % then analyze the results in FVTool. %% % Design a lowpass equiripple FIR filter Df1 = designfilt('lowpassfir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','equiripple'); %% % Design a lowpass elliptic IIR filter Df2 = designfilt('lowpassiir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','ellip'); %% % Launch FVTool with the filter objects and return a handle to FVTool % which enables us to reuse the same FVTool figure. hfvt = fvtool(Df1, Df2); %% Adding and Removing Filters % We can observe that both filters meet the design specifications, but we % also want to see how well the Chebyshev Type II design performs. %% % You can add a filter to FVTool using the ADDFILTER function. Df3 = designfilt('lowpassiir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','cheby2'); addfilter(hfvt, Df3); %% % To identify which line on the plot belongs to which filter, you can add a % legend using the LEGEND function of the FVTool handle. legend(hfvt, 'Equiripple', 'Elliptic', 'Chebyshev Type II'); %% % You can remove a filter from FVTool using the DELETEFILTER function and % passing the index of the filter(s) that you want to remove. deletefilter(hfvt, [1 3]); %% Changing the Analysis Parameters % The handle that FVTool returns contains properties that allow you to % interact with both the filter and the current analysis. %% % To see all of the available properties you can use the GET command. The % first properties are those of a regular MATLAB(R) figure. The last % fourteen properties are FVTool specific. The last six of these (from % FrequencyScale to MagnitudeDisplay) are analysis specific. s = get(hfvt); % Keep the last 14 properties c = struct2cell(s); f = fieldnames(s); s = cell2struct(c(end-14:end),f(end-14:end),1) %% % All the parameters that are available from the FVTool's Analysis % Parameters dialog are also available as properties of the FVTool object. % The SET command with only two input arguments returns all possible % values. set(hfvt, 'MagnitudeDisplay') %% % Turn the display to 'Magnitude Squared' hfvt.MagnitudeDisplay = 'Magnitude Squared'; %% % Get all possible values for the 'Analysis' property set(hfvt, 'Analysis') %% % Let us now change the analysis to look at the Group Delay Response of the % filter. %% hfvt.Analysis = 'grpdelay'; %% % The GET command will return new Analysis Parameters for the new analysis. GroupDelayUnits = hfvt.GroupDelayUnits; %% Overlaying Two Analyses % We would also like to see how the Group Delay and the Zero-phase response % overlap in the frequency domain. %% % You can overlay any two analyses in FVTool that share a common x-axis % (time or frequency) by setting the 'OverlayedAnalysis' property. set(hfvt, 'OverlayedAnalysis', 'magnitude', 'MagnitudeDisplay', 'Zero-phase', ... 'Legend', 'On'); %% % To turn off the overlayed analysis simply set the 'OverlayedAnalysis' % property to ''. hfvt.OverlayedAnalysis = ''; hfvt.Legend = 'Off'; %% Interacting with FVTool like a Figure Window % The FVTool window can also be annotated like a normal figure window. %% % The FVTool figure behaves as a normal figure window. This allows you to % use MATLAB's grid and axis functions. grid on axis([.3 .45 5 25]); %% % The axis is also accessible from the command line. This allows you to % change the title and labels. title('Group Delay of an Elliptic filter'); xlabel('Frequency (normalized to 1)'); ylabel('Group Delay in samples'); htext = text(.35, 23, 'Maximum Group Delay'); %% % FVTool will not automatically delete additional annotations from your % analysis, you can do this by deleting the handle itself. You can close % the FVTool figure by calling the close function on the FVTool handle. delete(htext); close(hfvt)