{"id":46464,"date":"2026-08-12T07:34:06","date_gmt":"2026-08-12T07:34:06","guid":{"rendered":"https:\/\/imperix.com\/doc\/?p=46464"},"modified":"2026-08-12T12:00:00","modified_gmt":"2026-08-12T12:00:00","slug":"multi-rate-control","status":"publish","type":"post","link":"https:\/\/imperix.com\/doc\/help\/multi-rate-control","title":{"rendered":"Multi-rate control"},"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\/multi-rate-control\/#Context\" >Context<\/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\/multi-rate-control\/#Multi-rate-scheduling-approaches\" >Multi-rate scheduling approaches<\/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\/multi-rate-control\/#Single-tasking-approach\" >Single-tasking approach<\/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\/multi-rate-control\/#Multitasking-approach\" >Multitasking approach<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control\/#Comparison-of-approaches\" >Comparison of approaches<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control\/#Multitasking-on-imperix-controllers\" >Multitasking on imperix controllers<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control\/#Task-execution-rules\" >Task execution rules<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control\/#Control-delay-of-sub-rate-tasks\" >Control delay of sub-rate tasks<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control\/#Further-readings\" >Further readings<\/a><\/li><\/ul><\/nav><\/div>\n\n<p class=\"wp-block-paragraph\">This note introduces the principles of implementing multi-rate control algorithms on imperix controllers. Multi-rate control is supported by the ACG SDK (for Simulink and PLECS environments) as well as the CPP SDK.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This note presents general principles, while environment-specific configuration instructions are provided separately for Simulink (<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-with-acg-sdk-on-simulink\" data-type=\"post\" data-id=\"720\">PN145<\/a>), PLECS (<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-on-plecs-acg-sdk\" data-type=\"post\" data-id=\"751\">PN155<\/a>), and C++ (<a href=\"https:\/\/imperix.com\/doc\/help\/programming-essentials-for-the-cpp-sdk#multi-rate-control\" data-type=\"post\" data-id=\"13192\">PN149<\/a>).<\/p>\n\n\n\n<div class=\"wp-block-simple-alerts-for-gutenberg-alert-boxes sab-alert sab-alert-info\" role=\"alert\">The information presented on this page applies starting with ACG SDK and CPP SDK 2026.2. Prior to this version, sub-rate tasks in multitasking mode were executed within the background loop, without preemption or priority-based scheduling between them.<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Context\"><\/span>Context<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The control of power electronics systems involves processes with physical phenomena operating across vastly different time scales. For instance, a grid-tied solar inverter control structure implies a fast inner-loop current control (typically 10\u201350 kHz), a slower DC-link voltage control (typically 100\u20131000 Hz), and a much slower MPPT algorithm (typically 1\u201310 Hz). Since controlling slow physical processes does not require high sampling or control execution rates, controller resources can be saved by adapting the sampling and execution rates to the underlying dynamics of each process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, the diagram below illustrates the control structure of a grid-tied PV inverter (adapted from <a href=\"https:\/\/imperix.com\/doc\/example\/three-phase-pv-inverter\" data-type=\"post\" data-id=\"1233\">AN006<\/a> for illustration purposes). The different colors of the control blocks represent distinct execution rates, relying on Simulink&#8217;s discrete sample time visualization.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"716\" height=\"428\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PV_inverter_example_with_timeline_v2-2.png\" alt=\"\" class=\"wp-image-48005\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PV_inverter_example_with_timeline_v2-2.png 716w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/PV_inverter_example_with_timeline_v2-2-300x179.png 300w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><figcaption class=\"wp-element-caption\">Multi-rate control execution using multitasking mode<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 id=\"approaches\" class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Multi-rate-scheduling-approaches\"><\/span>Multi-rate scheduling approaches<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In a multirate control system, a <strong>rate<\/strong> defines the required execution frequency of a control algorithm, while a <strong>task<\/strong> defines the execution context in which one or more rates are scheduled. These rates must then be mapped to an appropriate task structure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two fundamental scheduling approaches can be used for this purpose: <strong>single-tasking<\/strong> and <strong>multitasking<\/strong>. The following sections describe their operating principles and compare their characteristics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imperix controllers support both execution modes. Dedicated configuration guidelines for single-tasking and multitasking on imperix controllers are provided separately for Simulink (<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-with-acg-sdk-on-simulink\" data-type=\"post\" data-id=\"720\">PN145<\/a>), PLECS (<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-on-plecs-acg-sdk\" data-type=\"post\" data-id=\"751\">PN155<\/a>), and C++ (<a href=\"https:\/\/imperix.com\/doc\/help\/programming-essentials-for-the-cpp-sdk\" data-type=\"post\" data-id=\"13192\">PN149<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Single-tasking-approach\"><\/span>Single-tasking approach<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In a single-tasking configuration, all execution rates are scheduled into a single monolithic control task. To derive secondary execution rates from the base rate, the generated source code uses software counters to trigger the execution of its corresponding slower rate routine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The scheduling of the slower routines is handled automatically by Simulink or PLECS based on signal sample times. Alternatively, the scheduling can also be defined explicitly by the user using mechanisms such as <a href=\"https:\/\/mathworks.com\/help\/simulink\/ug\/triggered-subsystems.html\">triggered subsystems<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because all subroutines run within a unique base-rate task, they execute sequentially. This sequential execution represents the primary limitation of single-tasking: the base-rate period must be long enough to accommodate the combined worst-case execution time of all overlapping subroutines (as illustrated in the figure below). Consequently, this constraint limits the maximum achievable base-rate frequency and prevents optimal utilization of the available computational resources.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"95\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Single_tasking-1-1024x95.png\" alt=\"\" class=\"wp-image-47323\" style=\"aspect-ratio:10.780592004882514;width:596px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Single_tasking-1-1024x95.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Single_tasking-1-300x28.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Single_tasking-1-768x71.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Single_tasking-1.png 1104w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Multi-rate scheduling in single-tasking mode<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Multitasking-approach\"><\/span>Multitasking approach<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In a multitasking configuration, although the control algorithm runs on a single CPU, the different execution rates are assigned to distinct, prioritized tasks. Higher-priority tasks can interrupt the execution of lower-priority tasks through a mechanism known as <strong>preemption<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Similar to the single-tasking approach, the base rate remains the fundamental timing reference for scheduling tasks. However, lower-priority tasks are no longer required to complete within a single base-rate period. If a slow task (lower priority) is still running when a high-priority base-rate interrupt occurs, the faster task preempts it. The slower task then resumes execution once the higher-priority task completes. This approach makes it possible to achieve a higher base-rate frequency or run more resource-intensive slow tasks without violating real-time execution constraints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The figure below illustrates task preemption and shows how multitasking enables a higher base rate than single-tasking.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"494\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/Multi_tasking_faster_rate-1-1024x494.png\" alt=\"\" class=\"wp-image-48041\" style=\"aspect-ratio:2.072985549840803;width:573px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/Multi_tasking_faster_rate-1-1024x494.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/Multi_tasking_faster_rate-1-300x145.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/Multi_tasking_faster_rate-1-768x370.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/Multi_tasking_faster_rate-1.png 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Multi-rate scheduling in multitasking mode<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Data exchange and data dependency<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">In a multitasking environment, task execution is separated, but all tasks run on the same physical processor and share a single global memory space. Since tasks run at different execution rates, they can read and write shared data asynchronously. If data exchange is not handled properly and a higher-priority task preempts a lower-priority task mid-execution, it may read partially updated data or overwrite variables before the slower task finishes processing them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To prevent data corruption, Simulink and PLECS provide a <em>Rate Transition<\/em> block to ensure time-consistent inter-task data transfers. More information about rate transition is given in <a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-with-acg-sdk-on-simulink\" data-type=\"post\" data-id=\"720\">Multi-rate control on Simulink (PN145)<\/a> and <a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-on-plecs-acg-sdk\" data-type=\"post\" data-id=\"720\">Multi-rate control on PLECS (PN155)<\/a>. For C++ users, appropriate data-synchronization mechanisms, such as double buffering, should be considered.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Execution determinism<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Due to preemption by higher-priority tasks, multitasking execution may introduce execution-time jitter on lower-priority tasks. In most power electronics applications, this is not an issue because the time-critical inner control loops execute at the highest priority and therefore experience deterministic timing. Lower-priority tasks, such as outer control loops, supervisory algorithms, or communication, generally tolerate the small timing variations introduced by preemption. Care should nevertheless be taken to avoid assigning time-critical algorithms to lower-priority tasks. If deterministic execution is required for all rates, single-tasking should be preferred.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comparison-of-approaches\"><\/span>Comparison of approaches<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The table below summarizes the key architectural differences and trade-offs between the single-tasking and multitasking approaches.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table class=\"has-fixed-layout\"><thead><tr><th>Param.<\/th><th><strong><strong>Single-tasking<\/strong><\/strong><\/th><th><strong><strong>Multitasking<\/strong><\/strong><\/th><\/tr><\/thead><tbody><tr><td>Generated code structure<\/td><td>Single function<\/td><td>Tasks separated into multiple functions<\/td><\/tr><tr><td>Task preemption<\/td><td>No<\/td><td>Yes<\/td><\/tr><tr><td>Non-periodic task execution<\/td><td>Yes, with triggered subsystems<\/td><td>No<\/td><\/tr><tr><td>Execution constraint<\/td><td>More restrictive:<br>The base-rate period must be longer than all overlapping tasks combined<\/td><td>Less restrictive:<br>Each task&#8217;s execution time must fit within its own period<\/td><\/tr><tr><td>Data integrity<\/td><td>Intrinsically avoids data corruption during exchanges between different rates<\/td><td>Requires rate-transition blocks to avoid data corruption during exchanges between different rates<\/td><\/tr><tr><td>Execution period determinism<\/td><td>Yes<\/td><td>Only base-rate task<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Multitasking-on-imperix-controllers\"><\/span>Multitasking on imperix controllers<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Task-execution-rules\"><\/span>Task execution rules<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">As detailed in <a href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers\">Operating principles of imperix controllers<\/a>, and mentioned above, the control algorithm relies on an interrupt-based architecture. While a hardware interrupt schedules the main control task (base-rate task), subsequent tasks are triggered via <a href=\"https:\/\/en.wikipedia.org\/wiki\/Interrupt#Software_interrupts\">software interrupts<\/a> immediately following the main task&#8217;s completion. This operation follows the following concepts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rate-monotonic preemption: Tasks use priority-based preemption. Higher priority is automatically assigned to tasks with higher frequency (see figure below).<\/li>\n\n\n\n<li>Overrun detection: An overrun occurs when a task fails to finish before its next scheduled execution time. Task overruns are strictly forbidden and will trigger a protection trip that disables all PWM outputs (<a href=\"https:\/\/imperix.com\/doc\/help\/operating-principles-of-imperix-controllers#core-states\" data-type=\"post\" data-id=\"46163\">core state: FAULT<\/a>)<\/li>\n\n\n\n<li>Software interrupt limit: The architecture supports a maximum of 8 concurrent software interrupts.<\/li>\n\n\n\n<li>CPU load visibility: The CPU load metric displayed in Cockpit (<em>Timings info<\/em> tab) reflects the main control task only.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"219\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_detailed-1024x219.png\" alt=\"\" class=\"wp-image-47320\" style=\"aspect-ratio:4.675870494807575;width:664px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_detailed-1024x219.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_detailed-300x64.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_detailed-768x164.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_detailed.png 1196w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Task preemption by higher-priority tasks. The faster rates have higher priority over slower rates.<\/figcaption><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Control-delay-of-sub-rate-tasks\"><\/span>Control delay of sub-rate tasks<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The evaluation of the control delay for loops running in the base-rate task is detailed in <a href=\"https:\/\/imperix.com\/doc\/help\/discrete-control-delay?currentThread=b-board-pro\">Discrete control delay identification<\/a>. When control loops are implemented in slower tasks within a multitasking configuration, their control delay can increase and\/or vary due to task preemption. Furthermore, to evaluate the control delay of these slower tasks, it is crucial to account for the fact that data exchange with the controller&#8217;s peripheral hardware (ADC, PWM, GPI, GPO, etc.) has to transit through the base-rate task.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The figure below illustrates the data paths through lower-priority tasks. The control delay for a given task is defined as the elapsed time between the sampling event (whose latest data is processed first by the base-rate task) and the moment the updated parameters (typically PWM duty cycles) are applied at the hardware modulator level. The resulting control delays for each task are also illustrated below.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" src=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_datapath-1-1024x481.png\" alt=\"\" class=\"wp-image-47337\" style=\"aspect-ratio:2.1289485071397665;width:673px;height:auto\" srcset=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_datapath-1-1024x481.png 1024w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_datapath-1-300x141.png 300w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_datapath-1-768x361.png 768w, https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/07\/Multi_tasking_datapath-1.png 1230w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Data paths through control loops and total delay along those loops.<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Further-readings\"><\/span>Further readings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Environment-specific configuration instructions are provided separately for the following programming environments:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Multi-rate control on Simulink (<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-with-acg-sdk-on-simulink\" data-type=\"post\" data-id=\"720\">PN145<\/a>)<\/li>\n\n\n\n<li>Multi-rate control on PLECS (<a href=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control-on-plecs-acg-sdk\" data-type=\"post\" data-id=\"751\">PN155<\/a>)<\/li>\n\n\n\n<li>Programming with CPP SDK (<a href=\"https:\/\/imperix.com\/doc\/help\/programming-essentials-for-the-cpp-sdk\" data-type=\"post\" data-id=\"13192\">PN149<\/a>)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This note introduces the principles of implementing multi-rate control algorithms on imperix controllers. Multi-rate control is supported by the ACG SDK (for Simulink and PLECS&#8230;<\/p>\n","protected":false},"author":32,"featured_media":48693,"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":[13,3],"tags":[],"software-environments":[105,103,104],"provided-results":[],"related-products":[50,31,32,92,166,110],"guidedreadings":[],"tutorials":[],"user-manuals":[],"coauthors":[175,63],"class_list":["post-46464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-going-further-acg-sdk","category-help","software-environments-c-plus-plus","software-environments-matlab","software-environments-plecs","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>Multi-rate control - imperix<\/title>\n<meta name=\"description\" content=\"This note introduces the basic principles required to run multi-rate control algorithms on imperix controllers.\" \/>\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\/multi-rate-control\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multi-rate control - imperix\" \/>\n<meta property=\"og:description\" content=\"This note introduces the basic principles required to run multi-rate control algorithms on imperix controllers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/imperix.com\/doc\/help\/multi-rate-control\" \/>\n<meta property=\"og:site_name\" content=\"imperix\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-12T07:34:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-12T12:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/3_2_ratio_PN265.png\" \/>\n\t<meta property=\"og:image:width\" content=\"450\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Rafael Basso, Julien Orsinger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rafael Basso, Julien Orsinger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control\"},\"author\":{\"name\":\"Rafael Basso\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#\\\/schema\\\/person\\\/7b8b9195745f175d838339eb04338149\"},\"headline\":\"Multi-rate control\",\"datePublished\":\"2026-08-12T07:34:06+00:00\",\"dateModified\":\"2026-08-12T12:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control\"},\"wordCount\":1269,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/3_2_ratio_PN265.png\",\"articleSection\":[\"Going further with ACG SDK\",\"Product notes\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control\",\"name\":\"Multi-rate control - imperix\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/3_2_ratio_PN265.png\",\"datePublished\":\"2026-08-12T07:34:06+00:00\",\"dateModified\":\"2026-08-12T12:00:00+00:00\",\"description\":\"This note introduces the basic principles required to run multi-rate control algorithms on imperix controllers.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#primaryimage\",\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/3_2_ratio_PN265.png\",\"contentUrl\":\"https:\\\/\\\/imperix.com\\\/doc\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/3_2_ratio_PN265.png\",\"width\":450,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/imperix.com\\\/doc\\\/help\\\/multi-rate-control#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\":\"Multi-rate control\"}]},{\"@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\\\/7b8b9195745f175d838339eb04338149\",\"name\":\"Rafael Basso\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6df9d43ecf2a496453ea54d5e701f6e86b8ae3c13618477009d296b0414492c9?s=96&d=mm&r=ge163ae97148d9cf79d8e1b2187a65d7c\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6df9d43ecf2a496453ea54d5e701f6e86b8ae3c13618477009d296b0414492c9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6df9d43ecf2a496453ea54d5e701f6e86b8ae3c13618477009d296b0414492c9?s=96&d=mm&r=g\",\"caption\":\"Rafael Basso\"},\"url\":\"https:\\\/\\\/imperix.com\\\/doc\\\/author\\\/rafael-bassoimperix-ch\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Multi-rate control - imperix","description":"This note introduces the basic principles required to run multi-rate control algorithms on imperix controllers.","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\/multi-rate-control","og_locale":"en_US","og_type":"article","og_title":"Multi-rate control - imperix","og_description":"This note introduces the basic principles required to run multi-rate control algorithms on imperix controllers.","og_url":"https:\/\/imperix.com\/doc\/help\/multi-rate-control","og_site_name":"imperix","article_published_time":"2026-08-12T07:34:06+00:00","article_modified_time":"2026-08-12T12:00:00+00:00","og_image":[{"width":450,"height":300,"url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/3_2_ratio_PN265.png","type":"image\/png"}],"author":"Rafael Basso, Julien Orsinger","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rafael Basso, Julien Orsinger","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#article","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control"},"author":{"name":"Rafael Basso","@id":"https:\/\/imperix.com\/doc\/#\/schema\/person\/7b8b9195745f175d838339eb04338149"},"headline":"Multi-rate control","datePublished":"2026-08-12T07:34:06+00:00","dateModified":"2026-08-12T12:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control"},"wordCount":1269,"commentCount":0,"publisher":{"@id":"https:\/\/imperix.com\/doc\/#organization"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/3_2_ratio_PN265.png","articleSection":["Going further with ACG SDK","Product notes"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/imperix.com\/doc\/help\/multi-rate-control#respond"]}]},{"@type":"WebPage","@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control","url":"https:\/\/imperix.com\/doc\/help\/multi-rate-control","name":"Multi-rate control - imperix","isPartOf":{"@id":"https:\/\/imperix.com\/doc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#primaryimage"},"image":{"@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#primaryimage"},"thumbnailUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/3_2_ratio_PN265.png","datePublished":"2026-08-12T07:34:06+00:00","dateModified":"2026-08-12T12:00:00+00:00","description":"This note introduces the basic principles required to run multi-rate control algorithms on imperix controllers.","breadcrumb":{"@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/imperix.com\/doc\/help\/multi-rate-control"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#primaryimage","url":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/3_2_ratio_PN265.png","contentUrl":"https:\/\/imperix.com\/doc\/wp-content\/uploads\/2026\/08\/3_2_ratio_PN265.png","width":450,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/imperix.com\/doc\/help\/multi-rate-control#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":"Multi-rate control"}]},{"@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\/7b8b9195745f175d838339eb04338149","name":"Rafael Basso","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/6df9d43ecf2a496453ea54d5e701f6e86b8ae3c13618477009d296b0414492c9?s=96&d=mm&r=ge163ae97148d9cf79d8e1b2187a65d7c","url":"https:\/\/secure.gravatar.com\/avatar\/6df9d43ecf2a496453ea54d5e701f6e86b8ae3c13618477009d296b0414492c9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6df9d43ecf2a496453ea54d5e701f6e86b8ae3c13618477009d296b0414492c9?s=96&d=mm&r=g","caption":"Rafael Basso"},"url":"https:\/\/imperix.com\/doc\/author\/rafael-bassoimperix-ch"}]}},"_links":{"self":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/46464","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\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/comments?post=46464"}],"version-history":[{"count":50,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/46464\/revisions"}],"predecessor-version":[{"id":48686,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/posts\/46464\/revisions\/48686"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media\/48693"}],"wp:attachment":[{"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/media?parent=46464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/categories?post=46464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tags?post=46464"},{"taxonomy":"software-environments","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/software-environments?post=46464"},{"taxonomy":"provided-results","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/provided-results?post=46464"},{"taxonomy":"related-products","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/related-products?post=46464"},{"taxonomy":"guidedreadings","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/guidedreadings?post=46464"},{"taxonomy":"tutorials","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/tutorials?post=46464"},{"taxonomy":"user-manuals","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/user-manuals?post=46464"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/imperix.com\/doc\/wp-json\/wp\/v2\/coauthors?post=46464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}