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 \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