www.gusucode.com > coder_compiler_dsp 案例源码程序 matlab代码 > coder_compiler_dsp/myRLSFilterSystemIDSim.m
function [tfe,err,pauseSim,stopSim,cutoffFreq,ff] = ... myRLSFilterSystemIDSim() % myRLSFilterSystemIDSim implements the algorithm used in % myRLSFilterSystemIDApp. % This functions instantiates, initializes and steps through the System % objects used in the algorithm. % % You can tune the cutoff frequency of the desired system and the % forgetting factor of the RLS filter through the GUI that appears when % myRLSFilterSystemIDApp is executed. % Copyright 2013-2016 The MathWorks, Inc. %#codegen % Instantiate and initialize System objects. The objects are declared % persistent so that they are not recreated every time the function is % called inside the simulation loop. persistent rlsFilt sine unknownSys transferFunctionEstimator if isempty(rlsFilt) % FIR filter models the unidentified system unknownSys = dsp.VariableBandwidthFIRFilter('SampleRate',1e4,... 'FilterOrder',30,... 'CutoffFrequency',.48 * 1e4/2); % RLS filter is used to identify the FIR filter rlsFilt = dsp.RLSFilter('ForgettingFactor',.99,... 'Length',28); % Sine wave used to generate input signal sine = dsp.SineWave('SamplesPerFrame',1024,... 'SampleRate',1e4,... 'Frequency',50); % Transfer function estimator used to estimate frequency responses of % FIR and RLS filters. transferFunctionEstimator = dsp.TransferFunctionEstimator(... 'FrequencyRange','centered',... 'SpectralAverages',10,... 'FFTLengthSource','Property',... 'FFTLength',1024,... 'Window','Kaiser'); end [paramNew, simControlFlags] = HelperUnpackUDP(); tfe = 0; err = 0; cutoffFreq = 0; ff = 0; pauseSim = simControlFlags.pauseSim; stopSim = simControlFlags.stopSim; if simControlFlags.stopSim return; % Stop the simulation end if simControlFlags.pauseSim return; % Pause the simulation (but keep checking for commands from GUI) end % Generate input signal - sine wave plus Gaussian noise inputSignal = sine() + .1 * randn(1024,1); % Filter input though FIR filter desiredOutput = unknownSys(inputSignal); % Pass original and desired signals through the RLS Filter [rlsOutput , err] = rlsFilt(inputSignal,desiredOutput); % Prepare system input and output for transfer function estimator inChans = repmat(inputSignal,1,2); outChans = [desiredOutput,rlsOutput]; % Estimate transfer function tfe = transferFunctionEstimator(inChans,outChans); % Save the cutoff frequency and forgetting factor cutoffFreq = unknownSys.CutoffFrequency; ff = rlsFilt.ForgettingFactor; % Tune FIR cutoff frequency and RLS forgetting factor if ~isempty(paramNew) unknownSys.CutoffFrequency = paramNew(1); rlsFilt.ForgettingFactor = paramNew(2); if simControlFlags.resetObj % reset System objects reset(rlsFilt); reset(unknownSys); reset(transferFunctionEstimator); reset(sine); end end end