|
|
  |
IIR фильтры с линейной фазой, Кому нужны? |
|
|
|
Feb 20 2013, 11:49
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
А просто коэффициенты в плавающей точке без инт16 и симуликов не проще было выложить? Цитата voloda: Нелинейность фазы в полосе пропускания - не более 10 градусов Нелинейность фазы это что? Отклонение от линейной? Тогда что берется за образец? Лучше приводить х-гу гвз. Это более информативно.
Сообщение отредактировал thermit - Feb 20 2013, 13:03
|
|
|
|
|
Feb 21 2013, 12:20
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 4-12-09
Из: Н. Новгород
Пользователь №: 54 053

|
Цитата(thermit @ Feb 20 2013, 15:49)  А просто коэффициенты в плавающей точке без инт16 и симуликов не проще было выложить? Коэффициенты изначально рассчитываются в целых числах заданной разрядности. Поэтому - нет, не проще. Симулинк нагляден. Даже в Матлабе такого не создать. ИМХО, конечно. В какой среде вы хотели бы получить модель? Цитата(thermit @ Feb 20 2013, 15:49)  Нелинейность фазы это что? Отклонение от линейной? Тогда что берется за образец? Да. В качестве образца в модели считается фаза по формуле pi=F*2.899 . F- частота входного сигнала, pi - фаза Цитата(thermit @ Feb 20 2013, 15:49)  Лучше приводить х-гу гвз. Это более информативно. Можно и гвз, Вы правы. Фазовые характеристики проще сравнивать, например, с искажениями, вносимыми АЦП. Одно и то же отклонение гвз от константы на разных частотах вызывает разные отклонения фазы от линейной. Поэтому выложил фазу. Теория. Новый метод проектирования цифровых БИХ фильтров позволяет: 1) Рассчитывать БИХ-фильтры с линейной (с точностью до 1-2х градусов) ФЧХ в полосе пропускания; 2) Рассчитывать коэффициенты фильтров изначально в целочисленной арифметике (а не в числах с плавающей точкой с последующим округлением). 3) Проверять устойчивость на всех этапах проектирования. А не только после завершения расчетов. Наиболее распространенным методом проектирования БИХ – фильтров на сегоднешний день является метод билинейного преобразования. В процессе расчета фильтров этим методом, АЧХ фильтра аппроксимируется с использованием специальных функций. Существуют аппроксимации по Баттерворту, по Чебышеву, и эллиптическая аппроксимация. Данный метод позволяет управлять только АЧХ проектируемого фильтра, в то время как ФЧХ фильтра при таком подходе не может быть задана. ФЧХ фильтра, спроектированного билинейным методом, существенно (до сотен градусов) отличается от линейной. Между тем, такая сильная нелинейность БИХ фильтра обусловлена только методом его проектирования, и при использовании метода, предлагаемого далее, этот недостаток может быть устранен. Другим существенным недостатком метода билинейного преобразования является то, что расчёт коэффициентов фильтра осуществляется в числах с плавающей точкой, и, при реализации фильтра в арифметике с фиксированной точкой, происходит округление вещественных коэффициентов до ближайшего числа с фиксированной точкой. Билинейный способ не позволяет учитывать эффекты квантования перед расчётом фильтров. В результате округления меняются АЧХ и ФЧХ спроектированного фильтра. Кроме того, фильтр может стать неустойчивым. Неизвестно так же, являются ли полученные округленные коэффициенты оптимальными, или же в арифметике с фиксированной точкой можно найти какой-то другой, более подходящий набор коэффициентов, позволяющий реализовать лучший фильтр. Отметим так же, что это недостатки именно метода билинейного расчета фильтров, а не самих БИХ-фильтров. Разработанный метод позволяет рассчитывать БИХ фильтр по заданной АЧХ при линейной ФЧХ в целочисленных коэффициентах заданной разрядности. При этом существует возможность изменять приоритет требований. Так, можно рассчитать фильтр в целочисленных коэффициентах без учета требования линейности ФЧХ, можно жестко выдерживать требование линейности ФЧХ, платя за это незначительными ухудшениями АЧХ. Можно задавать так же одинаковый приоритет обоих требований, при которых получается «средний» по амплитуде и по фазе фильтр, или указать произвольное дробное соотношение приоритетов. В процессе расчета проверяется устойчивость фильтра на каждом этапе. Да, ФЧХ все равно получается нелинейной. Однако, ее получается сделать незначительно (несколько градусов) отличающейся от линейной. Автор метода не я, автор – В. Н. Бугров. Его основная статья: http://www.unn.ru/pages/issues/vestnik/999...6%281%29/10.pdf Картинки с гвз там тоже есть. Другие статьи: http://www.unn.ru/pages/issues/vestnik/999...st_2012_3/8.pdfhttp://www.unn.ru/pages/issues/vestnik/999...t_2009_2/11.pdfЛюбые вопросы пишите сюда или напрямую автору. Контактные данные автора указаны в статьях по ссылкам выше.
|
|
|
|
|
Feb 21 2013, 13:25
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Ну, раз так, вот вам критика. На картинках сравнительные х-ки приведенного вами фильтра и фильтра рассчитанного скриптом с избирательными х-ками примерно соответствующим вашим: Код [be,ae] = ellip(5,0.3,45,0.5); f = 0:0.0005:0.5; g = grpdelay(be,ae,f,2); a = max(g)-g; [num,den]=iirgrpdelay(10, f, [0 0.5], a); b2=conv(be,num); a2=conv(ae,den); b2=round(b2*32768)/32768; a2=round(a2*32768)/32768; АЧХ
 РЈРСеньшено Р Т‘Р С• 69%
561 x 420 (39.05 килобайт)
|
ФЧХ
 РЈРСеньшено Р Т‘Р С• 69%
561 x 420 (34.37 килобайт)
|
ГВЗ
 РЈРСеньшено Р Т‘Р С• 69%
561 x 420 (39.63 килобайт)
|
При формально равных порядках ваш фильтр проигрывает в линейности фазы эллиптическому с выравниванием. Замечу, что у нашего фильтра коэффициенты квантованы 16-ю разрядами. Квантование вообще не доставляет много проблем. зы 1-ю статью прочитал по диагонали. Позже почитаю внимательнее.
|
|
|
|
|
Feb 21 2013, 15:25
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 4-12-09
Из: Н. Новгород
Пользователь №: 54 053

|
Цитата(thermit @ Feb 21 2013, 17:25)  Ну, раз так, вот вам критика. Большое спасибо за отклик. Выполнил скрипт. Вектор а2 7-ой коэффициент 107,1364, 8-ой -100,5486. Это можно представить в инт16? И вообще, м.б. вместо a2=round(a2*32768)/32768 надо как-то типа a2=int16(round(a2*32768))/32768 ? А то они целые, но по модулю не ограниченные (более 32768) могут выйти..
|
|
|
|
|
Feb 21 2013, 15:37
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата voloda: Вектор а2 7-ой коэффициент 107,1364, 8-ой -100,5486. Это можно представить в инт16? А зачем? К-ты надо преобразовать в к-ты биквадратных секций. И уже полученные к-ты квантовать с какой нужно разрядностью. В лоб такие фильтры да еще и в арифметике с фиксированной точкой никто не делает... Это я для простоты так поступил. И несовсем корректно. При квантовании к-тов биквадратных секций картина принципиально не изменится.
|
|
|
|
|
Feb 22 2013, 08:14
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 4-12-09
Из: Н. Новгород
Пользователь №: 54 053

|
Цитата(thermit @ Feb 21 2013, 19:37)  При квантовании к-тов биквадратных секций картина принципиально не изменится. А стабильность фильтр случайно не потеряет? Не могли бы Вы привести корректно посчитанные коэффициенты, для полноты картины? Цитата В лоб такие фильтры да еще и в арифметике с фиксированной точкой никто не делает... Есть подозрение, что сразу в фиксированной точке можно рассчитывать легче и точнее, чем в плавающей.
|
|
|
|
|
Feb 22 2013, 09:50
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата voloda: А стабильность фильтр случайно не потеряет? Не могли бы Вы привести корректно посчитанные коэффициенты, для полноты картины? Код [be,ae] = ellip(5,0.3,50,0.5); ff = 0:0.001:0.5; g = grpdelay(be,ae,ff,2); a = max(g)-g; [num,den]=iirgrpdelay(10, ff, [0 0.5], a); b2=conv(be,num); a2=conv(ae,den); sos=tf2sos(b2,a2); sos(:,1:3)=round(sos(:,1:3)*256)/256;% quantize 8 bit in 8.8 format sos(:,5:6)=round(sos(:,5:6)*1024)/1024;% quantize 10 bit in 6.10 format [m,n]=size(sos); f=ones(1000,1); g=zeros(1000,1); plot(exp(j*2*pi/100*(0:99))); hold on; grid on; for i=m:-1:1 f=f.*freqz(sos(i,1:3),sos(i,4:6),1000); g=g+grpdelay(sos(i,1:3),sos(i,4:6),1000); plot(roots(sos(i,4:6)+0.00000000001*1j),'rx'); end; figure(2); plot(20*log10(abs(f))); grid on; figure(3); plot(g); grid on; Все полюсы остаются по модулю < 1. Так что фильтр устойчивый. Цитата Есть подозрение, что сразу в фиксированной точке можно рассчитывать легче и точнее, чем в плавающей. А вот это совсем не факт. По сути, расчет фильтра - поиск нулей-полюсов (z0 -p0) минимизирующий некоторый функционал. Если наложить ограничения на количество значащих цифр в коэффициентах, оптимальные в этом смысле нули-полюсы z-p будут лежать в каких-то окрестностях с центрами в z0-p0. Что эквивалентно квантованию. Радиусы этих окрестностей будут определяться суровостью квантования. Да, возможно, что к-ты при таком расчете будут другими, но в целом ошибка аппроксимации меньше не будет.
|
|
|
|
|
Mar 13 2013, 12:51
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 4-12-09
Из: Н. Новгород
Пользователь №: 54 053

|
Получилось рассчитывать фильтры с коэффициентами менее 8-ми разрядов. В качестве примера - 4-х и 7-ми разрядные коэффициенты с ГВЗ, близкой к константе в полосе пропускания. 7-ми разрядные коэффициенты: Код clear all; close all; m=10; n=6; mat0 = zeros(m,n); mat0= [ 0.96875 0.71875 0.46875 1 -0.84375 0.375 -0.375 -0.28125 -0.3125 1 -0.03125 0.28125 0.28125 -0.625 -0.96875 1 -0.15625 0 0.28125 -0.875 -0.875 1 -0.09375 0 -0.125 0.5625 0.6875 1 -0.09375 0.46875 0.21875 0 -1 1 -0.4375 0.03125 -0.09375 0.21875 -0.40625 1 -0.4375 0 0.4375 -0.6875 -0.9375 1 0.125 0.15625 -0.09375 0.15625 -0.25 1 -0.40625 0 0.34375 -0.6875 -0.96875 1 0.125 0.625 ]; ff = 0:0.0005:0.5; f=ones(1000,1); g=zeros(1000,1); r=zeros(m,2); radius=zeros(m,1); figure(11); plot(exp(j*2*pi/100*(0:99))); hold on; grid on; for i=m:-1:1 f=f.*freqz(mat0(i,1:3),mat0(i,4:6),1000); g=g+grpdelay(mat0(i,1:3),mat0(i,4:6),1000); plot(roots(mat0(i,4:6)+0.00000000001*1j),'rx'); end;
figure(22); plot(20*log10(abs(f))); grid on; axis([0 1000 -40 2]) figure(33); plot(g); grid on; 4-рех разрядные коэффициенты: Код clear all; close all; m=10; n=6; mat0 = zeros(m,n); mat0= [0.75 0.75 0.5 1 -0.75 0.25 -0.25 -0.75 0 1 0 0.5 0.5 -0.5 -0.75 1 -0.25 0 0.25 -0.75 -1 1 0 0 0 0.5 0.5 1 0 0.25 0 0 -1 1 -0.5 0 0 0.25 -0.5 1 -0.25 0 0 -0.5 -1 1 0 0 0 0 -0.25 1 -0.25 0 0 0.5 0.75 1 0 0.5 ];
ff = 0:0.0005:0.5; f=ones(1000,1); g=zeros(1000,1); r=zeros(m,2); radius=zeros(m,1); figure(11); plot(exp(j*2*pi/100*(0:99))); hold on; grid on; for i=m:-1:1 f=f.*freqz(mat0(i,1:3),mat0(i,4:6),1000); g=g+grpdelay(mat0(i,1:3),mat0(i,4:6),1000); plot(roots(mat0(i,4:6)+0.00000000001*1j),'rx'); end;
figure(22); plot(20*log10(abs(f))); grid on; axis([0 1000 -40 2]) figure(33); plot(g); grid on; Прошу критики.
|
|
|
|
|
Mar 16 2013, 11:04
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата voloda: Если есть известные способы рассчета фильтров с коэффициентами меньше 8-ми бит, подскажите, пожалуйста! Рассчитываете к-ты в плавающей точке и квантуете их хоть 1 битом. ps На мой дилетанский взгляд, тема гроша выеденного не стоит...
|
|
|
|
Guest_TSerg_*
|
Mar 16 2013, 11:53
|
Guests

|
Цитата(thermit @ Mar 16 2013, 15:04)  Рассчитываете к-ты в плавающей точке и квантуете их хоть 1 битом.
ps На мой дилетанский взгляд, тема гроша выеденного не стоит... Могут быть ньансы, связанные с наличием более оптимальных, чем грубо квантованных коэффициентов, с точки зрения требований к ЧХ. Решается численными оптимизирующими расчетами. Но тема, действительно - яйцо выеденное
|
|
|
|
|
Mar 16 2013, 17:13
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 4-12-09
Из: Н. Новгород
Пользователь №: 54 053

|
Цитата(thermit @ Mar 16 2013, 15:04)  Рассчитываете к-ты в плавающей точке и квантуете их хоть 1 битом. Это как? К-ты фильтра с плавающей точкой могут отличаться на порядки. Под каждый коэффициент свой формат, что ли? Цитата Могут быть ньансы, связанные с наличием более оптимальных, чем грубо квантованных коэффициентов, с точки зрения требований к ЧХ. Решается численными оптимизирующими расчетами. Собственно, я об том же. Весь метод - это и есть оптимизирование. Весь вопрос, есть ли какие-то преимущества по сравнению с другими, известными оптимизационными методами.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|