主要内容

tfestimate

R2026b

传递函数估计

描述

txy = tfestimate(x,y) 求在一组频率上计算的输入信号 x 和输出信号 y 之间的传递函数估计。

  • 如果 x 和 y 都是向量,则它们的长度必须相同。

  • 如果其中一个信号是矩阵而另一个是向量,则向量的长度必须等于矩阵的行数。该函数会对该向量进行扩展,并返回由逐列传递函数估计组成的矩阵。

  • 如果 x 和 y 是具有相同行数但不同列数的矩阵,则 txy 是组合所有输入和输出信号的多输入/多输出 (MIMO) 传递函数。txy 是三维数组。如果 x 有 m 列,y 有 n 列,则 txy 有 n 列和 m 页。有关详细信息,请参阅传递函数。

  • 如果 x 和 y 是大小相等的矩阵,则 tfestimate 按列运算:txy(:,n) = tfestimate(x(:,n),y(:,n))。要获得 MIMO 估计,请将 "mimo" 追加到参量列表。

txy = tfestimate(x,y,window) 使用 window 将 x 和 y 划分为若干段并执行加窗。

示例

txy = tfestimate(x,y,window,nOverlap) 在相邻段之间使用 nOverlap 个采样的重叠。

txy = tfestimate(x,y,window,nOverlap,nfft) 使用 nfft 个采样来计算离散傅里叶变换。

txy = tfestimate(___,"mimo") 为矩阵输入计算 MIMO 传递函数。此语法可以包括上述语法中输入参量的任意组合。

[txy,w] = tfestimate(___) 返回归一化频率向量 w,在这些频率处估计传递函数。

[txy,f] = tfestimate(___,Fs) 返回频率向量 f,以采样率 Fs 表示,在这些频率处估计传递函数。Fs 必须为 tfestimate 的第六个数值输入。要输入采样率并仍使用前面可选参量的默认值,请将这些参量指定为空,即 []。

示例

[txy,w] = tfestimate(x,y,window,nOverlap,w) 返回在 w 中指定的归一化频率处的传递函数估计。

[txy,f] = tfestimate(x,y,window,nOverlap,f,Fs) 返回在 f 中指定的频率处的传递函数估计。

示例

[___] = tfestimate(x,y,___,freqRange) 返回在 freqRange 指定的频率范围内的传递函数估计。freqRange 的有效选项是 "onesided"、"twosided" 和 "centered"。

[___] = tfestimate(___,Name=Value) 使用名称-值参量指定附加选项。选项包括传递函数估计器和用于绘制传递函数估计的目标父容器。您可以将这些参量添加到任何先前的输入语法中。

示例

不带输出参量的 tfestimate(___) 在当前图窗窗口中绘制传递函数估计。

示例

示例

全部折叠

计算并绘制两个序列 x 和 y 之间的传递函数估计。序列 x 由高斯白噪声组成。y 是通过使用归一化截止频率为 0.2π 弧度/采样点的 30 阶低通滤波器对 x 进行滤波而得到的。使用矩形窗设计该滤波器。为传递函数估计指定 500 Hz 的采样率和长度为 1024 的汉明窗。

h = fir1(30,0.2,rectwin(31));
x = randn(16384,1);
y = filter(h,1,x);

fs = 500;
tfestimate(x,y,1024,[],[],fs)

Figure contains an axes object. The axes object with title Transfer Function Estimate Using Welch Periodogram, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

验证传递函数逼近滤波器的频率响应。

freqz(h,1,[],fs)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (Hz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

通过在变量中返回传递函数估计并以 dB 为单位绘制其绝对值,可获得相同结果。

[Txy,f] = tfestimate(x,y,1024,[],[],fs);

plot(f,mag2db(abs(Txy)))

Figure contains an axes object. The axes object contains an object of type line.

估计简单单输入/单输出系统的传递函数,并将其与定义进行比较。

一维离散时间振荡系统由单位质点 m(以千克为单位)通过一根单位弹性常量弹簧连接到墙壁构成。传感器以 a Hz 对质量的加速度 Fs=1 取样。阻尼器通过向质量施加与速度成正比的力来阻碍质量的运动,阻尼常量为 b=0.01 kg/s。

Mass-spring-damper system, with a mass of 1 kilogram, a spring with elastic constant k=1 Newton per meter, and a damper with damping constant b=0.01 kilograms per second. The displacement of the mass is r (in meters).

生成 2000 个时间采样。定义采样间隔 Δt=1/Fs。

Fs = 1;
dt = 1/Fs;
N = 2000;
t = dt*(0:N-1);
b = 0.01;

该系统可由状态空间模型描述

x(k+1)=Ax(k)+Bu(k),y(k)=Cx(k)+Du(k),

其中 x=[rv]T 是状态向量,r 和 v 分别是质量的位置和速度,u 是驱动力,y=a 是测量输出。状态空间矩阵为

A=exp(AcΔt),B=Ac-1(A-I)Bc,C=[-1-b],D=1,

I 是 2×2 单位矩阵,连续时间状态空间矩阵为

Ac=[01-1-b],Bc=[01].

Ac = [0 1;-1 -b];
A = expm(Ac*dt);

Bc = [0;1];
B = Ac\(A-eye(size(A)))*Bc;

C = [-1 -b];
D = 1;

质量在测量间隔的一半时间内由随机输入驱动。使用该状态空间模型计算系统从全零初始状态开始的时间演进。以时间函数形式绘制质量的加速度。

rng("default")

u = zeros(1,N);
u(1:N/2) = randn(1,N/2);

y = 0;
x = [0;0];
for k = 1:N
    y(k) = C*x + D*u(k);
    x = A*x + B*u(k);
end

plot(t,y)

Figure contains an axes object. The axes object contains an object of type line.

估计系统传递函数以频率的函数形式的变化。使用 2048 个 DFT 点,并指定形状因子为 15 的凯塞窗。使用相邻段之间重叠的默认值。

nfs = 2048;
wind = kaiser(N,15);

[txy,ft] = tfestimate(u,y,wind,[],nfs,Fs);

离散时间系统的频率响应函数可以表示为系统时域传递函数的 Z 变换,并在单位圆上计算。验证由 tfestimate 计算的估计与此定义一致。

[b,a] = ss2tf(A,B,C,D);

fz = 0:1/nfs:1/2-1/nfs;
z = exp(2j*pi*fz);
frf = polyval(b,z)./polyval(a,z);

plot(ft,mag2db(abs(txy)))
hold on
plot(fz,mag2db(abs(frf)))
hold off
grid
ylim([-60 40])

Figure contains an axes object. The axes object contains 2 objects of type line.

使用 tfestimate 的内置功能绘制估计。

tfestimate(u,y,wind,[],nfs,Fs)

Figure contains an axes object. The axes object with title Transfer Function Estimate Using Welch Periodogram, xlabel Frequency (mHz), ylabel Magnitude (dB) contains an object of type line.

估计一个多输入/多输出 (MIMO) 系统的传递函数。

两个质量连接到一个弹簧,两侧各有一个阻尼器,形成理想的一维离散时间振荡系统。系统输入数组 u 由施加给质量的随机驱动力组成。系统输出数组 y 包含观测到的质量相对于其初始参考位置的位移。系统以 Fs 为 40 Hz 的速率采样。

MIMO one-dimensional mass-spring-damper system. The damper and the spring form a parallel-connected section that connect to a wall or to a mass. From left to right: left wall, a damper-spring section, mass m1, a damper-spring section, a mass m2, a damper-spring section, right wall. m1=1 kilogram, m2=mu kilograms, the springs have elastic constants k Newton per meter, and the dampers have damping constant b kilograms per second. The displacements of the masses m1 and m2 are r1 and r2, respectively, in meters.

加载包含 MIMO 系统输入、系统输出和采样率的数据文件。示例 Frequency-Response Analysis of MIMO System分析生成此示例所用数据的系统。

load MIMOdata Fs u y

使用系统数据和函数 tfestimate 估计并绘制系统的频域传递函数。将信号划分成长度为 5000 个采样的段,相邻段之间叠加 50%。对每个段应用一个汉宁窗,并使用 8192 个频率点计算信号段的离散傅里叶变换。选择 "mimo" 选项以生成所有四个传递函数。

g = hann(5000);
nfft = 8192;
ol = 2500;

[tXY,ft] = tfestimate(u,y,g,ol,nfft,Fs,"mimo");

tiledlayout flow
for jk = 1:2
    for kj = 1:2
        nexttile
        plot(ft,mag2db(abs(tXY(:,jk,kj))))
        grid on
        ylim([-120 0])
        title("Input "+jk+", Output "+kj)
        xlabel("Frequency (Hz)")
        ylabel("Magnitude (dB)")
    end
end

Figure contains 4 axes objects. Axes object 1 with title Input 1, Output 1, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line. Axes object 2 with title Input 1, Output 2, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line. Axes object 3 with title Input 2, Output 1, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line. Axes object 4 with title Input 2, Output 2, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

创建一个 UI 图窗窗口,并添加坐标区和面板容器。

uif = uifigure(Position=[100 100 720 540]);
ax = uiaxes(uif,Position=[5 280 450 240]);
p = uipanel(uif,Position=[180 5 520 270], ...
    Title="Transfer-Function Estimate in Panel Container", ...
    BackgroundColor="white");

在坐标区中绘制系统的四个传递函数估计,并在面板容器中绘制系统的每个输入-输出对。(自 R2026a 开始提供)

tfestimate(u,y,g,ol,nfft,Fs,"mimo",Parent=ax)
legend(ax,"Input "+[1 2]+", Output "+[1 2]',Location="best")

tfestimate(u,y,g,ol,nfft,Fs,Parent=p)

Figure contains 2 axes objects and another object of type uipanel. Axes object 1 with title Transfer Function Estimate Using Welch Periodogram, xlabel Frequency (Hz), ylabel Magnitude (dB) contains 2 objects of type line. Axes object 2 with title Transfer Function Estimate Using Welch Periodogram, xlabel Frequency (Hz), ylabel Magnitude (dB) contains 4 objects of type line. These objects represent Input 1, Output 1, Input 1, Output 2, Input 2, Output 1, Input 2, Output 2.

输入参数

全部折叠

输入信号,指定为向量或矩阵。

示例: cos(pi/4*(0:159))+randn(1,160) 用于指定嵌入高斯白噪声中的正弦波。

数据类型: single | double
复数支持: 是

输出信号,指定为向量或矩阵。

数据类型: single | double
复数支持: 是

窗,指定为整数或者行向量或列向量。使用 window 将信号分成段。

  • 如果 window 是整数,则 tfestimate 将 x 和 y 分成长度为 window 的段,并使用该长度的汉明窗对每个段加窗。

  • 如果 window 是向量,则 tfestimate 将 x 和 y 分成与该向量长度相同的段,并使用 window 对每个段加窗。

如果 x 和 y 的长度无法整除为具有 nOverlap 个重叠采样的整数段,则信号会相应地被截断。

如果您将 window 指定为空,则 tfestimate 使用汉明窗,使得 x 和 y 分成八个段,段之间具有 nOverlap 个重叠采样。

有关可用窗的列表,请参阅加窗法。

示例: hann(N+1) 和 (1-cos(2*pi*(0:N)'/N))/2 都指定长度为 N + 1 的汉宁窗。

数据类型: single | double

重叠采样的数量,指定为正整数。

  • 如果 window 是标量,则 nOverlap 必须小于 window。

  • 如果 window 是向量,则 nOverlap 必须小于 window 的长度。

如果您将 nOverlap 指定为空,则 tfestimate 使用在段之间生成 50% 重叠的数字。

数据类型: double | single

DFT 点数,指定为正整数。如果将 nfft 指定为空,则 tfestimate 将此参量设置为 max(256,2p),其中对于长度为 N 的输入信号,p = ⌈log2 N⌉,并且 ⌈ ⌉ 符号表示向上取整函数。

数据类型: single | double

采样率,指定为正标量。采样率是单位时间内的采样数。如果时间单位是秒,则采样率的单位是赫兹。

  • 如果将 Fs 指定为空数组 [],则 tfestimate 假定输入信号 x 的采样率为 1 Hz。

  • 如果未指定 Fs,则 tfestimate 假定输入信号 x 的采样率为 2π 弧度/采样点。

归一化频率,指定为包含至少两个元素的行向量或列向量。归一化频率的单位为弧度/采样点。

示例: w = [pi/4 pi/2]

数据类型: double | single

频率,指定为包含至少两个元素的行向量或列向量。频率的单位为每单位时间的周期数。单位时间由采样率 fs 指定。如果 fs 的单位是采样/秒,则 f 的单位是 Hz。

示例: fs = 1000; f = [100 200]

数据类型: double | single

传递函数估计的频率范围,指定为 "onesided"、"twosided" 或 "centered" 之一。对于实数值信号,默认值为 "onesided";对于复数值信号,默认值为 "twosided"。

  • "onesided" - 返回两个实数值输入信号 x 和 y 之间传递函数的单边估计。如果 nfft 是偶数,则 txy 有 nfft/2 + 1 行,并在区间 [0,π] 弧度/采样点上计算。如果 nfft 是奇数,则 txy 有 (nfft + 1)/2 行,区间为 [0,π) 弧度/采样点。如果指定 Fs,则对于偶数 nfft,对应区间为 [0,Fs/2] 周期/单位时间;对于奇数 nfft,对应区间为 [0,Fs/2) 周期/单位时间。

  • "twosided" - 返回两个实数值或复数值输入信号 x 和 y 之间传递函数的双边估计。在这种情况下,txy 具有 nfft 行,并在区间 [0,2π) 弧度/采样点上计算。如果您指定 Fs,则区间为 [0, Fs) 周期/单位时间。

  • "centered" - 返回两个实数值或复数值输入信号 x 和 y 之间传递函数的居中双边估计。在这种情况下,txy 具有 nfft 行,对于偶数 nfft,在区间 (–π,π] 弧度/采样点上计算;对于奇数 nfft,在 (–π,π) 弧度/采样点上计算。如果指定 Fs,则对于偶数 nfft,对应区间为 (–Fs/2, Fs/2] 周期/单位时间;对于奇数 nfft,对应区间为 (–Fs/2, Fs/2) 周期/单位时间。

如果您指定频率向量 w 或 f 以及 freqRange 作为输入,则 tfestimate 会忽略 freqRange。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: txy = tfestimate(x,y,Estimator="H1",Parent=h) 计算具有输入 x 和输出信号 y 的系统的传递函数估计,使用 "H1" 估计器,并将结果绘制到目标父容器 h 上

传递函数估计器,指定为 "H1" 或 "H2"。

  • 当噪声与输入信号不相关时,使用 "H1"。

  • 当噪声与输出信号不相关时,使用 "H2"。在这种情况下,输入信号的数量必须等于输出信号的数量。

有关详细信息,请参阅传递函数。

自 R2026a 起

目标父容器,指定为 Axes 对象、UIAxes 对象或 Panel 对象。

如果指定 Parent,则无论您是否带输出参量调用 tfestimate 函数,该函数都会在指定的目标父容器上绘制传递函数估计。

有关 MATLAB® 图形中目标容器和父子关系的详细信息,请参阅图形对象层次结构。有关在 UIAxes 和 Panel 对象中使用 Parent 设计 App 的详细信息,请参阅Plot Spectral Representations of Signal in App Designer。

输出参量

全部折叠

传递函数估计,以向量、矩阵或三维数组形式返回。

归一化频率,以实数值列向量形式返回。

周期性频率,以实数值列向量形式返回。

详细信息

全部折叠

算法

tfestimate 使用韦尔奇平均周期图方法。有关详细信息,请参阅 pwelch。

参考

[1] Vold, Håvard, John Crowley, and G. Thomas Rocklin. “New Ways of Estimating Frequency Response Functions.” Sound and Vibration. Vol. 18, November 1984, pp. 34–38.

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开