幅频特性曲线分析及使用WPF绘制

文章目录

  • 1、一阶惯性环节的幅频特性曲线分析及绘制
  • 2、二阶系统的幅频特性曲线分析及绘制
  • 3、一般的系统
  • 4、上位机代码实现
    • 4.1 一阶惯性系统
    • 4.2 二阶系统
  • 5、稳定裕度
    • 5.1 幅值裕度
    • 5.2 相角裕度
  • 参考

1、一阶惯性环节的幅频特性曲线分析及绘制

在这里插入图片描述
这里的a和b可以根据系统的不同修改,然后在0-50Hz内以1/10000的分辨率取点,可得对数幅频特性曲线(1/0.5s+1):
在这里插入图片描述
MATLAB脚本实现传递函数(1/0.5s+1)的伯德图绘制:

% 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.01s+1)(0.2s+1)的伯德图绘制:

% 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:Class="WPF_Demo_V2.View.LogChartPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPF_Demo_V2.View"xmlns:oxyplot="http://oxyplot.org/wpf"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"Title="LogChartPage"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="5*"/><ColumnDefinition/></Grid.ColumnDefinitions><oxyplot:PlotView Model="{Binding MyPlotModelUp}"/><oxyplot:PlotView Grid.Row="1"  Model="{Binding MyPlotModelDown}"/><StackPanel Grid.Row="0" Grid.Column="1" Orientation="Vertical"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="0.8*"/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><TextBlock Text="a:" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Column="1" Text="{Binding A}" Margin="2"></TextBox><TextBlock Text="b:" Grid.Row="1" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="1" Grid.Column="1" Text="{Binding B}" Margin="2"></TextBox><TextBlock Text="X max:" Grid.Row="2" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="2" Grid.Column="1" Text="{Binding X_max}" Margin="2"></TextBox><TextBlock Text="factor:" Grid.Row="3" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Factor}" Margin="2" ToolTip="X_max/factor 为最小分辨率"></TextBox><TextBlock Text="Y1 min:" Grid.Row="4" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Y1_min}" Margin="2"></TextBox><TextBlock Text="Y1 max:" Grid.Row="5" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="5" Grid.Column="1" Text="{Binding Y1_max}" Margin="2"></TextBox><TextBlock Text="Y2 min:" Grid.Row="6" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Y2_min}" Margin="2"></TextBox><TextBlock Text="Y2 max:" Grid.Row="7" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="7" Grid.Column="1" Text="{Binding Y2_max}" Margin="2"></TextBox><Button Grid.Row="8" Grid.ColumnSpan="2" Content="确定" Margin="20,2" Command="{Binding sureCommand}"/></Grid><Image 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 upFunctionSeries=new FunctionSeries();FunctionSeries downFunctionSeries=new 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.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];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:Class="WPF_Demo_V2.View.Log3ChartPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WPF_Demo_V2.View"xmlns:oxyplot="http://oxyplot.org/wpf"mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"Title="Log3ChartPage"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="5*"/><ColumnDefinition/></Grid.ColumnDefinitions><oxyplot:PlotView Model="{Binding MyPlotModelUp}"/><oxyplot:PlotView Grid.Row="1"  Model="{Binding MyPlotModelDown}"/><StackPanel Grid.Row="0" Grid.Column="1" Orientation="Vertical"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="0.8*"/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><TextBlock Text="a:" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Column="1" Text="{Binding A}" Margin="2"></TextBox><TextBlock Text="b:" Grid.Row="1" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="1" Grid.Column="1" Text="{Binding B}" Margin="2"></TextBox><TextBlock Text="c:" Grid.Row="2" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="2" Grid.Column="1" Text="{Binding C}" Margin="2"></TextBox><TextBlock Text="X max:" Grid.Row="3" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="3" Grid.Column="1" Text="{Binding X_max}" Margin="2"></TextBox><TextBlock Text="factor:" Grid.Row="4" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Factor}" Margin="2" ToolTip="X_max/factor 为最小分辨率"></TextBox><TextBlock Text="Y1 min:" Grid.Row="5" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="5" Grid.Column="1" Text="{Binding Y1_min}" Margin="2"></TextBox><TextBlock Text="Y1 max:" Grid.Row="6" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Y1_max}" Margin="2"></TextBox><TextBlock Text="Y2 min:" Grid.Row="7" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="7" Grid.Column="1" Text="{Binding Y2_min}" Margin="2"></TextBox><TextBlock Text="Y2 max:" Grid.Row="8" Foreground="White" HorizontalAlignment="Right"/><TextBox Grid.Row="8" Grid.Column="1" Text="{Binding Y2_max}" Margin="2"></TextBox><Button Grid.Row="9" Grid.ColumnSpan="2" Content="确定" Margin="20,2" Command="{Binding sureCommand}"/></Grid><Image 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 = (A+B)*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_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-140059710-blog-119787996.235v43pc_blog_bottom_relevance_base8&spm=1001.2101.3001.4242.3&utm_relevant_index=7
【5】自控理论 第6章 II 相对稳定性、伯德图和闭环频率响应
https://www.cnblogs.com/harold-lu/p/15740368.html

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

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

相关文章

2000-2023年上市公司财务困境RLPM模型数据(含原始数据+计算结果)

2000-2023年上市公司财务困境RLPM模型数据&#xff08;含原始数据计算结果&#xff09; 1、时间&#xff1a;2000-2023年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;证券代码、证券简称、统计截止日期、是否剔除ST或*ST或PT股、是否剔除上市不满一年、已经退市或…

三,接口分类

三&#xff0c;接口分类 接口根据来源可以大致分为两大类&#xff1a;内部接口和外部接口。这种分类方式主要关注于接口的使用场景和目的。 一、内部接口 内部接口主要指的是在程序内部或系统内部使用的接口&#xff0c;它们通常用于方法与方法之间、模块与模块之间的交互和…

【binder】【android12】【2.servicemanager启动——全源码分析】

系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 …

vue3+vite如何获取资源文件夹

步骤很详细&#xff0c;直接上代码 可以使用glob获取文件夹内容 *指的是通配符&#xff0c;切记别漏了 const files import.meta.glob(/public/backgroundImages/*)Object.keys(files).forEach(item > {console.log(item)})const files1 import.meta.glob(/src/assets/*)O…

入门Java编程的知识点—>面向对象(day07)

重点掌握什么是面向对象&#xff1f;重点掌握面向对象封装的意义&#xff1f;重点掌握类的封装,创建对象,访问对象&#xff1f; 面向对象 OO&#xff1a;&#xff08;Object Oriented&#xff09;面向对象 面向对象是一种编程思想,遵循面向对象设计原则可以写出高质量代码, …

数学建模学习(122):基于PPF-AHP的多准则决策分析—以城市交通枢纽选址为例

这是一个2024年3月最新出的AHP算法,可以适用于更加复杂的情况。 文章目录 1. 引言2. 理论基础2.1. 层次分析法 (AHP)2.2. Proportional Picture Fuzzy 集合 (PPF)2.3. PPF-AHP 结合3. 案例背景:城市公共交通枢纽选址3.1 决策准则的成对比较矩阵构建3.2 Python代码实现参考文献…

sheng的学习笔记-AI-生成式方法

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要额外的知识对应连接&#xff1a; EM&#xff1a;sheng的学习笔记-AI-EM算法-CSDN博客 贝叶斯&#xff1a; sheng的学习笔记-AI-贝叶斯&#xff08;Bayesian&#xff09;分类-CSDN博客 高斯混合模型&#xff1a;shen…

python实现循环神经网络

为了提供一个基础的循环神经网络&#xff08;RNN&#xff09;示例&#xff0c;我们可以使用TensorFlow和Keras&#xff0c;这是构建和训练神经网络常用的两个库。以下是一个简单的RNN实现&#xff0c;用于处理序列数据&#xff08;如时间序列数据或文本数据&#xff09;。在这个…

C#中的WebClient与XPath:实现精准高效的Screen Scraping

在现代互联网中&#xff0c;Screen Scraping&#xff08;屏幕抓取&#xff09;已成为从网页中提取信息的重要技术。对于C#开发者来说&#xff0c;WebClient和XPath是实现高效抓取的重要工具。本文将概述如何使用C#中的WebClient类结合XPath技术&#xff0c;实现精准高效的Scree…

Day15_设计模式

文章目录 设计模式说一下你的这两个项目用了什么设计模式?为什么要这么用?说说什么是单例模式1.饿汉式:在类初始化时直接创建实例对象,不管你是否需要这个对象,都会创建。 **没有线程安全问题**2.懒汉式:延迟创建这个实例对象 (什么时候调用get方法 什么时候创建对象)3…

【Java EE】深入探讨 Java 中 Thread 类的使用

在现代软件开发中&#xff0c;随着硬件性能的提升&#xff0c;多线程编程已成为提升应用程序性能的关键手段之一。Java 提供了多种处理并发任务的工具&#xff0c;其中 Thread 类是基础。本文将详细探讨 Thread 类的使用&#xff0c;包括线程的创建与启动、线程的中断、线程的等…

流媒体服务器如何让WebRTC支持H.265,同时又能支持Web js硬解码、软解码(MSE硬解、WASM软解)

为了这一整套的解决方案&#xff0c;调研研发整整花费了差不多半年多的时间&#xff0c;需达成的目标&#xff1a; 流媒体服务器端不需要将H.265转码成H.264&#xff0c;就能让Chrome解码播放H.265&#xff1b; 注意&#xff1a;现在很多市面上的软硬件通过转码H.265成H.264的…

Python中的命令模式:如何设计灵活的命令体系

Python中的命令模式&#xff1a;如何设计灵活的命令体系 命令模式是一种行为设计模式&#xff0c;它将请求封装为对象&#xff0c;从而使用户能够以不同的方式参数化客户端的请求、排队请求、记录请求日志&#xff0c;或者支持可撤销的操作。在Python中&#xff0c;命令模式的…

融合创新趋势:Web3时代的跨界融合

随着互联网技术的飞速发展&#xff0c;Web3时代的到来正引领着一场深刻的技术与社会变革。Web3&#xff0c;作为下一代互联网技术的代表&#xff0c;不仅仅是一种技术创新&#xff0c;更是一种跨界融合的趋势。通过去中心化、智能合约和区块链技术的应用&#xff0c;Web3正在重…

django学习入门系列番外篇《request》

文章目录 1 Response功能介绍2 HttpResponse2.1 HttpResponse对象介绍content_typeContent-Type是什么&#xff1f;Content-Type的格式 Content-DispositionContent-Disposition的作用Content-Disposition的使用语句 例子 2.2 HttpResponse常用用法 3 JsonResponse3.1 JsonResp…

编写一个程序,输入a、b、c三个值,输出其中最大值。

/* 题目描述 编写一个程序&#xff0c;输入a、b、c三个值&#xff0c;输出其中最大值。 输入 在一行中输入三个整数 输出 三个数中最大的数 */ #include<stdio.h> #include<math.h> int main(void) { int a, b, c; scanf("%d %d %d", &…

vue组件双向绑定

在Vue中&#xff0c;双向绑定是一个核心概念&#xff0c;它允许数据在视图&#xff08;View&#xff09;和组件的状态&#xff08;或数据模型&#xff09;之间自动同步。这种机制主要通过Vue的v-model指令来实现&#xff0c;但v-model实际上是一个语法糖&#xff0c;它背后依赖…

软件架构设计——关联对象

关联对象的原理 关联对象是在软件架构设计中&#xff0c;用来表示两个或多个对象之间的关系。它们通过引用或指针相互关联&#xff0c;从而可以彼此访问对方的数据和行为。这种关联可以是单向的&#xff0c;也可以是双向的&#xff0c;具体取决于业务需求。 单向关联&#xf…

malloc的底层原理和流程

目录 一、malloc的内存申请方式二、malloc的内存池管理1、分级内存池2、内存块信息3、内存块合并4、内存块分割 三、brk的内存分配过程1、空闲链表2、sbrk 四、malloc的缺陷 前言&#xff1a;从malloc的内存方式、内存池管理、brk系统调用过程这三个点&#xff0c;讲述malloc系…

2054. 骑马修栅栏

代码 #include<bits/stdc.h> using namespace std; int mp[505][505]; queue<int> ans; int du[505]; int n0,m,u,v;void dfs(int i) {for(int j1;j<n;j){if(mp[i][j]>1){mp[i][j]--;mp[j][i]--;dfs(j);}}ans.push(i); } int main() {cin>>m;for(int …