哈尔滨网站建设吕新松,正规的抖音推广平台,免费视图网站建设,网站子站怎么做的文章目录 1、一阶惯性环节的幅频特性曲线分析及绘制2、二阶系统的幅频特性曲线分析及绘制3、一般的系统4、上位机代码实现4.1 一阶惯性系统4.2 二阶系统 5、稳定裕度5.1 幅值裕度5.2 相角裕度 参考 1、一阶惯性环节的幅频特性曲线分析及绘制 这里的a和b可以根据系统的不同修改,… 文章目录 1、一阶惯性环节的幅频特性曲线分析及绘制2、二阶系统的幅频特性曲线分析及绘制3、一般的系统4、上位机代码实现4.1 一阶惯性系统4.2 二阶系统 5、稳定裕度5.1 幅值裕度5.2 相角裕度 参考 1、一阶惯性环节的幅频特性曲线分析及绘制 这里的a和b可以根据系统的不同修改,然后在0-50Hz内以1/10000的分辨率取点可得对数幅频特性曲线1/0.5s1 MATLAB脚本实现传递函数1/0.5s1的伯德图绘制
% 0.001 - 10^1.5 10000个点
w logspace(-3,2,10000);
num [0 1];
f [0.5 1];
sys tf(num,f);
P bodeoptions;
% 横坐标为Hz
P.FreqUnits Hz;
bode(sys,w,P)2、二阶系统的幅频特性曲线分析及绘制 MATLAB脚本实现传递函数2/(0.01s1)(0.2s1)的伯德图绘制
% 0.001 - 10^1.5 10000个点
w logspace(-3,2,10000);
num [0 2];
f1 [0.01 1];
f2 [0.2 1];
den conv(f1,f2);
sys tf(num,den);
P bodeoptions;
% 横坐标为Hz
P.FreqUnits Hz;
bode(sys,w,P)3、一般的系统 4、上位机代码实现
源码及Oxyplot源码下载地址 WPF实现bode图demo源码
4.1 一阶惯性系统
Page x:ClassWPF_Demo_V2.View.LogChartPagexmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPF_Demo_V2.Viewxmlns:oxyplothttp://oxyplot.org/wpfmc:Ignorabled d:DesignHeight450 d:DesignWidth800TitleLogChartPageGridGrid.RowDefinitionsRowDefinition/RowDefinition//Grid.RowDefinitionsGrid.ColumnDefinitionsColumnDefinition Width5*/ColumnDefinition//Grid.ColumnDefinitionsoxyplot:PlotView Model{Binding MyPlotModelUp}/oxyplot:PlotView Grid.Row1 Model{Binding MyPlotModelDown}/StackPanel Grid.Row0 Grid.Column1 OrientationVerticalGridGrid.ColumnDefinitionsColumnDefinition Width0.8*/ColumnDefinition//Grid.ColumnDefinitionsGrid.RowDefinitionsRowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition//Grid.RowDefinitionsTextBlock Texta: ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Column1 Text{Binding A} Margin2/TextBoxTextBlock Textb: Grid.Row1 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row1 Grid.Column1 Text{Binding B} Margin2/TextBoxTextBlock TextX max: Grid.Row2 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row2 Grid.Column1 Text{Binding X_max} Margin2/TextBoxTextBlock Textfactor: Grid.Row3 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row3 Grid.Column1 Text{Binding Factor} Margin2 ToolTipX_max/factor 为最小分辨率/TextBoxTextBlock TextY1 min: Grid.Row4 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row4 Grid.Column1 Text{Binding Y1_min} Margin2/TextBoxTextBlock TextY1 max: Grid.Row5 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row5 Grid.Column1 Text{Binding Y1_max} Margin2/TextBoxTextBlock TextY2 min: Grid.Row6 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row6 Grid.Column1 Text{Binding Y2_min} Margin2/TextBoxTextBlock TextY2 max: Grid.Row7 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row7 Grid.Column1 Text{Binding Y2_max} Margin2/TextBoxButton Grid.Row8 Grid.ColumnSpan2 Content确定 Margin20,2 Command{Binding sureCommand}//GridImage Source../Resource/Image/function.png//StackPanel/Grid
/Page
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace WPF_Demo_V2.ViewModel
{partial class LogChartViewModel: ObservableObject{#region 全局变量//UInt32 LEN 50;//UInt32 FACT 10000;double[] Gain;double[] Phase;FunctionSeries upFunctionSeriesnew FunctionSeries();FunctionSeries downFunctionSeriesnew FunctionSeries();#endregion#region 构造函数public LogChartViewModel(){upFunctionSeries.Title Gain;downFunctionSeries.Title Phase;}#endregion#region 属性[ObservableProperty]public PlotModel _MyPlotModelUp;[ObservableProperty]public PlotModel _MyPlotModelDown;[ObservableProperty]public double _A 0.5;[ObservableProperty]public double _B 1;[ObservableProperty]public int _X_max 50;[ObservableProperty]public int _Factor 10000;[ObservableProperty]public double _Y1_max 0;[ObservableProperty]public double _Y1_min -50;[ObservableProperty]public double _Y2_max 0;[ObservableProperty]public double _Y2_min -90;#endregion#region 方法public PlotModel PlotModelInit(string xtitle,string ytitle,double ymin,double ymax){var plotModel new PlotModel();//plotModel.Title Log Paper;var logarithmicAxis1 new LogarithmicAxis();logarithmicAxis1.MajorGridlineColor OxyColor.FromArgb(40, 0, 0, 139);logarithmicAxis1.MajorGridlineStyle LineStyle.Solid;logarithmicAxis1.Maximum X_max;logarithmicAxis1.Minimum 1/ (double)Factor;logarithmicAxis1.MinorGridlineColor OxyColor.FromArgb(20, 0, 0, 139);logarithmicAxis1.MinorGridlineStyle LineStyle.Solid;logarithmicAxis1.Position AxisPosition.Bottom;if (!string.IsNullOrEmpty(xtitle)) logarithmicAxis1.Title xtitle;plotModel.Axes.Add(logarithmicAxis1);var linearAxis1 new LinearAxis();linearAxis1.MajorGridlineStyle LineStyle.Solid;linearAxis1.MinorGridlineStyle LineStyle.Dot;linearAxis1.Maximum ymax;linearAxis1.Minimum ymin;linearAxis1.Title ytitle;plotModel.Axes.Add(linearAxis1);return plotModel;}[RelayCommand]private void sure(){if(upFunctionSeries.Points.Count0) upFunctionSeries.Points.Clear();if (downFunctionSeries.Points.Count 0)downFunctionSeries.Points.Clear();if (MyPlotModelUp ! null) {if (MyPlotModelUp.Series.Count 0) MyPlotModelUp.Series.Clear();}if(MyPlotModelDown ! null){if (MyPlotModelDown.Series.Count 0) MyPlotModelDown.Series.Clear();}MyPlotModelUp PlotModelInit(, Magnitude[dB], Y1_min, Y1_max);MyPlotModelDown PlotModelInit(Frequency[Hz], Phase[deg], Y2_min, Y2_max);Gain new double[X_max * Factor];Phase new double[X_max * Factor];for (int i 0; i X_max * Factor; i){double temp_a 2 * Math.PI * A * (i / (double)Factor);double temp_2 Math.Pow(temp_a, 2) Math.Pow(B, 2);double temp_sqrt 1 / Math.Sqrt(temp_2);double temp Math.Abs(temp_sqrt);Gain[i] 20 * Math.Log10(temp);Phase[i] -Math.Atan(temp_a / (double)B) / Math.PI * 180;upFunctionSeries.Points.Add(new DataPoint(i / (double)Factor, Gain[i]));downFunctionSeries.Points.Add(new DataPoint(i / (double)Factor, Phase[i]));}MyPlotModelUp.Series.Add(upFunctionSeries);MyPlotModelDown.Series.Add(downFunctionSeries);MyPlotModelUp.ResetAllAxes();MyPlotModelUp.InvalidatePlot(true);MyPlotModelDown.ResetAllAxes();MyPlotModelDown.InvalidatePlot(true);}#endregion}
}
4.2 二阶系统
Page x:ClassWPF_Demo_V2.View.Log3ChartPagexmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPF_Demo_V2.Viewxmlns:oxyplothttp://oxyplot.org/wpfmc:Ignorabled d:DesignHeight450 d:DesignWidth800TitleLog3ChartPageGridGrid.RowDefinitionsRowDefinition/RowDefinition//Grid.RowDefinitionsGrid.ColumnDefinitionsColumnDefinition Width5*/ColumnDefinition//Grid.ColumnDefinitionsoxyplot:PlotView Model{Binding MyPlotModelUp}/oxyplot:PlotView Grid.Row1 Model{Binding MyPlotModelDown}/StackPanel Grid.Row0 Grid.Column1 OrientationVerticalGridGrid.ColumnDefinitionsColumnDefinition Width0.8*/ColumnDefinition//Grid.ColumnDefinitionsGrid.RowDefinitionsRowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition/RowDefinition//Grid.RowDefinitionsTextBlock Texta: ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Column1 Text{Binding A} Margin2/TextBoxTextBlock Textb: Grid.Row1 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row1 Grid.Column1 Text{Binding B} Margin2/TextBoxTextBlock Textc: Grid.Row2 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row2 Grid.Column1 Text{Binding C} Margin2/TextBoxTextBlock TextX max: Grid.Row3 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row3 Grid.Column1 Text{Binding X_max} Margin2/TextBoxTextBlock Textfactor: Grid.Row4 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row4 Grid.Column1 Text{Binding Factor} Margin2 ToolTipX_max/factor 为最小分辨率/TextBoxTextBlock TextY1 min: Grid.Row5 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row5 Grid.Column1 Text{Binding Y1_min} Margin2/TextBoxTextBlock TextY1 max: Grid.Row6 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row6 Grid.Column1 Text{Binding Y1_max} Margin2/TextBoxTextBlock TextY2 min: Grid.Row7 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row7 Grid.Column1 Text{Binding Y2_min} Margin2/TextBoxTextBlock TextY2 max: Grid.Row8 ForegroundWhite HorizontalAlignmentRight/TextBox Grid.Row8 Grid.Column1 Text{Binding Y2_max} Margin2/TextBoxButton Grid.Row9 Grid.ColumnSpan2 Content确定 Margin20,2 Command{Binding sureCommand}//GridImage Source../Resource/Image/function.png//StackPanel/Grid
/Page
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using OxyPlot.Axes;
using OxyPlot.Series;
using OxyPlot;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace WPF_Demo_V2.ViewModel
{partial class Log3ChartViewModel: ObservableObject{#region 全局变量//UInt32 LEN 50;//UInt32 FACT 10000;double[] Gain;double[] Phase;FunctionSeries upFunctionSeries new FunctionSeries();FunctionSeries downFunctionSeries new FunctionSeries();#endregion#region 构造函数public Log3ChartViewModel(){upFunctionSeries.Title Gain;downFunctionSeries.Title Phase;}#endregion#region 属性[ObservableProperty]public PlotModel _MyPlotModelUp;[ObservableProperty]public PlotModel _MyPlotModelDown;[ObservableProperty]public double _A 0.5;[ObservableProperty]public double _B 1;[ObservableProperty]public double _C 1;[ObservableProperty]public int _X_max 50;[ObservableProperty]public int _Factor 10000;[ObservableProperty]public double _Y1_max 0;[ObservableProperty]public double _Y1_min -100;[ObservableProperty]public double _Y2_max 100;[ObservableProperty]public double _Y2_min -100;#endregion#region 方法public PlotModel PlotModelInit(string xtitle, string ytitle, double ymin, double ymax){var plotModel new PlotModel();//plotModel.Title Log Paper;var logarithmicAxis1 new LogarithmicAxis();logarithmicAxis1.MajorGridlineColor OxyColor.FromArgb(40, 0, 0, 139);logarithmicAxis1.MajorGridlineStyle LineStyle.Solid;logarithmicAxis1.Maximum X_max;logarithmicAxis1.Minimum 1 / (double)Factor;logarithmicAxis1.MinorGridlineColor OxyColor.FromArgb(20, 0, 0, 139);logarithmicAxis1.MinorGridlineStyle LineStyle.Solid;logarithmicAxis1.Position AxisPosition.Bottom;if (!string.IsNullOrEmpty(xtitle)) logarithmicAxis1.Title xtitle;plotModel.Axes.Add(logarithmicAxis1);var linearAxis1 new LinearAxis();linearAxis1.MajorGridlineStyle LineStyle.Solid;linearAxis1.MinorGridlineStyle LineStyle.Dot;linearAxis1.Maximum ymax;linearAxis1.Minimum ymin;linearAxis1.Title ytitle;plotModel.Axes.Add(linearAxis1);//var logarithmicAxis2 new LogarithmicAxis();//logarithmicAxis2.MajorGridlineColor OxyColor.FromArgb(40, 0, 0, 139);//logarithmicAxis2.MajorGridlineStyle LineStyle.Solid;//logarithmicAxis2.Maximum 180;//logarithmicAxis2.Minimum -180;//logarithmicAxis2.MinorGridlineColor OxyColor.FromArgb(20, 0, 0, 139);//logarithmicAxis2.MinorGridlineStyle LineStyle.Solid;//logarithmicAxis2.Title Y;//plotModel.Axes.Add(logarithmicAxis2);return plotModel;}[RelayCommand]private void sure(){if (upFunctionSeries.Points.Count 0) upFunctionSeries.Points.Clear();if (downFunctionSeries.Points.Count 0) downFunctionSeries.Points.Clear();if (MyPlotModelUp ! null){if (MyPlotModelUp.Series.Count 0) MyPlotModelUp.Series.Clear();}if (MyPlotModelDown ! null){if (MyPlotModelDown.Series.Count 0) MyPlotModelDown.Series.Clear();}MyPlotModelUp PlotModelInit(, Magnitude[dB], Y1_min, Y1_max);MyPlotModelDown PlotModelInit(Frequency[Hz], Phase[deg], Y2_min, Y2_max);Gain new double[X_max * Factor];Phase new double[X_max * Factor];double previousPhase 0;for (int i 0; i X_max * Factor; i){double w 2 * Math.PI * (i / (double)Factor);double temp_a 1 - A*B * Math.Pow(w, 2);double temp_b (AB)*w;double temp_2 Math.Pow(temp_a, 2) Math.Pow(temp_b, 2);double temp_sqrt C / Math.Sqrt(temp_2);double temp Math.Abs(temp_sqrt);Gain[i] 20 * Math.Log10(temp);double currentPhaseA Math.Atan(A * w) / Math.PI * 180;double currentPhaseB Math.Atan(B * w) / Math.PI * 180;Phase[i] 0-(currentPhaseA currentPhaseB);upFunctionSeries.Points.Add(new DataPoint(i / (double)Factor, Gain[i]));downFunctionSeries.Points.Add(new DataPoint(i / (double)Factor, Phase[i]));}MyPlotModelUp.Series.Add(upFunctionSeries);MyPlotModelDown.Series.Add(downFunctionSeries);MyPlotModelUp.ResetAllAxes();MyPlotModelUp.InvalidatePlot(true);MyPlotModelDown.ResetAllAxes();MyPlotModelDown.InvalidatePlot(true);}#endregion}
}
5、稳定裕度 5.1 幅值裕度 5.2 相角裕度 参考
【1】第五章 线性系统的频域分析法 https://buckyi.github.io/Note-Automation/%E7%BB%8F%E5%85%B8%E6%8E%A7%E5%88%B6%E7%90%86%E8%AE%BA/%E7%AC%AC05%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E7%B3%BB%E7%BB%9F%E7%9A%84%E9%A2%91%E5%9F%9F%E5%88%86%E6%9E%90%E6%B3%95.html#33 【2】【自动控制原理】第5章 幅相频率特性曲线奈氏图及其绘制 https://blog.csdn.net/persona5joker/article/details/140055111 【3】相角裕度与幅值裕度 https://blog.csdn.net/qq_38972634/article/details/119787996 【4】【自动控制原理】第五章 奈奎斯特稳定判据相角裕度和幅值裕度对数频率特性及其绘制 https://blog.csdn.net/persona5joker/article/details/140059710?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-140059710-blog-119787996.235v43pc_blog_bottom_relevance_base8spm1001.2101.3001.4242.3utm_relevant_index7 【5】自控理论 第6章 II 相对稳定性、伯德图和闭环频率响应 https://www.cnblogs.com/harold-lu/p/15740368.html