stmcb

Вычислите линейную модель с помощью итерации Steiglitz-McBride

Синтаксис

[b,a] = stmcb(h,nb,na)
[b,a] = stmcb(y,x,nb,na)
[b,a] = stmcb(h,nb,na,niter)
[b,a] = stmcb(y,x,nb,na,niter)
[b,a] = stmcb(h,nb,na,niter,ai)
[b,a] = stmcb(y,x,nb,na,niter,ai)

Описание

Итерация Steiglitz-McBride является алгоритмом для нахождения БИХ-фильтра с предписанным импульсным ответом временного интервала. Это имеет приложения и в проекте фильтра и в системе идентификации (параметрическое моделирование).

[b,a] = stmcb(h,nb,na) находит коэффициенты b и a системы b (z)/a (z) с аппроксимированным импульсным ответом h, точно нули nb, и точно полюса na.

[b,a] = stmcb(y,x,nb,na) находит системные коэффициенты b и a системы, которая, учитывая x, как введено, имеет y, как выведено. x и y должны быть той же длиной.

[b,a] = stmcb(h,nb,na,niter) и

[b,a] = stmcb(y,x,nb,na,niter) используйте итерации niter. Значение по умолчанию для niter равняется 5.

[b,a] = stmcb(h,nb,na,niter,ai) и

[b,a] = stmcb(y,x,nb,na,niter,ai) используйте векторный ai в качестве первоначальной оценки коэффициентов знаменателя. Если ai не задан, stmcb использует выходной аргумент от   [b,ai] = prony (h,0,na) как векторный ai.

stmcb возвращает БИХ-коэффициенты фильтра в длине nb+1 и векторы - строки na+1 b и a. Коэффициенты фильтра упорядочены в убывающих степенях z.

H(z)=B(z)A(z)=b(1)+b(2)z1++b(nb+1)znba(1)+a(2)z1++a(na+1)zna

Примеры

свернуть все

Аппроксимируйте импульсный ответ БИХ-фильтра с системой низшего порядка.

Задайте 6-й порядок Фильтр Баттерворта с нормированной частотой на 3 дБ 0.2π рад/выборка.

d = designfilt('lowpassiir','FilterOrder',6, ...
    'HalfPowerFrequency',0.2,'DesignMethod','butter');

Используйте итерацию Steiglitz-McBride, чтобы аппроксимировать фильтр с системой 4-го порядка.

h = impz(d);
[bb,aa] = stmcb(h,4,4);

Постройте частотные характеристики этих двух систем.

hfvt = fvtool(d,bb,aa,'Analysis','freq');
legend(hfvt,'Butterworth','Steiglitz-McBride')

Диагностика

Если x и y имеют различные длины, stmcb производит это сообщение об ошибке:

Input signal X and output signal Y must 
have the same length.

Алгоритмы

stmcb пытается минимизировать квадратичную невязку между импульсным ответом h b (z) /a (z) и входным сигналом x.

mina,bi=0|x(i)h(i)|2

stmcb выполняет итерации использования двух шагов:

  1. Это предварительные фильтры h и x с помощью 1/a (z).

  2. Это решает систему линейных уравнений для b и использования a \.

stmcb повторяет этот процесс времена niter. Никакая проверка не сделана, чтобы видеть, сходились ли b и коэффициенты a в меньше, чем итерации niter.

Ссылки

[1] Steiglitz, K. и Л. Э. Макбрайд. “Метод для Идентификации Линейных систем”. IEEE® Transactions на Автоматическом управлении. Издание AC-10, 1965, стр 461–464.

[2] Ljung, Lennart. System Identification: Теория для Пользователя. 2-й Выпуск. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999, p. 354.

Смотрите также

| | |

Представлено до R2006a