【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代码实现

相关推荐
江_小_白1 小时前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼2 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
LNTON羚通3 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
哭泣的眼泪4084 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
珠海新立电子科技有限公司5 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
IT古董5 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
Matlab精灵5 小时前
Matlab函数中的隐马尔可夫模型
开发语言·matlab·统计学习
Microsoft Word5 小时前
c++基础语法
开发语言·c++·算法
曼城周杰伦5 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3
天才在此5 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划