invfreqs

Идентифицируйте стационарные параметры фильтра из данных частотной характеристики

Описание

пример

[b,a] = invfreqs(h,w,n,m) возвращает векторы вещественных числителей и коэффициентов знаменателя b и a передаточной функции h.

[b,a] = invfreqs(h,w,n,m,wt) взвешивает ошибки подгонки по сравнению с частотой, используя wt.

пример

[b,a] = invfreqs(___,iter) предоставляет алгоритм, который гарантирует стабильность полученной линейной системы путем поиска наилучшей подгонки с помощью числовой итерационной схемы. Этот синтаксис может включать любую комбинацию входных параметров из предыдущих синтаксисов.

[b,a] = invfreqs(___,tol) использует tol решить сходимость итерационного алгоритма.

[b,a] = invfreqs(___,'trace') отображает текстовый отчет о прогрессе итерации.

[b,a] = invfreqs(h,w,'complex',n,m,___) создает сложный фильтр. В этом случае симметрия не применяется, и частота задается в радианах между - π и π.

Примеры

свернуть все

Преобразуйте простую передаточную функцию в данные частотной характеристики, а затем вернитесь к исходным коэффициентам фильтра.

a = [1 2 3 2 1 4];
b = [1 2 3 2 3];

[h,w] = freqs(b,a,64);
[bb,aa] = invfreqs(h,w,4,5)
bb = 1×5

    1.0000    2.0000    3.0000    2.0000    3.0000

aa = 1×6

    1.0000    2.0000    3.0000    2.0000    1.0000    4.0000

bb и aa эквивалентны b и a, соответственно. Однако система нестабильна, потому что aa имеет полюса с положительной реальной деталью. Вид полюсов bb и aa.

zplane(bb,aa)

Figure contains an axes. The axes contains 3 objects of type line.

Используйте итерационный алгоритм invfreqs найти стабильное приближение к системе.

[bbb,aaa] = invfreqs(h,w,4,5,[],30)
bbb = 1×5

    0.6816    2.1015    2.6694    0.9113   -0.1218

aaa = 1×6

    1.0000    3.4676    7.4060    6.2102    2.5413    0.0001

Проверьте, что система стабильна, построив график новых полюсов.

zplane(bbb,aaa)

Figure contains an axes. The axes contains 3 objects of type line.

Сгенерируйте два вектора, mag и phase, которые моделируют величину и данные фазы, собранные в лаборатории. Также сгенерируйте вектор, w, частот.

rng('default')

fs = 1000;
t = 0:1/fs:2;
mag = periodogram(sin(2*pi*100*t)+randn(size(t))/10,[],[],fs);
phase = randn(size(mag))/10;
w = linspace(0,fs/2,length(mag))';

Использование invfreqs для преобразования данных в передаточную функцию в непрерывном времени. Постройте график результата.

[b,a] = invfreqs(mag.*exp(1j*phase),w,2,2,[],4);

freqs(b,a)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Входные параметры

свернуть все

Частотная характеристика, заданная как вектор.

Угловые частоты, на которых h вычисляется, задается как вектор.

Желаемый порядок числителя и полиномов знаменателя, заданный как положительные целочисленные скаляры.

Типы данных: single | double

Весовые коэффициенты, заданные как вектор. wt - вектор весовых коэффициентов, имеющий ту же длину, что и w.

Типы данных: single | double

Количество итераций в поисковом алгоритме, заданное как положительный действительный скаляр. The iter параметр подсказывает invfreqs чтобы закончить итерацию, когда алгоритм сходится к решению, или после iter итерации, в зависимости от того, что происходит раньше.

Допуск, заданный как скаляр. invfreqs определяет сходимость как возникающую, когда норма (измененного) вектора меньше tol.

Чтобы получить вектор веса всех таковых, используйте

invfreqs(h,w,n,m,[],iter,tol)

Выходные аргументы

свернуть все

Коэффициенты передаточной функции, возвращенные как векторы. Выразите передаточную функцию с точки зрения b и a как

H(s)=B(s)A(s)=b(1)sn+b(2)sn1++b(n+1)a(1)sm+a(2)sm1++a(m+1)

Пример: b = [1 3 3 1]/6 и a = [3 0 1 0]/3 задайте фильтр Баттерворта третьего порядка с нормализованной частотой 3 дБ 0,5 π рад/выборка.

Типы данных: double | single
Поддержка комплексного числа: Да

Совет

При построении моделей более высокого порядка, использующих высокие частоты, важно масштабировать частоты, деля их на множитель, такой как половина самой высокой частоты, присутствующей в w, для получения хорошо обусловленных значений a и b. Это соответствует перемасштабированию времени.

Алгоритмы

По умолчанию invfreqs использует метод ошибки уравнения, чтобы идентифицировать лучшую модель из данных. Это находит b и a в

minb,ak=1nwt(k)|h(k)A(w(k))B(w(k))|2

путем создания системы линейных уравнений и решения их с помощью MATLAB® \ оператор. Здесь A (w (k)) и B (w (k)) являются преобразованиями Фурье полиномов a и b, соответственно, на частотной w (k), и n является количеством частотных точек (длина h и w). Этот алгоритм основан на Леви [1]. В литературе было предложено несколько вариантов, где функция взвешивания wt придает меньше внимания высоким частотам.

Алгоритм верхнего уровня («output-error») использует демпфированный метод Гаусса-Ньютона для итерационного поиска [2] с выходом первого алгоритма в качестве начальной оценки. Это решает прямую задачу минимизации взвешенной суммы квадратичной невязки между фактической и желательной точками частотной характеристики.

minb,ak=1nwt(k)|h(k)B(w(k))A(w(k))|2

Ссылки

[1] Levi, E. C. «Complex-Curve Fitting». IRE Trans. on Automatic Control. Том AC-4, 1959, с. 37-44.

[2] Деннис, Дж. Э., младший, и Р. Б. Шнабель. Численные методы для без оптимизации без ограничений и нелинейных уравнений. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1983.

См. также

| | |

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