Академический Документы
Профессиональный Документы
Культура Документы
SRNS.RU
моделирование РТУ и С
Лекция 7. Моделирование
линейных звеньев
Преподаватель:
Корогодин Илья
korogodin@srns.ru
Литература
Монаков А.А. Основы
математического
моделирования
радиотехнических систем.
Учебное пособие. – СПб.:
ГУАП, 2005. – 100с.
А.Б.Сергиенко.
Signal Processing Toolbox –
обзор:
http://matlab.exponenta.ru/sig
nalprocess/book2/index.php
Литература
Ричард Лайонс - Цифровая
обработка сигналов /
Understanding Digital Signal
Processing, 2006
Глава 5. Фильтры с
импульсной характеристикой
конечной длины
Глава 6. Фильтры с
импульсной характеристикой
бесконечной длины
t
1
u ( t ) = i ( t ) rC + ∫ i ( t ) dt
C
( (
i = I s exp u
nV ) − 1)
0
K ( p ) ∑α i S i = ∑α i K ( p ) S i
Коэффициент передачи
Линейное звено описывается дифуром:
( M ) t + ... + a y (1) t + a y t = b x( N ) t + ... + b x(1) t + b x t
aM y () 1 () 0 () N () 1 () 0 ()
jω t
Нам достаточно научиться его решать для воздействия x ( t ) = e ,
а потом воспользоваться преобразованием Фурье и линейностью
jω t
Решение лежит на поверхности - y ( t ) = Ue
ɺ :
( jω ) M ɺ jωt + ... + ( jω ) a Ue
aM Ue ɺ jωt , + a Ue
ɺ jωt
1 0
откуда
( jω ) bN + ... + ( jω ) b1 , +b0
N
Uɺ = Uɺ ( jω ) =
( jω ) M
aM + ... + ( jω ) a1 + a0
Коэффициент передачи
Нетрудно заметить, что в этом случае
y ( t ) = Ux
ɺ (t )
Да это же не только комплексная амплитуда,
но ещё и коэффициент передачи (transfer function)!
Обозначим s = jω
bN s N + ... + b1 s + b0
H ( s ) = Uɺ ( s ) =
aM s M + ... + a1 s + a0
y f ( s ) = H ( s ) x f ( s ) , y f ( s ) = f { y ( t )} , x f ( s ) = f { x ( t )}
Коэффициент передачи
dy ( t )
x(t ) = i (t ) R + y (t ), i ( t ) = C ⇒
dt
dy ( t )
RC + y (t ) = x(t ) ⇒
dt
a1 = RC ; a0 = 1; b0 = 1; ⇒
1
H (s) =
RC ⋅ s + 1
В MATLAB есть функции
для работы с линейными
звеньями
RC = 1e-6;
a = [RC 1];
b = [1];
freqs(b, a);
Коэффициент передачи
clear all; clc; close all;
RC = 1e-6;
figure(1); subplot(2,1,1);
plot(f/1e6, 20*log10(abs(H)));
subplot(2,1,2);
plot(f/1e6, rad2deg(unwrap(angle(H))));
Функция unwrap
Импульсная характеристика
Умножению в частотной области соответствует свертка во временной
+∞
y (t ) = ∫ h (τ ) x ( t − τ ) dτ Для нашей RC-цепи и П-импульса:
−∞
+∞
1
h (t ) = ∫ H ( jω ) e jωt d ω
2π
−∞
σ + j∞
1
А можно и через преобразование Лапласа: h (t ) = ∫ H ( s ) e st ds
2π j
σ − j∞
sys = tf(b,a);
[y,t] = impulse(sys); % Без ‘[y, t] =‘
% сразу построит график
H (s) = k
( s − z N )( s − z N −1 ) ⋅ ... ⋅ ( s − z1 )
( s − pM )( s − pM −1 ) ⋅ ... ⋅ ( s − p1 )
b
здесь k = N - коэффициент усиления,
aM
zi - нули, pi - полюсы.
( )
Re pi < 0 ⇔ устойчивость
Цифровые фильтры
Всё это здорово, наглядно и удобно описывает аналоговые системы,
но нам же нужно уметь их моделировать – получать отклик на сигнал
( ) ( )
xk = x tk → yk ≈ y tk
Нужна модель, для которой это приближенное равенство
выполняется как можно точнее.
( )
yk = yk −1 + 0.3 ⋅ xk − yk −1 = 0.7 ⋅ yk −1 + 0.3 ⋅ xk - ФНЧ
a = [1 -0.7]; b = [0.3];
h = impz(b, a, 15);
figure(1); stem(h);
xlabel('k'); ylabel('h_k'); grid on
Свертка: conv(), deconv()
Т.к. система линейная, то
Можем воспользоваться
нынешний выход есть сумма
реакций: функциями conv и deconv
k clear all; close all; clc
yk = ∑ xn hk − n
a = [-0.7]; b = [0.3];
n =−∞
xh = [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
km = 2:length(xh); h(1) = b(1)*xh(1);
for k = km
h(k) = -a(1)*h(k-1) + b(1)*xh(k);
end
x = [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1];
y = conv(x, h);
xdec = deconv(y, h);
figure(1)
stem(1:length(y), y); hold on
stem(1:length(xdec), xdec, 'r'); hold off
grid on; legend('y', 'x'); xlabel('k')
Transfer function
Вспоминаем РЦС, z-преобразование и его свойства:
+∞ k
yk = ∑ xn hk − n = ∑ xn hk − n ⇔
n =−∞ n =−∞
∞
⇔ Y ( z ) = H ( z ) X ( z ), H ( z ) = ∑ k
h z −k
k =0
Или из уравнения:
yk + a1 yk z −1 + ... + aM yk z − M = b0 xk + b1 xk z −1 + ... + bN xk z − N
b0 + b1 z −1 + ... + bN z − N
H ( z) =
1 + a1 z −1 + ... + aM z − M
Связь с преобразованием Фурье:
∞
− jωT
H ( jω ) = H ( z ) jωT = ∑ k
h e H ( z) =
0.3
z =e
k =0 1 − 0.7 z −1
Transfer function
clear all; close all; clc
∞
− jωT
H ( jω ) = H ( z ) ∑ k
a = [-0.7]; b = [0.3];
jωT = h e
z =e
xр = [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; k =0
km = 1:length(x);
for k = km yk = 0.7 ⋅ yk −1 + 0.3 ⋅ xk →
if k > 1
0.3
h(k) = -a(1)*h(k-1) + b(1)*xh(k);
H ( z) =
else
h(k) = b(1)*xh(k);
1 − 0.7 z −1
end
end
T = 0.001; f = 0:(1/T/100):(1/T);
z = exp(1i*2*pi*f*T);
H2 = 0;
for k = km
H2 = H2 + h(k) * z.^-k;
end
a = [1 -0.7]; b = [0.3];
H = freqz(b, a);
T = 0.001;
f = ( (1:length(H)) - 1)/ length(H)*1/T/2 ;
a = [1 -0.7]; b = [0.3];
x = [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0];
y = filter(b, a, x);
figure(1)
stem(1:length(y), y); hold on
stem(1:length(x), x, 'r'); hold off
grid on; legend('y', 'x'); xlabel('k')
Коэффициенты ПФ – строки,
Нули и полюсы
нули/полюсы - столбцы
H (z) = k
(1 − z1 z −1 )(1 − z2 z −1 ) ⋅ ... ⋅ (1 − z N z −1 )
clear all; close all; clc (1 − p1 z −1 )(1 − p2 z −1 ) ⋅ ... ⋅ (1 − pM z −1 )
a = [1 -0.7]; b = [0.3];
[z, p, k] = tf2zp(b, a);
% zplane(b, a);
zplane(z, p);
pi < 1 ⇔ устойчивость
Метод инвариантности h(t)
Реализовывать цифровые фильтры в MATLAB научились, вернемся
к задаче синтеза цифрового фильтра по аналоговому прототипу
( ) ( )
xk = x tk → yk ≈ y tk ; a sj , b sj → a zj , b zj − ???
2 1 − z −1
s= Это преобразование и
T 1+ z −1
называется билинейным
Метод билинейного
Полуплоскость переменной s
отображается в окружность
преобразования
единичного радиуса в плоскости переменной z.
s = jωs , z = e jΩ = e jωz T →
2 ωz T
→ ωs = tg
T 2
Можно заранее скомпенсировать
в аналоговом прототипе
2 ωs T
ωs′ = tg
T 2
Метод билинейного
Пример. Смоделируем
RC цепь, что использовали ранее.
преобразования
1 1 1 + z −1
H (s) = → H ( z) = −1
=
RC ⋅ s + 1 2 1− z 2 2 −1
RC ⋅ +1 1 + RC ⋅ + 1 − RC ⋅ z
T 1+ z −1 T T
clear all; clc; close all;
2 RC z 2 RC
RC = 1e-6; b0z = 1, b1z = 1, a0z = 1 + , a1 = 1 −
T = RC/3; T T
as = [RC 1]; bs = [1];
[Hs, w] = freqs(bs, as);
figure(1)
plot(w/2/pi/1000, abs(Hs), ...
((1:length(Hz)) - 1)/ length(Hz) *
1/T/2/1000, abs(Hz))
xlabel('f, kHz'); ylabel('|H|')
legend('|H(s)|', '|H(z)|'); grid on
Метод замены
Если 1/s – интегратор, то
s – дифференциатор!
дифференциалов
1 − z −1
Итого, в качестве s должны использовать: s=
T
Не стоит использовать когда:
- нули передаточной функции аналогового прототипа имеют
вещественную часть больше удвоенной частоты дискретизации
- нулей у передаточной функции аналогового прототипа нет
Метод замены
Пример. Смоделируем RC цепь.
дифференциалов
1 1 1
H (s) = → H ( z) = =
RC ⋅ s + 1 1 − z −1 +
RC RC −1
−
RC ⋅ +1 1
T T
z
T
…
az = [1+RC/T, -RC/T]; bz = [1]; RC z RC
b0z = 1, a0z = 1 + , a1 = −
Hz = freqz(bz, az); T T
…
Ограничение ИХ
При использовании перечисленных методов мы можем
ограничивать длительность импульсной характеристики.
Получаем при этом КИХ-фильтр со всеми его плюсами. НО.
Но это же применение
прямоугольного окна!
+∞
yk = ∑ xn hk − n wk − n
n =−∞
⇔ Y ( z ) = X ( z ) ( H ( z ) *W ( z ) )
А значит и
коэффициент передачи
свернется со спектром окна!