modalfit,modalfit
频率特性导出的模态参数。
库::`工程师`
语法
争论
输入参数
# frf — 频率特性
+
向量资料 | 矩阵 | 阵列
Details
频率特性指定为矢量、矩阵或阵列。 论点 财务汇报局 尺寸为 上 上 ,在哪里 -频率间隔数, -响应信号的数量,以及 -激励信号的数量。
使用方法 [医]modalfrf 以基于测量数据构建频率响应矩阵。
| 数据类型 |
|
输入参数 «名称-值»
将可选参数对指定为 名称,值,在哪里 姓名 -参数的名称,以及 价值 -适当的值。 类型参数 «名称-值» 它们应该放在其他参数之后,但对的顺序无关紧要。 您可以指定多个对 «名称-值».
使用逗号分隔名称和值,以及 姓名 将其用引号括起来,或者使用等号分隔名称和值,并且 姓名 指定它不带引号。
例子: modalfit(frf,f,fs,mnum,"FitMethod","pp","FreqRange",[0 500]) 或 modalfit(frf,f,fs,mnum,FitMethod="pp",FreqRange=[0 500]) 使用峰值提取方法执行近似,并限制频率范围从 0 以前 500 赫兹。
# 馈通 — 估计的传递函数中存在间隙
+
错误 (默认情况下)| 真的
Details
估计的传递函数中存在间隙,设置为布尔值。 此参数仅在参数的情况下可用 [参数:fitmethod] 值指定 "lsrf".
| 数据类型 |
|
# FitMethod — 近似法
+
"lsce" (默认情况下)| "lsrf" | "pp"
Details
的近似方法,定义为 "lsce", "lsrf" 或 "pp".
-
"lsce"-[最小二乘-复数-指数法]。 如果指定了该值"lsce"然后[参数:fn]表示具有[参数:mnum]不依赖于大小的元素[参数:frf]. -
"lsrf"-使用最小二乘法评估有理函数。 如果指定"lsrf"然后[参数:fn]表示具有[参数:mnum]不依赖于大小的元素[参数:frf]. 算法描述为[3]。 该算法通常比非参数方法需要更少的数据,并且是唯一适用于不均匀的算法[参数:f]. -
"pp"—[采峰法]。 为[参数:frf],计算基于 激励信号和 响应信号,[参数:fn]它是大小的数组[参数:mnum]上 上 包含一个分数[参数:fn]和一个评级[参数:dr]上[参数:frf].
# 驱动指数 — 激励点频率响应函数的指标
+
[1 1] (默认情况下)| 正整数的二元素向量
Details
激励点的频率特性的指数,指定为正整数的二元素向量。 向量的第一个元素必须小于或等于系统响应的数量。 向量的第二个元素必须小于或等于系统的激励次数。 基于激励点将波形归一化为单个模态形状。
例子:: "DriveIndex",[2 3] 表示激励点处的频率响应为 frf(:,2,3).
| 数据类型 |
|
# 出 — 输出数据的类型
+
:剧情 (默认情况下)| :数据 | :全部
Details
输出数据的类型:
-
:剧情-函数返回一个图形; -
:数据-函数返回数据; -
:全部-函数返回数据和图形。
对于此参数,名称和值用等号分隔(=).
|
例子:
单通道系统的频率响应
Details
让我们评估一个简单的单通道(单输入/单输出,SISO)系统的频率响应,并将其与定义进行比较。
一维离散振荡系统由单个质量块组成 ,以千克为单位,并通过具有恒定弹性的弹簧附着在墙壁上 传感器用频率记录质量位移 赫兹。 阻尼器阻止质量的运动,在其上施加与速度成比例的力,并具有恒定的阻尼 公斤/秒。
生成 3000 时间很重要。 让我们定义采样间隔 .
import EngeeDSP.Functions: modalfit, randn, modalfrf, hann, ss2tf, freqz
Fs = 1
dt = 1/Fs
N = 3000
t = dt*(0:N-1)
b = 0.01
该系统可以使用状态空间模型来描述。
哪里 为状态向量, 和 -分别是质量的位移和速度, -驱动力,以及 -测量输出信号。 状态空间矩阵:
哪里 -单位矩阵 ,并且连续时间中的状态空间的矩阵具有形式:
Ac = [0 1; -1 -b]
A = exp(Ac * dt)
Bc = [0; 1]
B = Ac \ (A - [1 0; 0 1]) * Bc
C = [1 0]
D = 0
在第一 2000 在几秒钟内,质量通过随机动作设置在运动中,然后允许它返回到静止状态。 我们使用状态空间模型来计算系统的时间演变,从零初始状态开始。 让我们绘制质量位移作为时间的函数。
using Random
Random.seed!(1234)
u = randn(1,N) / 2
u[2001:end] .= 0
y = zeros(N)
x = [0.0; 0.0]
for k in 1:N
y[k] = (C * x)[1] + D * u[k]
x = A * x + B * u[k]
end
t = dt * (0:N-1)
plot(t, y, grid=true)

我们来评估系统的模态频率响应。 我们使用汉纳窗口,其长度是测量信号长度的一半。 我们表明输出信号是质量的运动。
wind = hann(Int64.(N/2));
u = vec(u)
frf,f,coh = modalfrf(u',y',Fs,wind,Sensor="dis",out=:data)
离散系统的频率响应可以表示为系统在时域中的传递函数的Z变换,在单位圆上进行计算。 让我们比较一下评级 [医]modalfrf 有了定义。
b,a = ss2tf(A,B,C,D);
ztf,fz = freqz(b,a,2048,Fs);
使用绘图
frf_siso=vec(frf[:,1,1])
ztf_siso=vec(ztf[:,1,1])
情节(f,20*log10.(abs。(frf_siso)。+1e-12),label="FRF",grid=true)
阴谋!(fz*Fs,20*log10.(abs。(ztf_siso)。+1e-12),标签="ZTF")
伊利姆斯!((-60, 40))

我们来估计给定振荡模式的固有频率和衰减系数。
fn,dr,ms,ofrf = modalfit(frf,f,Fs,1,FitMethod="PP",out=:data)
println("fn - ",fn[1])
println("dr - ",dr[1])
fn - 0.15912870854643102
dr - 0.0054516425536509875
让我们比较自然频率与 ,这是无阻尼系统的理论值。
theo = 1/(2*pi)
0.15915494309189535
算法
复指数的最小二乘法
Details
复指数最小二乘法计算每个频率响应对应的脉冲响应,并使用Prony方法用一组复阻尼正弦近似响应。 采样的衰减正弦可以表示为
哪里
-
-采样率;
-
-正弦波的频率;
-
-阻尼系数;
-
和 -正弦波的振幅和相位。
成员名单 它们被称为_amplitudes_,并且 —poles。 Proni方法表示离散函数 以叠加的形式 mod(因此, 振幅和极点):
极点是具有系数的多项式的根 , , …, :
系数是使用形式的自回归模型找到的 计数从 :
为了找到极点,算法使用函数 根. 一旦极点已知,可以通过计算极点对数的虚部和实部来确定频率和阻尼系数。 最后一步是找到振幅并使用以下方法重建脉冲响应
下面的简单实现抓住了过程的本质:
import EngeeDSP.Functions: hankel, roots
N = 4
L = 2 * N
h = rand(L)
c = -hankel(h[1:N], h[L-N+1:L]) \ h[N+1:L]
x = roots([1; reverse(c)])
V = ComplexF64[x[j]^(i-1) for i in 1:L, j in 1:N]
hrec = V * (V \ h[1:L])
result = sum(h - hrec)
0.006229773214838086 + 9.05157097882403e-17im
系统也可以这样构造,使得它包含来自几个频率特性的样本,并使用最小二乘法求解。