矢量拟合(1)Sanathanan–Koerner算法

我们假设所建模的系统是线性且时不变的,输入为 u ( t ) ∈ R m u(t) \in \mathbb{R}^m u(t)Rm ,输出为 y ( t ) ∈ R q y(t) \in \mathbb{R}^q y(t)Rq。由于线性和时不变性,输出可以表示为输入 u ( t ) u(t) u(t) 和系统的冲激响应 h ( t ) ∈ R q × m h(t) \in \mathbb{R}^{q \times m} h(t)Rq×m 的卷积:

y ( t ) = ∫ − ∞ + ∞ h ( t − τ ) u ( τ ) d τ ( 1.1 ) y(t) = \int_{-\infty}^{+\infty} h(t - \tau)u(\tau) \, d\tau \quad (1.1) y(t)=+h(tτ)u(τ)dτ(1.1)

将两边进行拉普拉斯变换,得到

Y ( s ) = H ( s ) U ( s ) ( 1.2 ) Y(s) = H(s)U(s) \quad (1.2) Y(s)=H(s)U(s)(1.2)

其中 s = σ + j ω s = \sigma + \text{j}\omega s=σ+jω 为复频率。在式 (1.2) 中, U ( s ) ∈ C m U(s) \in \mathbb{C}^m U(s)Cm Y ( s ) ∈ C q Y(s) \in \mathbb{C}^q Y(s)Cq 分别为 u ( t ) u(t) u(t) y ( t ) y(t) y(t) 的拉普拉斯变换,而 H ( s ) ∈ C q × m H(s) \in \mathbb{C}^{q \times m} H(s)Cq×m 为系统的传递函数。VF 算法解决以下问题:给定传递函数的 k k k 个测量值

H k = H ( j ω k ) , k = 1 , … , k , ( 1.3 ) H_k = H(\text{j}\omega_k), \quad k = 1, \dots, k, \quad (1.3) Hk=H(jωk),k=1,,k,(1.3)

确定一个有理函数 H ~ ( s ) \tilde{H}(s) H~(s) 来逼近给定的测量值

H ~ ( j ω k ) ≈ H k ∀ k = 1 , … , k . ( 1.4 ) \tilde{H}(\text{j}\omega_k) \approx H_k \quad \forall k = 1, \dots, k. \quad (1.4) H~(jωk)Hkk=1,,k.(1.4)

在 VF 中,选择 H ~ ( s ) \tilde{H}(s) H~(s) 为一个有理函数。有理函数是通用的逼近器,因此可以在任意精度下逼近广义的函数。此外,由于集总系统的传递函数本质上是有理的,因此这是建模动态系统的自然选择。最后,有理函数可以表示为状态矩阵、极点-残差形式、一组微分方程、等效电路等多种形式。这种灵活性有助于将简化模型集成到现有的计算数学和系统仿真软件中。

问题(1.4)是一个需要通过数值方法解决的频率响应估计问题。早在1950年代,Levy、Sanathanan 和 Koerner等人就开始了这方面的工作,这为后来的 VF 算法提供了基础。为了简化问题,文章首先考虑一个 单输入单输出系统(即输入和输出各只有一个信号),后面会讨论更一般的情况。

选择合适的模型

为了解决频率响应估计问题,我们首先需要选择一个合适的 数学模型 来描述系统的行为。这个模型通常是传递函数 H ~ ( s ) \tilde{H}(s) H~(s),也就是系统的输入输出关系。为了建立模型,最常见的选择是使用两个多项式的比值形式,即:

H ~ ( s ) = n ( s ) d ( s ) = ∑ n = 0 N a n s n ∑ n = 0 N b n s n ( 1.5 ) \tilde{H}(s) = \frac{n(s)}{d(s)} = \frac{\sum_{n=0}^{N} a_n s^n}{\sum_{n=0}^{N} b_n s^n} (1.5) H~(s)=d(s)n(s)=n=0Nbnsnn=0Nansn1.5

其中, a n a_n an b n b_n bn是待估计的系数, n n n是多项式的阶数。为了简化计算,通常可以将其中一个系数标准化(比如设定 b n = 1 b_n = 1 bn=1)。这个选择的多项式阶数 n n n是为了保证系统的传递函数在频率 s → ∞ s \to \infty s时是有界的。

在某些应用中(例如被动电路的建模),传递函数的阶数可能会随频率 s s s增长,这时候需要对模型的阶数做出调整(比如增加分子的阶数)。

最小化误差

一旦确定了模型的形式,接下来的任务就是通过给定的样本数据来 估计模型参数(即 a n a_n an b n b_n bn的值)。为了做到这一点,我们需要选择一个适当的 误差度量,也就是我们要最小化的目标函数。文章中选择的是 二范数( l 2 l_2 l2范数),即最小化样本响应 H k H_k Hk和模型响应 H ~ ( j ω k ) \tilde{H}(j\omega_k) H~(jωk)之间的差异。

具体来说,我们希望最小化的目标函数是:

e 2 = 1 K ∑ k = 1 K ∣ H k − H ~ ( j ω k ) ∣ 2 ( 1.6 ) e^2 = \frac{1}{K}\sum_{k=1}^K \left| H_k - \tilde{H}(j\omega_k) \right|^2 (1.6) e2=K1k=1K HkH~(jωk) 21.6

这是一个标准的最小二乘问题,其中 H k H_k Hk是样本数据, H ~ ( j ω k ) \tilde{H}(j\omega_k) H~(jωk)是根据模型计算出的频率响应。

非线性最小二乘问题

问题的复杂之处在于,分母中的系数 b n b_n bn是未知的,这使得目标函数是一个 非线性最小二乘问题。虽然可以使用非线性优化算法来求解这个问题,但这种方法通常比较耗时,且容易陷入局部最小值。

线性化求解

为了解决这个问题,提出了一种更加高效的方法:将非线性问题 线性化 成一个线性最小二乘问题。这可以通过 QR分解 等算法来高效求解。线性化的过程将使得求解过程更为简洁,并且避免了非线性优化中可能出现的陷阱。

我们首先将(1.6)重写为:

e 2 = 1 K ∑ k = 1 K ∣ H k ∑ n = 0 n b n ( ȷ ω k ) n − ∑ n = 0 n a n ( ȷ ω k ) n ∑ n = 0 n b n ( ȷ ω k ) n ∣ 2 . ( 1.7 ) e^2 = \frac{1}{K} \sum_{k=1}^{K} \left| \frac{H_k \sum_{n=0}^n b_n (\jmath \omega_k)^n - \sum_{n=0}^n a_n (\jmath \omega_k)^n}{\sum_{n=0}^n b_n (\jmath \omega_k)^n} \right|^2. (1.7) e2=K1k=1K n=0nbn(ωk)nHkn=0nbn(ωk)nn=0nan(ωk)n 2.1.7

Levy 提出通过简单地忽略分母来将(1.7)线性化,并最小化以下目标函数:

( e L ) 2 = 1 k ∑ k = 1 K ∣ H k ∑ n = 0 n b n ( ȷ ω k ) n − ∑ n = 0 n a n ( ȷ ω k ) n ∣ 2 . ( 1.8 ) (e_L)^2 = \frac{1}{k} \sum_{k=1}^{K} \left| H_k \sum_{n=0}^n b_n (\jmath \omega_k)^n - \sum_{n=0}^n a_n (\jmath \omega_k)^n \right|^2. (1.8) (eL)2=k1k=1K Hkn=0nbn(ωk)nn=0nan(ωk)n 2.1.8

最终,这个过程简化为求解一个线性方程组的最小二乘问题。不幸的是,这个简单的技巧通常无法提供(1.4)的准确解。事实上,误差泛函(1.7)和(1.8)仅在

∑ n = 0 n b n ( ȷ ω ) n \sum_{n=0}^n b_n (\jmath \omega)^n n=0nbn(ω)n

为常数时等价,而这种情况一般很少发生。

为了解决这个问题,Sanathanan和Koerner提出了一种迭代过程来提高解的精度。在第一次迭代(即 i = 1 i = 1 i=1)中,最小化 Levy 泛函(8.8),得到模型系数的首次估计,我们将其记为 a n ( 1 ) a^{(1)}_n an(1) b n ( 1 ) b^{(1)}_n bn(1)。在随后的迭代中(即 i ≥ 2 i \geq 2 i2),最小化以下(8.7)的线性化形式:

( e S K ( i ) ) 2 = 1 k ∑ k = 1 K ∣ H k ∑ n = 0 n b n ( i ) ( ȷ ω k ) n − ∑ n = 0 n a n ( i ) ( ȷ ω k ) n ∑ n = 0 n b n ( i − 1 ) ( ȷ ω k ) n ∣ 2 ( 1.9 ) (e^{(i)}_{SK})^2 = \frac{1}{k} \sum_{k=1}^{K} \left| \frac{H_k \sum_{n=0}^{n} b^{(i)}_n (\jmath \omega_k)^n - \sum_{n=0}^{n} a^{(i)}_n (\jmath \omega_k)^n }{ \sum_{n=0}^{n} b^{(i-1)}_n (\jmath \omega_k)^n} \right|^2 (1.9) (eSK(i))2=k1k=1K n=0nbn(i1)(ωk)nHkn=0nbn(i)(ωk)nn=0nan(i)(ωk)n 21.9

从而得到模型系数 a n ( i ) a^{(i)}_n an(i) b n ( i ) b^{(i)}_n bn(i)的新估计。可以看出,在(8.9)中,使用了上一轮迭代中的系数 b n ( i − 1 ) b^{(i-1)}_n bn(i1)来近似(8.7)中的“非线性”项。由于未知数 a n ( i ) a^{(i)}_n an(i) b n ( i ) b^{(i)}_n bn(i)只出现在分子中,Sanathanan–Koerner方法只需要求解线性最小二乘问题。

可以看到,在(1.9)中,分母中的项 ∑ n = 0 n b n ( i − 1 ) ( ȷ ω k ) n \sum_{n=0}^{n} b^{(i-1)}_n (\jmath \omega_k)^n n=0nbn(i1)(ωk)n起到了频率相关的权重作用。该权重旨在逐步消除(1.6)线性化过程中引入的偏差。对于离散时间系统,Sanathanan–Koerner方法的对应方法由Steiglitz和McBride提出。

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

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

相关文章

网页版五子棋——对战模块(服务器端开发②)

前一篇文章:网页版五子棋——对战模块(服务器端开发①)-CSDN博客 项目源代码:Java: 利用Java解题与实现部分功能及小项目的代码集合 - Gitee.com 目录 前言 一、创建并注册 GameAPI 类 1.创建 GameAPI 类 2.注册 GameAPI 类 …

STM32单片机WIFI语音识别智能衣柜除湿消毒照明

实践制作DIY- GC0196-WIFI语音识别智能衣柜 一、功能说明: 基于STM32单片机设计-WIFI语音识别智能衣柜 二、功能介绍: STM32F103C系列最小系统板LCD1602显示器ULN2003控制的步进电机(柜门开关)5V加热片直流风扇紫外消毒灯DHT11…

网络远程操控

1.给两个设备配上ip地址让他们能通 2.开启远程管理功能,打开telnet 3.创建远程管理的账号和密码,账号权限 输入system-view进入视图,不敲这个命令不能进行配置 配好ip后进入AR1ping一下AR2的ip看看通不通,接着进入AR2开启telnet权…

【go从零单排】Timer、Epoch 时间函数

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,time.Timer 是一个用于在指定时间后执行操作的计时器。…

鸿蒙自定义UI组件导出使用

上期讲解了在Entry入口写了一个系统的下拉列表组件,如果我们想要封装一个可供复用的组件供团队其他人使用,那么需要掌握一下自定义组件的写法: 1、自定义可导入组件 - export 声明模块 如果要定义一个在外部可使用的组件 , 需要再定义组件…

Web大学生网页作业成品——婚礼婚纱网页设计与实现(HTML+CSS)(6个页面)

🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…

时序数据库TimescaleDB安装部署以及常见使用

文章目录 一、时序数据库二、TimescaleDB部署1、repository yum仓库配置2、yum在线安装3、插件配置4、TimescaleDB使用登录pg创建插件使用超表 一、时序数据库 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库&#x…

Matlab: 生成对抗网络,使用Datastore结构输入mat格式数据

使用matlab的生成对抗网络(Generative Adversarial Network,GAN)以及条件CGAN时,案例中 的生成器的输入为图像,改为.mat格式输入遇到的问题。解决方法 官方资源 训练条件生成对抗网络 (CGAN)- MATLAB & Simulink-…

Linux kernel 堆溢出利用方法(二)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中off-by-null的利用手法。在通过讲解另一道相对来说比较困难的kernel off-by-null docker escape来深入了解这种漏洞的利用手法。(没了解过docker逃逸的朋友也可以看懂,毕竟有了root权限后&a…

设计模式:工厂方法模式和策略模式

工厂方法模式 什么是开闭原则? 开闭原则是扩展开发,对修改关闭 简单工厂(不是设计模式而是一种编程的习惯) 有三个角色 抽象产品:定义了产品的规范,描述了产品的特性和功能.具体产品:实现或者继承抽象产品的子类具体工厂:提供了创建产品的方法,调用者通过该方法获取产品 实…

深度学习代码笔记

一、U-NET 论文题目:U-Net: Convolutional Networks for Biomedical Image SegmentationUNet 的体系结构基于编码器-解码器范式,其中编码器从输入图像中提取特征,解码器基于这些特征生成分割图。但是,UNet还集成了编码器和解码器…

软件测试面试2024最新热点问题

大厂面试热点问题 1、测试人员需要何时参加需求分析? 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工作的开展越有利 可以尽早的确定测试思路 减少与开发人员的交互 减少对需求理解上的偏差 2、软件测试与调试的关系 测…

L10.【LeetCode笔记】回文链表

目录 1.题目 2.自解 代码 提交结果 1.题目 给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表 。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:tru…

Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)

作者:来自 Elastic Benjamin Trent Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)。 嵌入模型输出 float32 向量,通常对于高效处理和实际应用来说太大。Elasticsearch 支持 int8 标量量化,以减小向量大小,同时保持性能。其他…

猿创征文|Inscode桌面IDE:打造高效开发新体验

猿创征文|Inscode桌面IDE:打造高效开发新体验 引言 在当今快速发展的软件开发领域,一个高效、易用的集成开发环境(IDE)是每个开发者必不可少的工具。Inscode 桌面 IDE 作为一款新兴的开发工具,凭借其强大…

【VBA实战】用Excel制作排序算法动画续

为什么会产生用excel来制作排序算法动画的念头,参见【VBA实战】用Excel制作排序算法动画一文。这篇文章贴出我所制作的所有排序算法动画效果和源码,供大家参考。 冒泡排序: 插入排序: 选择排序: 快速排序:…

IPguard与Ping32全面对比——选择最适合企业的数据安全解决方案

在如今数据安全威胁日益加剧的时代,企业必须高度重视保护敏感数据与信息。因此,选择一款合适的数据安全软件,尤其是防泄密和信息保护软件,显得尤为重要。在市场上,有两款备受企业青睐的数据安全解决方案——IPguard和P…

《情商》提升:增强自我意识,学会与情绪共处

在当今社会,情商(Emotional Intelligence,EQ)的重要性越来越受到人们的关注。情商是指个体运用情绪、情感、认知和行为反应的能力,来理解、管理、表达和处理情感的一种综合素养。情商的高低对于个人的成长、人际关系、…

k8s集群安装(kubeadm)

k8s集群安装(kubeadm) 1、环境准备(master和node节点都执行)1.1、替换yum源1.2、关闭selinux1.3、永久关闭防火墙1.4、永久关闭swap1.5、修改主机名添加host1.6、时间同步1.7、将桥接的IPv4流量传递到iptables的链1.8、docker安装…

使用Matlab建立随机森林

综述 除了神经网络模型以外,树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。 随机森林是一种集成学习方法,通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中,可以…