CDS 101: Principles of Feedback and Control

Lecture 6.1: Transfer Functions

4 November 2002

Lecture Reading FAQ Homework CDS 101

Lecture

This lecture is the first lecture of the course to introduce transfer functions in a formal way (we have already seen frequency response and body plots). The lecture uses the example of a spring, mass, damper system to show how transfer functions can be used to compute the frequency response of an interconnected system of components. We also define poles and zeros and indicate how they affect the frequency response of a system. Finally, we introduce the general computations of block diagram algebra.

Mud card responses [advanced search]:

#!/usr/bin/perl # -*- perl -*- # # htdbsearch.cgi - search for matching files in a database directory # RMM, 16 Mar 97 # # This CGI script searches the description files in a directory for a # against a set of criteria # # This script should be called as # # http://machine/path/htdblist.cgi? # or # http://machine/path/htdblist.cgi?db=&args # # where is the name of the configuration file that defines # all of the information needed to generate the listing. The optional # arguments are: # # _count=NN only list the first NN entries # _tight=1 use tight listing # _ssi=1 don't print header, trailer info (for includs) # # Include the necessary libraries require "cgi-lib.pl"; require "htdblib.pl"; # Parse script arguments if (&htdbinit) { # If the form contains some values, use them to search, and return # the results. if ($in{'_dbconfig'}) { # Generate the context header for the browser print &PrintHeader; # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Summarize the search that was performed $rsltheader = defined &ResultHeader ? \&ResultHeader : htdb::ResultHeader; &{$rsltheader}(%in) if (!$in{_ssi}); # Go through and look for matching files if (not &PrintMatches) { &PrintNoMatches if (!in{ssi}); } # Generate the trailer if (defined &dbtrailer) {$dbtrailer = \&DBTrailer}; if (not $dbtrailer) {$dbtrailer = \&htdb::DBTrailer;} &{$dbtrailer}($DBName) if (!in{ssi}); } else { # Check to see if there is a user function for printing the search form if (defined &SearchForm) {$searchform = \&SearchForm}; if (not $searchform) {$searchform = \&htdb::SearchForm;} # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Print the search form &{$searchform}(%in); } } # # Subroutine for printing the matches that occured # sub PrintMatches { my ($num_found); # Go to the database directory and read the contents chdir $DBPath || die "Can't cd to $DBPath"; opendir(DIR, '.') || die "Can't open $DBPath"; @filenames = readdir(DIR); closedir(DIR); # Check to see if there is a user function for checking matches if (defined &CheckEntry) {$checkentry = \&CheckEntry}; if (not $checkentry) {$checkentry = \&htdb::CheckEntry;} # Check to see if there is a user function for parsing filenames if (defined &ParseFname) {$parsefname = \&ParseFname}; if (not $parsefname) {$parsefname = \&htdb::ParseFname;} # Check to see if there is a user function for printing the entry if (defined &PrintEntry) {$printentry = \&PrintEntry}; if (not $printentry) {$printentry = \&htdb::PrintEntry;} # Check to see if there is a user function for printing the entry if (defined &TightEntry) {$tightentry = \&TightEntry}; if (not $tightentry) {$tightentry = \&htdb::TightEntry;} # Open the list environment used for the results # Print the command to generate a list of elements print ($in{_tight} ? "

\n" : "\n"); return $num_found; } # # Subroutine for alerting the user that no matches occured # sub PrintNoMatches { print "

No matches found

\n"; print "Sorry, no entries match your request. "; print "Please choose some different parameters and try again.

\n"; print $footer; }

Reading Material and Handouts

Handouts from lecture

The following materials were handed out in lecture. These have been updated to include any corrections.

Required reading

Supplemental reading

Homework

This homework set covers basic transfer function concepts. The conceptual problems show how to create a frequency response for a complex system of components using MATLAB. The analytical problems cover basic anaytical concepts in transfer functions.

Modifications to the homework (link above is always the latest version):

Frequently asked questions on homework and TA hints:

#!/usr/bin/perl # -*- perl -*- # # htdbsearch.cgi - search for matching files in a database directory # RMM, 16 Mar 97 # # This CGI script searches the description files in a directory for a # against a set of criteria # # This script should be called as # # http://machine/path/htdblist.cgi? # or # http://machine/path/htdblist.cgi?db=&args # # where is the name of the configuration file that defines # all of the information needed to generate the listing. The optional # arguments are: # # _count=NN only list the first NN entries # _tight=1 use tight listing # _ssi=1 don't print header, trailer info (for includs) # # Include the necessary libraries require "cgi-lib.pl"; require "htdblib.pl"; # Parse script arguments if (&htdbinit) { # If the form contains some values, use them to search, and return # the results. if ($in{'_dbconfig'}) { # Generate the context header for the browser print &PrintHeader; # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Summarize the search that was performed $rsltheader = defined &ResultHeader ? \&ResultHeader : htdb::ResultHeader; &{$rsltheader}(%in) if (!$in{_ssi}); # Go through and look for matching files if (not &PrintMatches) { &PrintNoMatches if (!in{ssi}); } # Generate the trailer if (defined &dbtrailer) {$dbtrailer = \&DBTrailer}; if (not $dbtrailer) {$dbtrailer = \&htdb::DBTrailer;} &{$dbtrailer}($DBName) if (!in{ssi}); } else { # Check to see if there is a user function for printing the search form if (defined &SearchForm) {$searchform = \&SearchForm}; if (not $searchform) {$searchform = \&htdb::SearchForm;} # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Print the search form &{$searchform}(%in); } } # # Subroutine for printing the matches that occured # sub PrintMatches { my ($num_found); # Go to the database directory and read the contents chdir $DBPath || die "Can't cd to $DBPath"; opendir(DIR, '.') || die "Can't open $DBPath"; @filenames = readdir(DIR); closedir(DIR); # Check to see if there is a user function for checking matches if (defined &CheckEntry) {$checkentry = \&CheckEntry}; if (not $checkentry) {$checkentry = \&htdb::CheckEntry;} # Check to see if there is a user function for parsing filenames if (defined &ParseFname) {$parsefname = \&ParseFname}; if (not $parsefname) {$parsefname = \&htdb::ParseFname;} # Check to see if there is a user function for printing the entry if (defined &PrintEntry) {$printentry = \&PrintEntry}; if (not $printentry) {$printentry = \&htdb::PrintEntry;} # Check to see if there is a user function for printing the entry if (defined &TightEntry) {$tightentry = \&TightEntry}; if (not $tightentry) {$tightentry = \&htdb::TightEntry;} # Open the list environment used for the results # Print the command to generate a list of elements print ($in{_tight} ? "

\n" : "\n"); return $num_found; } # # Subroutine for alerting the user that no matches occured # sub PrintNoMatches { print "

No matches found

\n"; print "Sorry, no entries match your request. "; print "Please choose some different parameters and try again.

\n"; print $footer; }