【Hammerstein模型的级联】快速估计构成一连串哈默斯坦模型的结构元素研究(Matlab代码实现)

简介: 【Hammerstein模型的级联】快速估计构成一连串哈默斯坦模型的结构元素研究(Matlab代码实现)

💥1 概述

在许多振动应用中,所研究的系统略微非线性。Hammerstein模型的级联可以方便地描述这样的系统。Hammerstein提供了一种基于指数正弦扫描相位属性的简单方法。


构成一连串Hammerstein模型的结构元素可以在快速估计中起到关键的作用。Hammerstein模型由级联的非线性静态函数和线性动态函数组成。以下是研究Hammerstein模型结构元素的步骤:


1. 数据收集:首先,收集用于建立Hammerstein模型的数据。这些数据应包括系统的输入和输出信号,以便进行模型参数估计和验证。


2. 静态非线性函数选择:选择适当的静态非线性函数作为Hammerstein模型的非线性部分。常见的选择包括多项式函数、幂函数、指数函数、Sigmoid函数等。根据系统的特性和预期的非线性行为,选择最能表示系统的非线性特点的函数。


3. 参数估计:对选择的静态非线性函数进行参数估计。参数估计的方法可以根据函数的性质灵活选择,例如最小二乘法、最大似然估计法等。根据所选方法,使用数据集中的输入和输出信号优化非线性函数的参数。


4. 线性动态函数选择:选择适当的线性动态函数作为Hammerstein模型的动态部分。常见的选择包括传递函数、状态空间模型等。根据系统的动态特性,选择最适合描述系统响应的线性动态函数。


5. 参数估计:对选择的线性动态函数进行参数估计。使用数据集中的输入和输出信号,在模型的非线性部分和线性动态部分之间优化参数。


6. 模型验证:使用建立的Hammerstein模型对独立数据集进行验证。计算预测输出与真实输出之间的误差,评估模型的准确性和可靠性。如果有必要,可以对模型进行进一步调整和改进。


7. 性能分析:对Hammerstein模型的性能进行分析。例如,可以通过计算模型的拟合优度(如均方根误差)来评估模型的准确性。此外,还可以进行稳定性分析、系统辨识度评估等进一步分析。


需要注意的是,构建Hammerstein模型需要对非线性和线性组成部分的选择和参数估计进行适当的判断和调整。根据具体问题的复杂性和数据的可用性,可以采用各种方法和技术来加快估计和验证过程。


📚2 运行结果

部分代码:

function hhat = Hammerstein_ID(input_sig,output,duration,f1,f2,fs,N,opt_meth,opt_filt)
%---------------------------------------------------------
%
% hhat = Hammerstein_ID(input_sig,output,f1,f2,fs,N,opt_meth,opt_filt)
%
% Estimates the Kernels "h" of the cascade of Hammerstein model of order N fed with
% the input signal "input" and where the corresponding output signal "output"
% has been recorded. "input" has to be an exponential sine sweep going from
% f1 to f2.
%
% Input parameters:
%   input_sig  : input exponential sine sweep
%   output : output of the system fed with the input signal
%   f1 : starting frequency of the sweep
%   f2 : end frequency of the sweep
%   fs : sampling frequency
%   N  : Order of the model to be identified
%   opt_meth : Method to use for the estimation (string expected)
%       - 'Reb': Method proposed by R閎illat et al. in [1]
%       - 'Nov': Method proposed by Novak et al in [2]
%   opt_filt : Specifies the method to use to compute the inverse filter 
%       (string expected). By default 'TFB_linear' is chosen.
%       - 'TFB_square': FTT based filter with a square window and
%         regularization (see [1])
%       - 'TFB_linear': FTT based filter with a square window with continuous
%         linear borders and regularization (see [1])
%       - 'TFB_gevrey': FTT based filter with a square window with infinitely
%         continuous gevrey borders and regularization (see [1])
%       - 'Nov' : Filter based on the analytical formulation using aymptotic 
%         signals (see [2]).
%
% Output:
%   h : 2D matrix containing the pseudo impulse responses (temporal domain) 
%   of the estimated kernels.
display('--> Hammerstein Identification in progress ...')
% Check arguments
if nargin<6
    display('    => ERROR : Incorrect number of arguments')
    return
elseif nargin<7
    display('    => No method option and filtering option specified. ')
    display('    => Method option = ''Reb'' chosen by default.')
    display('    => Filtering option = ''TFB_linear'' chosen by default.')
    opt_meth = 'Reb' ;
    opt_filt = 'TFB_linear';
elseif nargin<8
    display(['    => Method ' opt_meth ' chosen'])
    display('    => No filtering option specified. ')
    if strcmp(opt_meth,'Reb')
        opt_filt = 'TFB_linear';
        display('    => Filtering option = ''TFB_linear'' chosen by default.')
    elseif strcmp(opt_meth,'Nov')
        opt_filt = 'Nov';
        display('    => Filtering option = ''Nov'' chosen by default.')
    else 
        display('    => ERROR : Unknown method option')
        display('    => Select ''Reb'' or ''Nov''')
        return
    end
else
    if ( strcmp(opt_meth,'Nov') || strcmp(opt_meth,'Reb'))
        display(['    => Method ' opt_meth ' chosen'])
    else
        display('    => ERROR : Unknown method option')
        display('    => Select ''Reb'' or ''Nov''')
        return
    end
    if ( strcmp(opt_filt,'TFB_square') || strcmp(opt_filt,'TFB_linear') || strcmp(opt_filt,'TFB_gevrey') || strcmp(opt_filt,'Nov'))
        display(['    => Filtering ' opt_filt ' chosen'])
    else
        display('    => ERROR : Unknown filtering option')
        display('    => Select ''TFB_square'', ''TFB_linear'', ''TFB_gevrey'' or ''Nov''')
        return
    end
end
% Equivalent pulsations
w1 = f1/fs*2*pi;
w2 = f2/fs*2*pi;
% Convolution of the response with the inverse of the sweep
if strcmp(opt_meth,'Reb')
    inverse_input_sig = compute_inverse_filter(input_sig,f1,f2,fs,opt_filt) ;
    gToCut = convq(output,inverse_input_sig);
elseif strcmp(opt_meth,'Nov')
    % Nonlinear convolution in the spectral domain
    gToCut = nonlinear_convolution(output,duration,f1,f2,fs);        
    gToCut = [gToCut; gToCut];
end
% Computation of the delay of the pseudo RI
if strcmp(opt_meth,'Reb')
    T = length(input_sig); % Actual length of the sweep (in samples)
    deltaT = T*log(1:N)/log(w2/w1);
elseif strcmp(opt_meth,'Nov')
    T = length(output); % Actual length of the output (in samples)
    L = 1/f1*round( (duration*f1)/(log(f2/f1)) ); 
    deltaT = L*log(1:N)*fs;
end


🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1] M. Rébillat, R. Hennequin, E. Corteel, B.F.G. Katz, "Identification of cascade of Hammerstein models for the description of non-linearities in vibrating devices", Journal of Sound and Vibration, Volume 330, Issue

5, Pages 1018-1038, February 2011.


[2] A. Novak, L. Simon, F. Kadlec, P. Lotton, "Nonlinear system identification using exponential swept-sine signal", IEEE Transactions on Instrumentation and Measurement, Volume 59, Issue 8, Pages 2220-2229, August 2010.


🌈4 Matlab代码实现

相关文章
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
|
2月前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
207 13
|
2月前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于BP神经网络的苦瓜生长含水量预测模型matlab仿真
本项目展示了基于BP神经网络的苦瓜生长含水量预测模型,通过温度(T)、风速(v)、模型厚度(h)等输入特征,预测苦瓜的含水量。采用Matlab2022a开发,核心代码附带中文注释及操作视频。模型利用BP神经网络的非线性映射能力,对试验数据进行训练,实现对未知样本含水量变化规律的预测,为干燥过程的理论研究提供支持。
|
3月前
|
算法
基于HASM模型的高精度建模matlab仿真
本课题使用HASM进行高精度建模,介绍HASM模型及其简化实现方法。HASM模型基于层次化与自适应统计思想,通过多层结构捕捉不同尺度特征,自适应调整参数,适用于大规模、高维度数据的分析与预测。MATLAB2022A版本运行测试,展示运行结果。
|
4月前
|
机器学习/深度学习 算法 数据处理
基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真
本项目基于最小二乘法,利用Matlab对太阳黑子活动进行模型参数辨识和预测。通过分析过去288年的观测数据,研究其11年周期规律,实现对太阳黑子活动周期性的准确建模与未来趋势预测。适用于MATLAB2022a版本。
|
4月前
|
算法
基于Kronig-Penney能带模型的MATLAB求解与仿真
基于Kronig-Penney能带模型的MATLAB求解与仿真,利用MATLAB的多种数学工具简化了模型分析计算过程。该模型通过一维周期势垒描述晶体中电子运动特性,揭示了能带结构的基本特征,对于半导体物理研究具有重要价值。示例代码展示了如何使用MATLAB进行模型求解和图形绘制。
|
5月前
|
算法 5G 数据安全/隐私保护
SCM信道模型和SCME信道模型的matlab特性仿真,对比空间相关性,时间相关性,频率相关性
该简介展示了使用MATLAB 2022a进行无线通信信道仿真的结果,仿真表明信道的时间、频率和空间相关性随间隔增加而减弱,并且宏小区与微小区间的相关性相似。文中介绍了SCM和SCME模型,分别用于WCDMA和LTE/5G系统仿真,重点在于其空间、时间和频率相关性的建模。SCME模型在SCM的基础上进行了扩展,提供了更精细的参数化,增强了模型的真实性和复杂度。最后附上了MATLAB核心程序,用于计算不同天线间距下的空间互相关性。
121 0
|
5月前
|
算法 5G 数据安全/隐私保护
3D-MIMO信道模型的MATLAB模拟与仿真
该研究利用MATLAB 2022a进行了3D-MIMO技术的仿真,结果显示了不同场景下的LOS概率曲线。3D-MIMO作为5G关键技术之一,通过三维天线阵列增强了系统容量和覆盖范围。其信道模型涵盖UMa、UMi、RMa等场景,并分析了LOS/NLOS传播条件下的路径损耗、多径效应及空间相关性。仿真代码展示了三种典型场景下的LOS概率分布。
173 1
|
5月前
|
算法 数据挖掘 vr&ar
基于ESTAR指数平滑转换自回归模型的CPI数据统计分析matlab仿真
该程序基于ESTAR指数平滑转换自回归模型,对CPI数据进行统计分析与MATLAB仿真,主要利用M-ESTAR模型计算WNL值、P值、Q值及12阶ARCH值。ESTAR模型结合指数平滑与状态转换自回归,适用于处理经济数据中的非线性趋势变化。在MATLAB 2022a版本中运行并通过ADF检验验证模型的平稳性,适用于复杂的高阶自回归模型。