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)

Используйте итеративный алгоритм 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)

Сгенерируйте два вектора, 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)

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

свернуть все

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

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

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

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

Взвешивание факторов в виде вектора. wt вектор из взвешивания факторов, который является той же длиной как w.

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

Количество итераций в алгоритме поиска в виде положительного действительного скаляра. 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 \in

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 уделяет меньше внимания высоким частотам.

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

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

Ссылки

[1] Леви, E. C. “Комплексный Curve Fitting”. Сделка IRE на Автоматическом управлении. Издание AC-4, 1959, стр 37–44.

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

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

| | |

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