invfreqs

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

Синтаксис

[b,a] = invfreqs(h,w,n,m)
[b,a] = invfreqs(h,w,n,m,wt)
[b,a] = invfreqs(h,w,n,m,wt,iter)
[b,a] = invfreqs(h,w,n,m,wt,iter,tol)
[b,a] = invfreqs(h,w,n,m,wt,iter,tol,'trace')
[b,a] = invfreqs(h,w,'complex',n,m,...)

Описание

invfreqs является обратной операцией freqs. Это находит непрерывно-разовую передаточную функцию, которая соответствует данной комплексной частотной характеристике. С лабораторной аналитической точки зрения invfreqs полезен в преобразовании значения и данных о фазе в передаточные функции.

[b,a] = invfreqs(h,w,n,m) возвращает действительный числитель и векторы коэффициентов знаменателя 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)

чья комплексная частотная характеристика дана в векторном h в точках частоты, заданных в векторном w. Скаляры n и m задают желаемые порядки полиномов знаменателя и числителя.

Длина h должна совпасть с длиной w. invfreqs использует conj(h) в -w, чтобы гарантировать соответствующую симметрию частотного диапазона для действительного фильтра.

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

[b,a] = invfreqs(h,w,n,m,wt,iter) и

[b,a] = invfreqs(h,w,n,m,wt,iter,tol) предоставьте превосходящий алгоритм, который гарантирует устойчивость получившейся линейной системы и ищет лучшую подгонку с помощью числовой, итеративной схемы. Параметр iter говорит invfreqs заканчивать итерацию, когда решение сходилось, или после итераций iter, какой бы ни на первом месте. invfreqs задает сходимость как появление, когда норма (измененного) вектора градиента является меньше, чем tol, где tol является дополнительным параметром, это принимает значение по умолчанию к 0,01. Чтобы получить вектор веса из всех единиц, использовать

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

[b,a] = invfreqs(h,w,n,m,wt,iter,tol,'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)

Советы

При создавании моделей высшего порядка с помощью высоких частот важно масштабировать частоты, делящиеся на фактор, такие как половина самой высокой частоты, существующей в 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 уделяет меньше внимания высоким частотам.

Начальник (“ошибка на выходе”) алгоритм использует ослабленный метод Ньютона Гаусса для итеративного поиска [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