双线性变换比较

信息处理 傅里叶变换 z变换 双线性变换
2022-02-23 19:27:47

如果我有传递函数系数,
我可以分析 s 平面和/或 z 平面中的传递函数。

如果我想证明 z-plane 和 s-plane 响应是等效的

是否可以使用频率扭曲关系
在代码中其他未使用的变量 wz​​ 中提供
来描绘 s 平面中的 z 平面图,反之亦然
,以使两者完全匹配?

提供的matlab代码:

[未提供实际滤波器系数。]

%% Input

A.s.cf = [ 0 0 0 0 1 ];
B.s.cf = [ 1 2 3 4 5 ];

T.z   = 2.5e-05;
f_z   = 1/T.z;
f_nyq = f_z / 2;

%% Processing: Matlab SP toolbox
%{
H.s.tf = tf ( A.s.cf, B.s.cf       );
H.z.tf = c2d( H.s.tf, T.z,   'zoh' );
%}

%% Processing: From scratch:
f.s = logspace(-2, +6, 5e3).';
w.s = 2*pi*f.s;
s.s = 1j * w.s;

z.z = exp( 1j * w.s * T.z);

w.z = 2/T.z * atan( w.s * T.z/2 );


switch 0
  case 0; s2z = 1/T.z * log(z.z);
  case 1; s2z = 2/T.z * (z.z-1)./(z.z+1);
end

A.s.jw = s.s.^4 * A.s.cf(1) ...
       + s.s.^3 * A.s.cf(2) ...
       + s.s.^2 * A.s.cf(3) ...
       + s.s.^1 * A.s.cf(4) ...
       + s.s.^0 * A.s.cf(5) ; %

B.s.jw = s.s.^4 * B.s.cf(1) ...
       + s.s.^3 * B.s.cf(2) ...
       + s.s.^2 * B.s.cf(3) ...
       + s.s.^1 * B.s.cf(4) ...
       + s.s.^0 * B.s.cf(5) ; %


A.z.jw = s2z.^4 * A.s.cf(1) ...
       + s2z.^3 * A.s.cf(2) ...
       + s2z.^2 * A.s.cf(3) ...
       + s2z.^1 * A.s.cf(4) ...
       + s2z.^0 * A.s.cf(5) ; %

B.z.jw = s2z.^4 * B.s.cf(1) ...
       + s2z.^3 * B.s.cf(2) ...
       + s2z.^2 * B.s.cf(3) ...
       + s2z.^1 * B.s.cf(4) ...
       + s2z.^0 * B.s.cf(5) ; %

H.s.jw = A.s.jw ./ B.s.jw;
H.z.jw = A.z.jw ./ B.z.jw;

如果我绘制两者,
则任一平面的响应都会不同
(如预期的那样)。

%% [Plot]: Setup
p = 0;

%% [Plot]: S plane
p = p+1;
figure(p) 

% S plane: Magnitude
subplot(2,1,1)
semilogx(w.s, 20 * log10( abs(H.s.jw) ), '.')

title('Bode [From Scratch]')
ylabel('Mag [dB]')
xlabel('w.s [rad/s]')

axis( [ 1e+3 1e+6 -150 +0] )
grid minor

% S Plane: Phase
subplot(2,1,2)
semilogx(w.s, angle( H.s.jw ) * 180/pi, '-')
hold on
semilogx( [ 2*pi*1e-2 2*pi*1e+6 ], [ -180 -180 ], 'k')
semilogx( [ 2*pi*1e-2 2*pi*1e+6 ], [ +180 +180 ], 'k')
hold off

ylabel('Ang [deg]')
xlabel('w.s [rad/s]')

axis( [ 1e+3 1e+6 -200 +200] )
grid minor

%% [Plot]: Z Plane
p = p+1;
figure(p)

% Z Plane: Magnitude
subplot(2,1,1)
semilogx(w.z, 20 * log10( abs(H.z.jw) ), '.')
hold on
semilogx([2*pi*f_nyq 2*pi*f_nyq], [-50 +50], 'k-')
hold off

title('Bode [From Scratch]')
ylabel('Mag [dB]')
xlabel('w.z [rad/s]')

axis( [1e+3 1e+6 -50 0] )
grid minor

% Z Plane: Phase
subplot(2,1,2)
semilogx(w.z, angle( H.z.jw ) * 180/pi, '-')
hold on
semilogx( [ 2*pi*1e-2  2*pi*1e+6 ], [ -180 -180 ], 'k')
semilogx( [ 2*pi*1e-2  2*pi*1e+6 ], [ +180 +180 ], 'k')
semilogx( [ 2*pi*f_nyq 2*pi*f_nyq], [ -180 +180 ], 'k-')
hold off

ylabel('Ang [deg]')
xlabel('w.z [rad/s]')

axis( [1e+3 1e+6 -200 +200] )
grid minor

%% [Plot]: S Plane: Bode

%{
p = p+1;
figure(p)

bode(H.s.tf)
grid minor
%}

%% [Plot]: Z Plane: Bode

%{
p = p+1;
figure(p)

bode(H.z.tf)
grid minor
%}
1个回答

我真的不想通过你的 MATLAB 代码。这就是你想要证明的吗?

为 s 平面上的某个模拟(或“连续时间”)LTI 传递函数,而为某个数字(或“离散时间”) z 平面中的 LTI 传递函数。Ha(s)Hd(z)

Hd(z)=Ha(s)|s=2Tz1z+1

你想证明

Hd(ejω)=Ha(jΩ)|Ω=2Ttan(ω2)

那是你想要证明的吗?