基于matlab的控制系统串联校正—相位超前校正问题实例

1.问题

        为了改进闭环系统性能,可以采用串联校正,这里用相位超前校正,即
Gc(S)=\frac{\tau s+1}{\alpha \tau s+1}
α 常取 0.07~0.2 ,选择适当的 α τ , 要使
\frac{1}{\tau }< \omega _{c}< \frac{1}{\alpha \tau }
针对新的开环传递函数 G ’ K (S)=Gc(S) × G(S) × H(S) ,画出开环 Bode 图,
观察不同的 α τ BODE 图的影响,使相位裕度 γ >40 ° ,以使闭环系统性能
大大提高,确定合适的 α τ

2.代码

% 定义G(s)和H(s)  
numG = 160;  
denG = [1, 1, 0.01]; % 转换为标准形式s^3 + 0s^2 + 0.01s  
G = tf(numG, denG);  
H = 0.1;  
s=tf("s")  ;
% 初始化alpha和tau的搜索范围  
alpha_range = 0.07:0.01:0.2; % 
tau_range = 0.01:0.01:1; % 初始化存储相位裕度的数组  
pm_alpha = zeros(size(alpha_range));  
pm_tau = zeros(size(tau_range));  
pm_matrix = zeros(length(alpha_range), length(tau_range));  % 迭代搜索  
for i = 1:length(alpha_range)  for j = 1:length(tau_range)  % 假设相位超前校正为 (tau*s + 1) / (alpha*tau*s + 1)  comp = (tau_range(j)*s + 1) / (alpha_range(i)*tau_range(j)*s + 1);  GH = G * H * comp; % 闭环传递函数  [~, pm] = margin(GH); % 计算相位裕度  pm_matrix(i, j) = pm;  end  pm_alpha(i) = max(pm_matrix(i, :)); % 每个alpha下的最大相位裕度  [~, idx] = max(pm_matrix(i, :));  pm_tau(idx) = pm_matrix(i, idx); % 对应的tau下的相位裕度  
end  %% 
% 绘制相位裕度随alpha变化的图  
figure; 
subplot(1,2,1)
plot(alpha_range, pm_alpha, 'b-o');  
xlabel('\alpha');  
ylabel('Phase Margin (deg)');  
title('相位裕度随alpha变化的图');  
grid on; % 绘制相位裕度随tau变化的图 
subplot(1,2,2) 
plot(tau_range, pm_tau, 'r-o');  
xlabel('\tau');  
ylabel('Phase Margin (deg) for Optimal \alpha');  
title('相位裕度随tau变化的图');  
grid on;  %% % 确定最优值  
[max_pm_alpha, idx_alpha] = max(pm_alpha);  
optimal_alpha = alpha_range(idx_alpha);  
optimal_tau_idx = find(pm_matrix(idx_alpha, :) == max_pm_alpha); % 可能有多个tau对应相同的最大相位裕度  
optimal_tau = tau_range(optimal_tau_idx(1)); % 选择第一个tau值  % 绘制最优alpha和tau下的Bode图  
comp_optimal = (optimal_tau*s + 1) / (optimal_alpha*optimal_tau*s + 1);  
GH_optimal = G * H * comp_optimal;  
figure;  
bode(GH_optimal, '-k');  
title(['最优alpha和tau下的Bode图 (\alpha = ', num2str(optimal_alpha), ', \tau = ', num2str(optimal_tau), ')']);  
grid on;  [gm3, pm3, wcg3, wcp3] = margin(GH_optimal);   
% 幅值裕度(以分贝为单位)  
am_dB3 = 20*log10(1/gm3);  

3.运行结果

图1

图2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大创项目推荐 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

探索Vim的网络边界:如何在Vim中畅游互联网

&#x1f310; 探索Vim的网络边界&#xff1a;如何在Vim中畅游互联网 Vim&#xff0c;被誉为编辑器之神&#xff0c;不仅在本地文本编辑上表现出色&#xff0c;还拥有一些鲜为人知的网络功能。这些功能让Vim能够在网络环境中更加灵活地处理文件和数据。本文将详细介绍如何在Vi…

数据结构-排序算法篇

前言 在我们的生活中有很多东西都是有大小的&#xff0c;那么该如何去排序&#xff1f;假设有10个数字要你去排序&#xff0c;眼睛一扫就看出来了&#xff0c;那100、1000、10000要怎么去排&#xff1f;下面就为大家介绍各种排序的算法。 内容 1.冒泡排序 2.选择排序 3.插入…

postman使用笔记

Postman 是一个广泛使用的 API 开发工具&#xff0c;它提供了一个用户友好的图形界面来发送 HTTP 请求、查看响应、组织测试用例和创建自动化测试。以下是一些基本的 Postman 使用教程&#xff0c;结合了搜索结果中的信息&#xff1a; 安装 Postman 访问 Postman 官方网站下载…

vue2 中如何使用 vuedraggable 库实现拖拽功能

1.通过 npm 或 yarn 安装 vuedraggable 库 npm install vuedraggableyarn add vuedraggable 2. 引入组件内部使用&#xff0c;以下代码是一个Demo&#xff0c;可直接复制粘贴演示 注意&#xff1a;因项目使用了 vant&#xff0c;需要安装 vant 才能正常运行 <template&g…

windows USB设备驱动开发-开发USB 设备端驱动

USB 设备是通过单个端口连接到计算机的外设&#xff0c;例如鼠标设备和键盘。 USB 客户端驱动程序是计算机上安装的软件&#xff0c;该软件与硬件通信以使设备正常运行。 如果设备属于 Microsoft 支持的设备类&#xff0c;Windows 会为该设备加载 Microsoft 提供的 USB 驱动程序…

简单分享下python封装

目录&#xff1a; 一、简介&#xff0c;什么是封装 二、封装的优点与好处 三、封装的示例 四、可封装的场景 一、简介&#xff0c;什么是封装 通俗理解&#xff1a;封装&#xff0c;简而言之&#xff0c;就是把数据&#xff08;变量&#xff09;和操作这些数据的方法&#xff0…

什么是低代码(Low Code)?全面解析国内十大低代码平台

什么是低代码&#xff08;Low Code&#xff09;&#xff1f;为什么低代码这么火&#xff1f;国内排名前十的低代码平台分别是哪些&#xff1f;低代码平台的操作方法&#xff1f;低代码的优缺点&#xff1f;以及低代码有哪些典型案例&#xff1f;本文集合本人5年来的低代码实践经…

Spring Boot与Kafka的集成应用

Spring Boot与Kafka的集成应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 Kafka作为一款高性能、分布式的消息队列系统&#xff0c;与Spring Bo…

TongRDS2214手动部署版指引(by lqw+sy)

文章目录 前言准备工作单机版集群版哨兵版多个中心节点配置 前言 由于一些特殊原因&#xff08;例如服务器没有联网&#xff0c;没有办法直接更新和下载unzip指令&#xff0c;从而导致控制台版本安装节点之后&#xff0c;会报file not found的错误&#xff0c;或者使用不了rds…

1.什么是js?特点是什么?组成部分?

Js是一种直译式脚本语言&#xff0c;一种动态类型&#xff0c;弱类型&#xff0c;基于原型的高级语言。 直译式&#xff1a;js程序运行过程中直接编译成机器语言。 脚本语言&#xff1a;在程序运行过程中逐行进行解释说明&#xff0c;不需要预编译。 动态类型&#xff1a;js…

C++:静态函数的作用

在C中&#xff0c;静态函数&#xff08;static 函数&#xff09;的作用主要是限定该函数的可见性和链接性&#xff0c;而不是直接关联于函数的返回类型或参数列表&#xff08;尽管你提到了static int()这样的形式&#xff0c;这里的static是修饰函数本身的&#xff0c;而不是in…

(PC+WAP)高端大气的装修装潢公司网站模板

(PCWAP)高端大气的装修装潢公司网站模板PbootCMS内核开发的网站模板&#xff0c;该模板适用于装修公司网站、装潢公司网站等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;(PCWAP)&#xff0c;同一个后台&#xff0c;数据即…

javascript Reflect.has作用

JavaScript中的Reflect.has()方法用于检查一个属性是否存在于对象中。它的作用类似于 in 运算符&#xff0c;但是作为函数形式提供&#xff0c;更适合在某些需要函数调用的上下文中使用&#xff0c;尤其是在函数式编程风格中。Reflect.has()方法接收两个参数&#xff1a; targ…

采集网关iGR-1700产品组成与集成

采集网关iGR-1700作为国瑞iGR-IMS数据综合管理系统的一个重要组成部分&#xff0c;其产品组成与集成主要体现在以下几个方面&#xff1a; 一、产品组成 iGR-1700数据采集网关主要用于生产数据的采集。具体而言&#xff0c;它能够&#xff1a; 1. 自动化提取数据&#xff1a;…

Pandas实战秘籍:轻松驾驭重复值与异常值的处理艺术,让数据清洗更高效!

1.导包 import numpy as np import pandas as pd2.删除重复行 def make_df(indexs,columns):data [[str(j)str(i) for j in columns] for i in indexs]df pd.DataFrame(datadata,indexindexs,columnscolumns)return df使用 duplicated() 函数检测重复的行 返回元素为布尔类…

2025年大数据专业毕设必过选题

一、Hive数据仓库相关选题 基于hive的太原共享单车数据分析与实现&#xff08;难度系数&#xff1a;⭐⭐⭐&#xff09; 基于Hive的外汇交易数据分析与研究&#xff08;难度系数&#xff1a;⭐⭐&#xff09; 基于hive的垃圾分类大数据可视化&#xff08;难度系数&#xff1…

如何下载huggingface仓库里某一个文件

如何下载huggingface仓库里某一个文件&#xff1a; https://huggingface.co/PixArt-alpha/PixArt-Sigma/tree/main 直接用命令&#xff1a; wget https://huggingface.co/PixArt-alpha/PixArt-Sigma/resolve/main/PixArt-Sigma-XL-2-2K-MS.pth

什么是浏览器指纹识别?

一段时间以来&#xff0c;网络隐私一直是一个持续存在的问题。如何保持匿名、保护数据并使其真正成为隐私&#xff1f;我们大多数人都使用 VPN 和代理网络来使我们的虚拟生活更加安全。这是一个不错的想法&#xff0c;但它真的有用吗&#xff1f; 是的&#xff0c;在一定程度上…

信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用

PDF文档公众号回复关键字:20240702 2020 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 1.在内存储器中每个存储单元都被赋予一个唯一的序号&#xff0c;称为&#xff08; &#xff0…