{"id":49359,"date":"2026-09-14T14:58:59","date_gmt":"2026-09-14T14:58:59","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=49359"},"modified":"2026-09-11T12:00:00","modified_gmt":"2026-09-11T12:00:00","slug":"controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","title":{"rendered":"Controller tuning in the frequency domain using imperix Sys. Id. toolbox"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 ez-toc-wrap-right-text counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Hardware-requirements\" >Hardware requirements<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Controller-tuning-procedure\" >Controller tuning procedure<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Derivation-of-necessary-parameters\" >Derivation of necessary parameters<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Design-of-the-PI-controller\" >Design of the PI controller<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Experimental-validation\" >Experimental validation<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Validation-in-Cockpit\" >Validation in Cockpit<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Interpretation-of-the-results-and-fine-tuning-of-the-gains\" >Interpretation of the results and fine-tuning of the gains<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\/#Conclusions\" >Conclusions<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">This note describes a simple frequency-domain PI controller tuning procedure using the imperix <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">System Identification toolbox<\/a>. The toolbox is a helpful companion in several relevant scenarios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It provides the system&#8217;s frequency response, allowing its use to validate an analytical model or to help the user derive one;<\/li>\n\n\n\n<li>It helps in assessing compliance with the chosen control objectives when tuning the controller, such as whether the closed-loop system meets the target stability margins or achieves the desired performance.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This article considers a <a href=\"https:\/\/imperix.com\/doc\/implementation\/step-down-buck-converter\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/implementation\/step-down-buck-converter\">buck converter<\/a> and describes the steps to tune the inductor current controller using the magnitude-optimum method, deriving all necessary parameters from system identification data, and finally validating the design with the <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">System Identification toolbox<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Hardware-requirements\"><\/span>Hardware requirements<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The following list describes the elements used to build the buck converter:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <a href=\"https:\/\/imperix.com\/products\/power\/sic-mosfet-module\/\">phase leg module<\/a> (PEB-800-40, PEB8038, PEB8024, or PEB4050);<\/li>\n\n\n\n<li>A <a href=\"https:\/\/imperix.com\/products\/control\/rapid-prototyping-controller\/\">programmable controller<\/a> (B-Box 4, B-Box 3, or B-Box 3 Micro);<\/li>\n\n\n\n<li><a href=\"https:\/\/imperix.com\/software\/acg-sdk\/\">Control development tools for Simulink\/PLECS<\/a> (ACG SDK version 2026.3), with a valid license;<\/li>\n\n\n\n<li>A DC power supply;<\/li>\n\n\n\n<li>An inductor and a resistor;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Controller-tuning-procedure\"><\/span>Controller tuning procedure<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The goal of this section is to tune the <math data-latex=\"k_i\"><semantics><msub><mi>k<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_i<\/annotation><\/semantics><\/math> and <math data-latex=\"k_p\"><semantics><msub><mi>k<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_p<\/annotation><\/semantics><\/math> gains of the PI controller starting from the frequency response of the plant <math data-latex=\"G(s)\"><semantics><mrow><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">G(s)<\/annotation><\/semantics><\/math>. The following schematic shows the system under consideration and the controller <math data-latex=\"C(s)\"><semantics><mrow><mi>C<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><\/mrow><annotation encoding=\"application\/x-tex\">C(s)<\/annotation><\/semantics><\/math> to be designed, where the plant <math data-latex=\"G\"><semantics><mi>G<\/mi><annotation encoding=\"application\/x-tex\">G<\/annotation><\/semantics><\/math> consists of the system portion inside the grey area.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"506\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/buck-1.png\" alt=\"Buck converter considered in this controller tuning example.\" class=\"wp-image-49486\" style=\"width:312px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/buck-1.png 624w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/buck-1-300x243.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><figcaption class=\"wp-element-caption\">Schematic illustrating the buck converter considered in this controller tuning example.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The controller strcture is a typical parallel PI controller:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>C<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mfrac><msub><mi>k<\/mi><mi>i<\/mi><\/msub><mi>s<\/mi><\/mfrac><\/mstyle><mo>+<\/mo><msub><mi>k<\/mi><mi>p<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">C(s) = \\dfrac{k_i}{s} + k_p<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The transfer function of interest for the controller-tuning procedure is from the duty cycle <math data-latex=\"d\"><semantics><mi>d<\/mi><annotation encoding=\"application\/x-tex\">d<\/annotation><\/semantics><\/math> to the inductor current <math data-latex=\"i_L\"><semantics><msub><mi>i<\/mi><mi>L<\/mi><\/msub><annotation encoding=\"application\/x-tex\">i_L<\/annotation><\/semantics><\/math>. Its frequency response is identified in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>, and it is obtained from a system with the following parameter values:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Description<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Symbol<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>Value<\/strong><\/td><\/tr><tr><td>DC input voltage<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"V_\\mathrm{DC}\"><semantics><msub><mi>V<\/mi><mrow><mtext><\/mtext><mi>DC<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">V_\\mathrm{DC}<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">200 V<\/td><\/tr><tr><td>Filter inductance<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"L\"><semantics><mi>L<\/mi><annotation encoding=\"application\/x-tex\">L<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">2.65 mH<\/td><\/tr><tr><td>Load resistance<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"R\"><semantics><mi>R<\/mi><annotation encoding=\"application\/x-tex\">R<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">11.9 \u03a9<\/td><\/tr><tr><td>Switching frequency<\/td><td class=\"has-text-align-center\" data-align=\"center\"><math data-latex=\"F_\\mathrm{sw}\"><semantics><msub><mi>F<\/mi><mrow><mtext><\/mtext><mi>sw<\/mi><\/mrow><\/msub><annotation encoding=\"application\/x-tex\">F_\\mathrm{sw}<\/annotation><\/semantics><\/math><\/td><td class=\"has-text-align-left\" data-align=\"left\">50 kHz<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-warning\" role=\"alert\">The plant frequency response and the tuning outcome depend on these values. If the user values differ from those considered here, the frequency response should be measured again, following the procedure in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>.<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Derivation-of-necessary-parameters\"><\/span>Derivation of necessary parameters<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following Bode plot shows the frequency response resulting from the procedure in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>. By visual inspection, one notices the following characteristics:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flat response in the low-frequency domain;<\/li>\n\n\n\n<li>A roll-off of 20dB\/dec in the high-frequency region;<\/li>\n\n\n\n<li>The typical phase profile of a system with a delay, where the phase lag increases linearly with the frequency.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1375\" height=\"1094\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1.png\" alt=\"Identified frequency response of the plant used in the controller tuning example.\" class=\"wp-image-49581\" style=\"width:780px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1.png 1375w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1-300x239.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1-768x611.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/bode_plant_overlay-1-1024x815.png 1024w\" sizes=\"auto, (max-width: 1375px) 100vw, 1375px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Therefore, a first-order system plus delay is a good candidate to model the system behavior:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mi>s<\/mi><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mo>=<\/mo><mstyle displaystyle=\"true\" scriptlevel=\"0\"><mfrac><mi>K<\/mi><mrow><mn>1<\/mn><mo>+<\/mo><mi>s<\/mi><mi>\/<\/mi><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><\/mrow><\/mfrac><\/mstyle><mo>\u22c5<\/mo><msup><mi>e<\/mi><mrow><mo lspace=\"0em\" rspace=\"0em\">\u2212<\/mo><mi>s<\/mi><msub><mi>T<\/mi><mi>d<\/mi><\/msub><\/mrow><\/msup><\/mrow><annotation encoding=\"application\/x-tex\">G(s) = \\dfrac{K}{1 + s\/\\omega_p}\\cdot e^{-sT_d}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The magnitude-optimum procedure requires the knowledge of <math data-latex=\"K\"><semantics><mi>K<\/mi><annotation encoding=\"application\/x-tex\">K<\/annotation><\/semantics><\/math>, <math data-latex=\"\\omega_p\"><semantics><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\omega_p<\/annotation><\/semantics><\/math>, and <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> to derive the PI controller <math data-latex=\"k_i\"><semantics><msub><mi>k<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_i<\/annotation><\/semantics><\/math> and <math data-latex=\"k_p\"><semantics><msub><mi>k<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_p<\/annotation><\/semantics><\/math> gain values:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><math data-latex=\"K\"><semantics><mi>K<\/mi><annotation encoding=\"application\/x-tex\">K<\/annotation><\/semantics><\/math> corresponds to the static gain of the plant, that is <math data-latex=\"|G(0)|\"><semantics><mrow><mi>|<\/mi><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">|G(0)|<\/annotation><\/semantics><\/math>. The value at the lowest available frequency is a good approximation of that.<\/li>\n\n\n\n<li><math data-latex=\"\\omega_p\"><semantics><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\omega_p<\/annotation><\/semantics><\/math> is the frequency of the system pole. For a first-order system like this, it is the frequency at which the plant&#8217;s magnitude is 3dB lower than <math data-latex=\"|G(0)|\"><semantics><mrow><mi>|<\/mi><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">|G(0)|<\/annotation><\/semantics><\/math>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, one can estimate <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> directly from the phase Bode plot, provided <math data-latex=\"\\omega_p\"><semantics><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">\\omega_p<\/annotation><\/semantics><\/math> is sufficiently far below the high-frequency region. As the delay provides a phase lag that grows linearly with the frequency, the following relation holds:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mrow><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c6<\/mi><mo>=<\/mo><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c9<\/mi><mo>\u22c5<\/mo><msub><mi>T<\/mi><mi>d<\/mi><\/msub><\/mrow><annotation encoding=\"application\/x-tex\">\\Delta\\varphi = \\Delta\\omega\\cdot T_d<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">where <math data-latex=\"\\varphi\"><semantics><mi>\u03c6<\/mi><annotation encoding=\"application\/x-tex\">\\varphi<\/annotation><\/semantics><\/math> is in radians, <math data-latex=\"\\omega\"><semantics><mi>\u03c9<\/mi><annotation encoding=\"application\/x-tex\">\\omega<\/annotation><\/semantics><\/math> is in radians per second, and <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> is in seconds. Using the values available in the graphs yields the following parameters:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mtable displaystyle=\"true\" columnalign=\"right\" class=\"tml-jot\"><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><mi>K<\/mi><mo>\u2248<\/mo><mn>24.5<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>dB<\/mi><\/mrow><mo>\u2248<\/mo><mn>16.8<\/mn><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><mo>\u2248<\/mo><mn>2<\/mn><mi>\u03c0<\/mi><mo>\u22c5<\/mo><mn>700<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>Hz<\/mi><\/mrow><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>T<\/mi><mi>d<\/mi><\/msub><mo>\u2248<\/mo><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c6<\/mi><mi>\/<\/mi><mrow><mi mathvariant=\"normal\">\u0394<\/mi><\/mrow><mi>\u03c9<\/mi><mo>\u2248<\/mo><mn>29.5<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>\u03bcs<\/mi><\/mrow><\/mrow><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">\\begin{split}\nK \\approx 24.5\\,\\mathrm{dB}\\approx 16.8\\\\\\\\\n\\omega_p \\approx 2\\pi\\cdot 700\\,\\mathrm{Hz}\\\\\\\\\nT_d \\approx \\Delta\\varphi\/\\Delta\\omega \\approx 29.5\\,\\mathrm{\\mu s}\n\\end{split}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">It is also possible to compute the total delay <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> directly as described in <a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay\">PN142<\/a>. In such a system, the delay <math data-latex=\"T_d\"><semantics><msub><mi>T<\/mi><mi>d<\/mi><\/msub><annotation encoding=\"application\/x-tex\">T_d<\/annotation><\/semantics><\/math> is inherent to the controller and includes the analog acquisition delay, the control-algorithm computation delay, and the PWM modulator delay. With a switching frequency of 50kHz and&nbsp;synchronous averaging&nbsp;in the analog acquisition, the resulting delay is <math data-latex=\"T_d=30\\,\\mathrm{\\mu s}\"><semantics><mrow><msub><mi>T<\/mi><mi>d<\/mi><\/msub><mo>=<\/mo><mn>30<\/mn><mspace width=\"0.1667em\"><\/mspace><mrow><mtext><\/mtext><mi>\u03bcs<\/mi><\/mrow><\/mrow><annotation encoding=\"application\/x-tex\">T_d=30\\,\\mathrm{\\mu s}<\/annotation><\/semantics><\/math>, which is&nbsp;close to the value estimated above.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Design-of-the-PI-controller\"><\/span>Design of the PI controller<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the required parameters are determined, the magnitude-optimum design procedure is straightforward for a first-order system with delay. It merely consists of computing the gains directly from the formulas:<\/p>\n\n\n\n<div class=\"wp-block-math\"><math display=\"block\"><semantics><mtable displaystyle=\"true\" columnalign=\"right\" class=\"tml-jot\"><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>T<\/mi><mi>n<\/mi><\/msub><mo>=<\/mo><mn>1<\/mn><mi>\/<\/mi><msub><mi>\u03c9<\/mi><mi>p<\/mi><\/msub><mo separator=\"true\">;<\/mo><mspace width=\"1em\"><\/mspace><msub><mi>T<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mn>2<\/mn><mi>K<\/mi><msub><mi>T<\/mi><mi>d<\/mi><\/msub><\/mrow><\/mtd><\/mtr><mtr><mtd class=\"tml-right\" style=\"padding-left:0em;padding-right:0em;\"><mrow><msub><mi>k<\/mi><mi>p<\/mi><\/msub><mo>=<\/mo><msub><mi>T<\/mi><mi>n<\/mi><\/msub><mi>\/<\/mi><msub><mi>T<\/mi><mi>i<\/mi><\/msub><mo separator=\"true\">;<\/mo><mspace width=\"1em\"><\/mspace><msub><mi>k<\/mi><mi>i<\/mi><\/msub><mo>=<\/mo><mn>1<\/mn><mi>\/<\/mi><msub><mi>T<\/mi><mi>i<\/mi><\/msub><\/mrow><\/mtd><\/mtr><\/mtable><annotation encoding=\"application\/x-tex\">\\begin{split}\nT_n = 1\/\\omega_p;\\quad\nT_i = 2KT_d\\\\\nk_p = T_n\/T_i;\\quad k_i = 1\/T_i\n\\end{split}<\/annotation><\/semantics><\/math><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/imperix.com\/doc\/implementation\/pi-controller#PI-controller-tuning-strategies\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/implementation\/pi-controller#PI-controller-tuning-strategies\">TN105<\/a> describes the derivation of these formulas. The resulting values are <math data-latex=\"k_p \\approx 0.23\"><semantics><mrow><msub><mi>k<\/mi><mi>p<\/mi><\/msub><mo>\u2248<\/mo><mn>0.23<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">k_p \\approx 0.23<\/annotation><\/semantics><\/math> and <math data-latex=\"k_i \\approx 1011.5\"><semantics><mrow><msub><mi>k<\/mi><mi>i<\/mi><\/msub><mo>\u2248<\/mo><mn>1011.5<\/mn><\/mrow><annotation encoding=\"application\/x-tex\">k_i \\approx 1011.5<\/annotation><\/semantics><\/math>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Experimental-validation\"><\/span>Experimental validation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To validate the control design, it&#8217;s possible to identify the frequency response of the closed-loop transfer function from the inductor current reference to the measured inductor current. For a magnitude-optimal controller, the expected response is maximally flat up to a certain frequency range (the system bandwidth). If the designed controller is optimal, different <math data-latex=\"k_i\"><semantics><msub><mi>k<\/mi><mi>i<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_i<\/annotation><\/semantics><\/math> or <math data-latex=\"k_p\"><semantics><msub><mi>k<\/mi><mi>p<\/mi><\/msub><annotation encoding=\"application\/x-tex\">k_p<\/annotation><\/semantics><\/math> values should lead to an overdamped or underdamped response.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1071\" height=\"515\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example.png\" alt=\"Comparison of the three main possible outcomes from the controller tuning procedure: optimally flat, overdamped, and underdamped.\" class=\"wp-image-49838\" style=\"width:500px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example.png 1071w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-300x144.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-767x369.png 767w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/maximally_flat_example-1024x492.png 1024w\" sizes=\"auto, (max-width: 1071px) 100vw, 1071px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">The procedure to obtain the system closed-loop transfer function consists of perturbing the inductor current reference signal and then computing the <em>Empirical Transfer Function Estimation (ETFE)<\/em> by taking the ratio of the Fourier transforms of the output signal (the perturbed inductor current) over the input signal (the perturbed current reference). In this case, <code>i_Lref<\/code> is perturbed, and it is measured together with <code>i_L<\/code>. The following schematic clarifies the idea. The <a href=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\">System Identification toolbox<\/a> handles the perturbation injection and transfer-function&nbsp;computation.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"488\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_prbs_closed_loop.png\" alt=\"Perturbation injection point for the validation of the controller tuning procedure.\" class=\"wp-image-49590\" style=\"width:388px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_prbs_closed_loop.png 776w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_prbs_closed_loop-300x189.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/buck_prbs_closed_loop-766x482.png 766w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><figcaption class=\"wp-element-caption\">Scheme of the ETFE configuration.<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">These Simulink and PLECS models are preconfigured to perform system identification on the closed-loop system. The <a href=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/software\/system-identification-injector\">Sys. Id. Injector<\/a> block perturbs the system and then measures its response. The <em>numerator<\/em> signal is <code>i_L<\/code>, while the <em>denominator <\/em>is <code>i_Lref<\/code>.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1354\" height=\"450\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1.png\" alt=\"Simulink model implementing the validation step of the controller tuning procedure.\" class=\"wp-image-49594\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1.png 1354w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1-300x100.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1-767x255.png 767w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/simulink-1-1024x340.png 1024w\" sizes=\"auto, (max-width: 1354px) 100vw, 1354px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1193\" height=\"491\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs.png\" alt=\"PLECS model implementing the validation step of the controller tuning procedure.\" class=\"wp-image-49592\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs.png 1193w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs-300x123.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs-768x316.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/plecs-1024x421.png 1024w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-40689257-7cc5-4c4d-b723-f418acdc3557\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_Simulink.zip\">PN216_ctrl_tune_sysId_Simulink<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_Simulink.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-40689257-7cc5-4c4d-b723-f418acdc3557\">Download<\/a><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-2e650476-af70-4d86-9351-dec8a89ea68f\" href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_PLECS.zip\">PN216_ctrl_tune_sysId_PLECS<\/a><a href=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/PN216_ctrl_tune_sysId_PLECS.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-2e650476-af70-4d86-9351-dec8a89ea68f\">Download<\/a><\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The models can be directly built and sent to an imperix controller by pressing <code>Ctrl + B<\/code> in Simulink or <code>Ctrl + Alt + B<\/code> in PLECS. More information on deploying the model to an imperix controller is available in <a href=\"https:\/\/imperix.com\/doc\/help\/programming-imperix-controllers\">PN138<\/a>. After building the model, <a type=\"link\" href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide?currentThread=b-box-4\" id=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide?currentThread=b-box-4\">Cockpit<\/a> should automatically open. The user can also open it manually.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Validation-in-Cockpit\"><\/span>Validation in Cockpit<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once Cockpit is open, it is possible to perform the identification by following these steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Add a <a href=\"https:\/\/imperix.com\/doc\/help\/scope-module\">Scope<\/a> and a <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">System Identification module<\/a> in the Cockpit project page. Add the variables involved in the identification to the Scope; in this case, <code>i_L<\/code> and <code>i_Lref<\/code>. Adding the duty cycle <code>d<\/code> is also a good idea, as it allows monitoring possible saturations.<\/li>\n\n\n\n<li>In principle, for validation to succeed, the system should operate at the same operating point as during characterization. This corresponds to an input DC voltage level of 200 V and an average duty cycle of 0.5, as described in the parametric identification example, presented in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>.<\/li>\n\n\n\n<li>Turn on the DC voltage source and make sure the variable <code>V_dc<\/code> settles around the expected value. If not, check the sensor&#8217;s sensitivity and whether it is connected to the correct channel. The <code>PWM enable<\/code> switch should be off, so <code>i_L<\/code> should be zero.<\/li>\n\n\n\n<li>The tunable reference signals should bring the system to the desired operating point. As discussed in 2., in this specific example the duty cycle bias should be at 0.5. The corresponding <code>i_Lref<\/code> value can be computed from <math data-latex=\"d\\cdot|G(0)|\"><semantics><mrow><mi>d<\/mi><mo>\u22c5<\/mo><mi>|<\/mi><mi>G<\/mi><mo form=\"prefix\" stretchy=\"false\">(<\/mo><mn>0<\/mn><mo form=\"postfix\" stretchy=\"false\">)<\/mo><mi>|<\/mi><\/mrow><annotation encoding=\"application\/x-tex\">d\\cdot|G(0)|<\/annotation><\/semantics><\/math>. Alternatively, the user can set a low current level and increase it gradually, monitoring the value of <code>d<\/code>. In this example, <code>i_Lref<\/code>=8 A.<\/li>\n\n\n\n<li>Configure the injection parameter on the right panel, under <em>Sys. Id.<\/em>:\n<ul class=\"wp-block-list\">\n<li>As the injector perturbs the system outside the control loop, after a constant signal, <em>Injection mode<\/em> can be set either to open-loop or closed-loop, without any difference;<\/li>\n\n\n\n<li>The perturbation amplitude should yield a good&nbsp;signal-to-noise&nbsp;ratio without introducing harmonics that would reduce estimation accuracy&nbsp;(i.e., avoid <em>non-linear operation<\/em>). In this case, 0.5 is a good starting point.<\/li>\n\n\n\n<li>Leave the advanced parameters at their default values. The <a href=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/system-identification-module\">Sys. Id. module<\/a> documentation provides more information.<\/li>\n\n\n\n<li>The numerator and denominator signals should belong to the frequency response of interest; in this case, from the duty cycle to the inductor current. Then, <code>i_Lref<\/code> is the denominator and <code>i_L<\/code> is the numerator.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>At this point, <code>i_L<\/code> should be zero: enable the PWM and ensure the resulting current follows the reference.<\/li>\n\n\n\n<li>Press the start injection button, wait for the injection to end, and the Bode plot of the identified transfer function will appear.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Interpretation-of-the-results-and-fine-tuning-of-the-gains\"><\/span>Interpretation of the results and fine-tuning of the gains<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In this case, the identification yields a closed-loop response presenting a small overshoot around 4 kHz, signaling a slightly underdamped closed-loop system. This is most likely due to under-modeling of the system. In particular, a first-order model might not fully capture the system behavior, especially for high frequencies.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"517\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-1024x517.png\" alt=\"Resulting closed-loop system frequency response from the controller tuning procedure.\" class=\"wp-image-49875\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-1024x517.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-300x151.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-767x387.png 767w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot-1536x775.png 1536w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit_legend_overshoot.png 1546w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">At this point, the overshoot is so small that the user might consider it acceptable and conclude the tuning procedure. Otherwise, it is possible to manually fine-tune the <code>k_p<\/code> and <code>k_i<\/code> gains to try improving the frequency response. For example, the user can slightly reduce the controller gains in case of an underdamped response, or slightly increase them otherwise. Cockpit&#8217;s <a href=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide#Snapshots\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/help\/cockpit-user-guide#Snapshots\">snapshots<\/a> feature simplifies comparing multiple acquisitions with different parameters. The following picture shows some tests conducted by increasing or decreasing the controller gains by the amounts indicated in the legend. Empirically reducing the parameter gains by 7% yields a response close to a maximally flat one.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit1-1024x575.png\" alt=\"Manual fine-tuning of the gains obtained from the controller tuning procedure.\" class=\"wp-image-49622\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit1-1024x575.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit1-300x168.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit1-768x431.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/cockpit1.png 1489w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusions\"><\/span>Conclusions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This note presented a frequency-domain PI controller tuning procedure. Starting from the frequency response measured in <a href=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\" data-type=\"link\" data-id=\"https:\/\/imperix.com\/doc\/uncategorized\/parametric-system-identification-using-the-imperix-sys-id-toolbox\">PN215<\/a>, it showed how to derive all the necessary parameters from the Bode plot to apply the magnitude-optimum tuning criterion. The experimental validation yielded a slightly underdamped closed-loop frequency response, exposing the limitations of approximating this system as a first-order one. Finally, the procedure showed a simple way to tweak the controller gains and visually assess the flatness of the response, reducing the gap from the expected maximally flat one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This note describes a simple frequency-domain PI controller tuning procedure using the imperix System Identification toolbox. The toolbox is a helpful companion in several relevant&#8230;<\/p>\n","protected":false},"author":34,"featured_media":49990,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[],"software-environments":[103,104],"provided-results":[108,107],"related-products":[50,31,32,92,166,110],"guidedreadings":[],"tutorials":[],"user-manuals":[],"coauthors":[181],"class_list":["post-49359","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-help","software-environments-matlab","software-environments-plecs","provided-results-experimental","provided-results-simulation","related-products-acg-sdk","related-products-b-board-pro","related-products-b-box-rcp","related-products-b-box-micro","related-products-b-box-rcp-3-0","related-products-tpi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Controller tuning in the frequency domain using imperix Sys. Id. toolbox - imperix<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Controller tuning in the frequency domain using imperix Sys. Id. toolbox - imperix\" \/>\n<meta property=\"og:description\" content=\"This note describes a simple frequency-domain PI controller tuning procedure using the imperix System Identification toolbox. The toolbox is a helpful companion in several relevant...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-14T14:58:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"671\" \/>\n\t<meta property=\"og:image:height\" content=\"449\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrea Lauri\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrea Lauri\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\"},\"author\":{\"name\":\"Andrea Lauri\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/c0f18e14c67285ccc626d477bc2fc490\"},\"headline\":\"Controller tuning in the frequency domain using imperix Sys. Id. toolbox\",\"datePublished\":\"2026-09-14T14:58:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\"},\"wordCount\":1739,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"articleSection\":[\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\",\"name\":\"Controller tuning in the frequency domain using imperix Sys. Id. toolbox - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"datePublished\":\"2026-09-14T14:58:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/thumbnail1.png\",\"width\":671,\"height\":449},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Knowledge base\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Product notes\",\"item\":\"https:\\\/\\\/imperix.com\\\/doc\\\/category\\\/help\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Controller tuning in the frequency domain using imperix Sys. Id. toolbox\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"name\":\"imperix\",\"description\":\"power electronics\",\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/imperix.com\\\/doc\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\",\"name\":\"imperix\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/imperix_logo.png\",\"width\":350,\"height\":120,\"caption\":\"imperix\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/c0f18e14c67285ccc626d477bc2fc490\",\"name\":\"Andrea Lauri\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/822d2a836192ad743ef0ce2062c02fe08183e13ef896cb310153b57b83bf7087?s=96&d=mm&r=g0904a87bb89ce74bf8b6f6a91a5de7d8\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/822d2a836192ad743ef0ce2062c02fe08183e13ef896cb310153b57b83bf7087?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/822d2a836192ad743ef0ce2062c02fe08183e13ef896cb310153b57b83bf7087?s=96&d=mm&r=g\",\"caption\":\"Andrea Lauri\"},\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/andrealauri\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Controller tuning in the frequency domain using imperix Sys. Id. toolbox - imperix","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","og_locale":"en_US","og_type":"article","og_title":"Controller tuning in the frequency domain using imperix Sys. Id. toolbox - imperix","og_description":"This note describes a simple frequency-domain PI controller tuning procedure using the imperix System Identification toolbox. The toolbox is a helpful companion in several relevant...","og_url":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","og_site_name":"imperix","article_published_time":"2026-09-14T14:58:59+00:00","og_image":[{"width":671,"height":449,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","type":"image\/png"}],"author":"Andrea Lauri","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Andrea Lauri","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox"},"author":{"name":"Andrea Lauri","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/c0f18e14c67285ccc626d477bc2fc490"},"headline":"Controller tuning in the frequency domain using imperix Sys. Id. toolbox","datePublished":"2026-09-14T14:58:59+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox"},"wordCount":1739,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","articleSection":["Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","url":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox","name":"Controller tuning in the frequency domain using imperix Sys. Id. toolbox - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","datePublished":"2026-09-14T14:58:59+00:00","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/09\/thumbnail1.png","width":671,"height":449},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/controller-tuning-in-the-frequency-domain-using-imperix-sys-id-toolbox#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Knowledge base","item":"https:\/\/imperix.com\/doc\/"},{"@type":"ListItem","position":2,"name":"Product notes","item":"https:\/\/imperix.com\/doc\/category\/help"},{"@type":"ListItem","position":3,"name":"Controller tuning in the frequency domain using imperix Sys. Id. toolbox"}]},{"@type":"WebSite","@id":"https:\/\/imperix.com\/doc\/#website","url":"https:\/\/imperix.com\/doc\/","name":"imperix","description":"power electronics","publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/imperix.com\/doc\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/imperix.com\/doc\/#organization","name":"imperix","url":"https:\/\/imperix.com\/doc\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2021\/03\/imperix_logo.png","width":350,"height":120,"caption":"imperix"},"image":{"@id":"https:\/\/imperix.com\/doc\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/c0f18e14c67285ccc626d477bc2fc490","name":"Andrea Lauri","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/822d2a836192ad743ef0ce2062c02fe08183e13ef896cb310153b57b83bf7087?s=96&d=mm&r=g0904a87bb89ce74bf8b6f6a91a5de7d8","url":"https:\/\/secure.gravatar.com\/avatar\/822d2a836192ad743ef0ce2062c02fe08183e13ef896cb310153b57b83bf7087?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/822d2a836192ad743ef0ce2062c02fe08183e13ef896cb310153b57b83bf7087?s=96&d=mm&r=g","caption":"Andrea Lauri"},"url":"https:\/\/imperix.com\/doc\/author\/andrealauri"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/49359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=49359"}],"version-history":[{"count":54,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/49359\/revisions"}],"predecessor-version":[{"id":50113,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/49359\/revisions\/50113"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/49990"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=49359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=49359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=49359"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=49359"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=49359"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=49359"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=49359"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=49359"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=49359"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=49359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}