Main Content

Estimating Transfer Function Models for a Boost Converter

This example shows how to estimate a transfer function from frequency response data. You use Simulink® Control Design™ to collect frequency response data from a Simulink model and the tfest command to estimate a transfer function from the measured data. To run the example with previously saved frequency response data start from the Estimating a Transfer Function section.

Boost Converter

Open the Simulink model.

mdl = 'iddemo_boost_converter';
open_system(mdl);

The model is of a Boost Converter circuit that converts a DC voltage to another DC voltage (typically a higher voltage) by controlled chopping or switching of the source voltage. In this model an IGBT driven by a PWM signal is used for switching.

For this example we are interested in the transfer function from the PWM duty cycle set-point to the load voltage, Uout.

Collect Frequency Response Data

We use the frestimate command to perturb the duty cycle set-point with sinusoids of different frequencies and log the resulting load voltage. From these we find how the system modifies the magnitude and phase of the injected sinusoids giving us discrete points on the frequency response.

Using frestimate requires two preliminary steps

  • Specifying the frequency response input and output points

  • Defining the sinusoids to inject at the input point

The frequency response input and output points are created using the linio command and for this example are the outputs of the DutyCycle and Voltage Measurement blocks.

ios = [...
    linio([mdl,'/DutyCycle'],1,'input'); ...
    linio([mdl,'/PS-Simulink Converter'],1,'output')];

We use the frest.Sinestream command to define the sinusoids to inject at the input point. We are interested in the frequency range 200 to 20k rad/s, and want to perturb the duty cycle by 0.03.

f = logspace(log10(200),log10(20000),10);
in = frest.Sinestream('Frequency',f,'Amplitude',0.03);

The simulation time required to simulate the model with this sine-stream signal is determined using the getSimulationTime command and as we know the simulation end time used by the model we can get an idea of how much longer the sine-stream simulation will take over simply running the model.

getSimulationTime(in)/0.02
ans =

   15.5933

We use the defined inputs and sine-stream with frestimate to compute discrete points on the frequency response.

[sysData,simlog] = frestimate(mdl,ios,in);
bopt               = bodeoptions;
bopt.Grid          = 'on';
bopt.PhaseMatching = 'on';
figure, bode(sysData,'*r',bopt)

The Bode response shows a system with a 56db gain, some minor resonance around 2500 rad/s and a high frequency roll off of around 20 db/decade matching what we would expect for this circuit.

The frest.simView command allows us to inspect the frestimate process showing the injected signal, measured output, and frequency response in one graphical interface.

frest.simView(simlog,in,sysData);

The figure shows the model response to injected sinusoids and the FFT of the model response. Notice that the injected sinusoids result in signals with a dominant frequency and limited harmonics indicating a linear model and successful frequency response data collection.

Estimating a Transfer Function

In the previous step we collected frequency response data. This data describes the system as discrete frequency points and we now fit a transfer function to the data.

We generated the frequency response data using Simulink Control Design, if Simulink Control Design is not installed use the following command to load the saved frequency response data

load iddemo_boostconverter_data

Inspecting the frequency response data we expect that the system can be described by a second order system.

sysA = tfest(sysData,2)
figure, bode(sysData,'r*',sysA,bopt)
sysA =
  From input "DutyCycle" to output "PS-Simulink Converter":
  -4.456e06 s + 6.175e09
  -----------------------
  s^2 + 6995 s + 9.834e06
 
Continuous-time identified transfer function.

Parameterization:
   Number of poles: 2   Number of zeros: 1
   Number of free coefficients: 4
   Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                                    
Estimated using TFEST on frequency response data "sysData".
Fit to estimation data: 98.04%                             
FPE: 281.4, MSE: 120.6                                     
 

The estimated transfer function is accurate over the provided frequency range.

bdclose(mdl)