На главную страницу сайта
· Наш магазин · Объявления · Рейтинг · Статьи · Частоты · Копилка · Аэродромы · Live!
· Файлы · Диапазоны · Сигналы · Музей · Mods · LPD-форум · Клуб · Радиостанции
На сайте: гостей - 46,
участников - 3 [ ra3tmo, Несущий свет, Boaconstrictor]
 · Начало · Опросы · События · Статистика · Поиск · Регистрация · Правила · FAQ · Галерея ·
 Форум —› Радиосигналы —› Цифровая фильтрация 
Портативные любительские радиостанции Yaesu


Yaesu FT-60R
руб.

Yaesu VX-3R
руб.

Yaesu VX-6R
руб.

Yaesu VX-8DR
руб.

Yaesu FT-1D
руб.
Автор Сообщение
RadioWave
Участник
Offline1.3
с ноя 2004
Киев
Сообщений: 51

Дата: 03 Ноя 2005 17:02:19 #  

Подскажите, пожалуйста, толковую литературу или сайты в Интернете, где детально
описываются принципы и алгоритмы расчета цифровых фильтров. Особенно интересен
алгоритм расчета коэффициентов фильтра и их минимально необходимого количества.
Полезными были бы также и образцы программных реализаций фильтров.
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 03 Ноя 2005 17:52:54 #  

RadioWave

Уже как-то тут мелькало http://dsp-book.narod.ru/links.html
Реклама
Google
RadioWave
Участник
Offline1.3
с ноя 2004
Киев
Сообщений: 51

Дата: 09 Ноя 2005 15:02:32 #  

SergUA6
Спасибо за ссылочку, но...
Честно говоря, перелопатил по-моему все, но доходчивого
объяснения алгоритма расчета коэффициентов фильтра и
их минимально необходимого количества для разного типа
фильтров (ВЧ, НЧ, ПФ, РФ) так и не нашел.
Если бы на пальцах все было бы разъяснено, было бы просто
замечательно.
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 09 Ноя 2005 16:07:16 · Поправил: SergUA6 #  

RadioWave

Если бы на пальцах все было бы разъяснено

Эх... конечно попробую, но есть некоторые граничения, я не занимался расчетом и реализацией БИХ фильтров(то есть этот момент останется за кадром), с КИХ фильтрами, не смотря на кажущуюся простоту, если делать все по науке, так же не так все просто, то есть я не могу переписывать первоисточники слово в слово, если чего и получится то в чрезвычайно компактной форме... ну и время некоторое потребуется на "перевод", то есть или сегодня вечером или завтра днем.


P.S. Ну и если конечно Вам не БИХ фильтры нужны, а то может и не нужно все это.
redhat
Участник
Offline1.6
с дек 2004
Сообщений: 226

Дата: 09 Ноя 2005 16:14:03 #  

Есть такое! Подберу файлы и программу по расчетам коэф. попозже(сегодня вечером или завтра утром) .
Сейчас возможности нет.
RadioWave
Участник
Offline1.3
с ноя 2004
Киев
Сообщений: 51

Дата: 09 Ноя 2005 16:34:26 #  

SergUA6
Именно КИХ-фильтры мне и нужны.
redhat

Для обоих: спасибо, жду с превеликим нетерпением.
redhat
Участник
Offline1.6
с дек 2004
Сообщений: 226

Дата: 09 Ноя 2005 20:22:21 · Поправил: redhat #  

To RadioWave:

Нашел одно хозяйство, в частности документы где описываются цифровые фильтры и принцыпы ну и программу для расчета коэф.
Общий обьем мин. 4 мега. Если сбросить целиком "Научно-техническое руководство по ЦОС" то больше надо, ну и еще есть........программа QED_LITE с выходом файлов коэфф. в разных представлениях.
Короче мой майл ua4hvs@avtograd.ru
Кидай туда пустышку а я отошлю файлы, только сообщи макс. размер.

Ссылка правда на англицком - http://www.bores.com/courses/intro/index.htm
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 09 Ноя 2005 21:29:16 #  

RadioWave


Ну типа начнем...

Для начала некоторые "интимности", практически КИХ фильтр является усеченной версией БИХ фильтра(теоретической моделью, которая имеет бесконечное число коэффициентов и идеальную АЧХ), подавление в полосе затухания реального КИХ фильтра практически не зависит от его длинны(!), как это ни прискорбно, но это так. К примеру КИХ фильтр с прямоугольной весовой функцией не может иметь подавление в полосе затухания более 21 дб(смешная для практических целей величина), ко всему прочему эти фильтры имеют сильную неравномерность в полосах затухания(пропускания) так же не зависящую от его длинны. Чем же в таком случае отличаются, к примеру, два КИХ фильтра с прямоугольной весовой функцией длинной в 10 и 200 отсчетов(коэффициентов)? Весьма немаловажным и существенным параметром, а именно, шириной переходной зоны, у одного она будет сотни герц(условно) у другого единицы или десятые доли.

Таким образом от длинны фильтра зависит крутизна скатов его АЧХ, остальные параметры зависят от вида весовой функции, с помощью которой осуществляется это самое усечение, до этой самой длинны. Любой(ФНЧ, ВФЧ, ПФ и РФ) фильтр может быть рассчитан на основе ФНЧ.

Оставим на время весовые функции и рассмотрим расчет ФНЧ. Базовая формула имеет следующий(весьма не злобный, в отличии от других формул в ЦОС) вид:

H(n)= [2*Fc*sin(2*pi*Fc*n)]/(2*pi*Fc*n), где n от минус бесконечности до плюс бесконечности, а Fc нормированная частота среза нашего ФНЧ, которая равна F/Fd, где F частота среза в герцах, Fd частота дискретизации на которой будет работать фильтр. К примеру для ФНЧ с частой среза 2 кгц и для сигнала с частотой дискретизации 8 кгц, Fc=2/8(нули опустим, это ничего не меняет) = 0.25 это и есть нормированная частота(величина безразмерная) среза ФНЧ.

Подставив в формулу Fc=0.25 и посчитав допустим для n от -50 до +50 получим 101 коэффициент нашего ФНЧ, это и есть способ расчета коэффициентов ФНЧ длинной 101 коэффициент, с прямоугольной весовой функцией. Есть некоторый нюанс в этой формуле, при нечетном количестве коэффициентов, при n=0, возникает неопределенность вида sin(x)/x, что даже двоечников смущать не должно, как известно(в школе это проходят) функция sin(x)/x при х равном нулю равна 1, то есть при n=0, H(0)=2*Fc, для четного количества этой проблемы нет.

На самом деле с отрицательными значениями n работать не совсем удобно, кроме того, относительно нулевого(центрального) коэффициента все остальные симметричны, так же из-за необходимости работать как с четным(по приведенной выше формуле это несколько проблемно) так и с не четным количеством коэффициентов базовую формулу несколько изменяют подгоняя ее под конкретные цели. В итоге получаются более простые(за счет симметрии фильтра) вычисления, но зато их уже два типа(чет/нечет), и для ФНЧ получается такая картина:

для нечетного количества коэффициентов

H(0)=2*Fc; для n=0;
H(n)=[sin(2*pi*Fc*n)]/(pi*n); для n = 0 ... (FilterLength-1)/2;


для четного

H(n)=[sin(2*pi*(n-0.5)*Fc)]/((n-0.5)*pi); для n = 1 ... FilterLength/2;

реально это выглядит так, к примеру для фильтра с частотой среза 2 кгц длинной 7 коэффициенов и частотой дискретизации 8 кгц, получаем:

H(0):=0.5;
H(1):=x1(ломает считать, обозначим условно);
H(2):=x2;
H(3):=x3;

в силу симметрии и нечетности коэффициентов получается последовательность x3, x2, x1, 0.5, x1, x2, x3 то есть за нулевой отсчет принят центральный, для того же фильтра с длинной 6 коэффициентов получаем

H(0):=x1;
H(1):=x2;
H(2):=X3;

в силу опять же симметрии, но учитывая, что центрального отсчета нет(он посередине шага) получаем x3, x2, x1, x1, x2, x3;

Таким образом легко получаем коэффициенты для ФНЧ любого порядка.

Вернемся теперь к весовым функциям, то что мы делали чуть выше, это и есть прямоугольная весовая функция, то есть попросту грубое обрезание бесконечного ряда конечным числом, что очень плохо сказывается на характеристиках самого фильтра, например на максимальном подавлении(не выше 21 дб) и крайне неравномерной АЧХ, причем как уже говорилось увеличение порядка(длинны) фильтра на это не влияет. Причиной этого является слишком грубое усечение бесконечного ряда, применение весовых функций обеспечивающих плавное, до нуля снижение значений коэффициентов в пределах длинны выборки существенно улучшает ситуацию(за это приходится правда платить). И именно вид весовой функции определяет максимально возможную степень подавления в полосе задерживания, и минимально достижимую величину неравномерности в полосе пропускания.

Самих весовых(оконных) функций довольно много, рассмотрим наиболее популярные.

Окно Ханна, обеспечивает подавление в полосе затухания -44 дб, при неравномерности в полосе пропускания 0.0546 дб

Окно Хемминга, подавление -53 дб, неравномерность 0.0194 дб

Окно Кайзера, в зависимости от параметров, затухание выше -90 дб, неравномерность менее 0.000275 дб

Как видим в принципе, все окна обладают весьма хорошими показателями, но платой за это является расширение переходной зоны, то есть попросту уменьшение крутизны фронтов(и смазывания частоты среза) АХЧ фильтра, и чем лучше весовая функция тем больше плата за ее характеристики.

Расчет первых двух весовых функций достаточно прост(Кайзера рассматривать не будем, важен принцип)

Для окна Ханна W(n)=0.5*[1-cos((2*n*pi)/N)], где n = 0 ... N-1, N=FilterLength;
Хемминга W(n)=0.54-0.46*cos[(2*n*pi)/N], где n = 0 ... N-1, N=FilterLength;

таким образом результирующие коэффициенты фильтра c весовой функцией(расчитанной по одной из формул) будут, к примеру, для первого варианта(длинной 7)

x3*W(0), x2*W(1), x1*W(2), 0.25*W(3), x1*W(4), x2*W(5), x3*W(6);

В принципе все..., приведу формулы расчета других типов фильтров(пока крутились вокруг ФНЧ)

ФВЧ для нечтной длинны:

H(0)=1-2*Fc;
H(n)=-[sin(2*pi*Fc*n)]/(pi*n); для n = для n = 0 ... (FilterLength-1)/2;

для четной:

H(n)=([sin(pi*(n-0.5)]-[sin(2*pi*(n-0.5)*Fc)])/((n-0.5)*pi); для n = 1 ... FilterLength/2;

ПФ для нечетной длинны:

H(0)=2*(F2-F1); где F2,F1 верхняя и нижняя нормированные частоты среза
H(n)=[sin(2*pi*F2*n)-sin(2*pi*F1*n)]/(pi*n); для n = 0 ... (FilterLength-1)/2;

для четной:

H(n)=[sin(2*pi*(n-0.5)*F2)-sin(2*pi*(n-0.5)*F1)]/((n-0.5)*pi); для n = 1 ... FilterLength/2;

РФ для нечетной длинны:

H(0)=1-2*(F2-F1); где F2,F1 верхняя и нижняя нормированные частоты среза
H(n)=[sin(2*pi*F1*n)-sin(2*pi*F2*n)]/(pi*n); для n = 0 ... (FilterLength-1)/2;

для четной:

H(n)=[sin(2*pi*(n-0.5)*F1)-sin(2*pi*(n-0.5)*F2)]/((n-0.5)*pi); для n = 1 ... FilterLength/2;

Осталась самая малость, сама длинна фильтра из чего берется? Как уже говорилось из допустимой ширины переходной зоны, к примеру, нужен фильтр с частотой среза 2 Кгц, шириной переходной зоны 100 Гц, частота дискретизации 8 кгц, подавление в полосе задерживания более 50 дб.
Получаем, весовая функция Хемминга(из требования уровня подавления), нормированная ширина переходной зоны 100/8000=0.0125, для весовой функции Хемминга минимальная длинна фильтра из требований переходной зоны равна 3.3/F_delta , где F_delta нормированная ширина переходной зоны, то есть получаем 3.3/0.0125 = 264 отсчета(коэффициента).

Для весовой функции Ханна длина фильтра по переходной зоне равна 3.1/F_delta, для многих весовых функций эти данные приводятся в литературе.

Уфф... по моему в самых общих чертах все. Это самый простой в вычислительном отношении метод, и самый не гибкий, но в большинстве случаев достаточный.
RadioWave
Участник
Offline1.3
с ноя 2004
Киев
Сообщений: 51

Дата: 10 Ноя 2005 10:33:39 #  

redhat
Пустышку Вам отправил. За ссылочку тоже спасибо.

SergUA6
Можно только позавидовать Вашей терпеливости. Так расписать
все для некоего незнакомца... Огромное спасибо. Все очень
доходчиво. Многие вещи по фильтрации стали на свои места.
redhat
Участник
Offline1.6
с дек 2004
Сообщений: 226

Дата: 13 Ноя 2005 07:59:54 #  

RadioWave - получили по почте прогу и инфо?
Много чето получилось, все дошло?
RadioWave
Участник
Offline1.3
с ноя 2004
Киев
Сообщений: 51

Дата: 15 Ноя 2005 09:44:50 #  

redhat
Спасибо большое. Все закачал, но посмотреть еще
не успел.
RadioWave
Участник
Offline1.3
с ноя 2004
Киев
Сообщений: 51

Дата: 15 Ноя 2005 16:25:18 #  

redhat
Посмотрел. Всё очень кстати. Програмка толковая, только почему-то не хочет
становиться под Win2000 Professional. Посмотрел её под XP.
В общем большое спасибо, теперь необходимо всё это переварить (т.е. обмозговать).
Дата: 03 Июн 2008 22:03:08 #  

SergUA6
Спасибо Вам большое за этот пост!

У меня такие вопросы:
для четной:

H(n)=([sin(pi*(n-0.5)]-[sin(2*pi*(n-0.5)*Fc)])/((n-0.5)*pi); для n = 0 ... (FilterLength/2)-1;

Здесь первые два коэффициента будут одинаковы (H(0) и H(1)). Верно ли это?
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 04 Июн 2008 07:57:34 · Поправил: SergUA6 (04 Июн 2008 21:42:42) #  

CrazyFlik

Нет не верно, приведена схема расчета "половины" фильтра, полный фильтр состоит из двух таких половинок:

реально это выглядит так, к примеру для фильтра с частотой среза 2 кгц длинной 7 коэффициенов и частотой дискретизации 8 кгц, получаем:

H(0):=0.5;
H(1):=x1(ломает считать, обозначим условно);
H(2):=x2;
H(3):=x3;

в силу симметрии и нечетности коэффициентов получается последовательность x3, x2, x1, 0.5, x1, x2, x3 то есть за нулевой отсчет принят центральный, для того же фильтра с длинной 6 коэффициентов получаем

H(0):=x1;
H(1):=x2;
H(2):=X3;

в силу опять же симметрии, но учитывая, что центрального отсчета нет(он посередине шага) получаем x3, x2, x1, x1, x2, x3;
Дата: 04 Июн 2008 15:46:39 #  

SergUA6
Я что-то не догнал =(
То что Вы привели в цитате я понимаю. Я о том что если сравнить
H(0)=([sin(pi*(0-0.5))]-[sin(2*pi*(0-0.5)*Fc)])/((0-0.5)*pi)=
=([sin(-pi*0.5)]-[sin(-2*pi*0.5*Fc)])/(-0.5*pi)=
=([-sin(pi*0.5)]-[-sin(2*pi*0.5*Fc)])/(-0.5*pi)=
=([sin(pi*0.5)]-[sin(2*pi*0.5*Fc)])/(0.5*pi)

H(1)=([sin(pi*(1-0.5))]-[sin(2*pi*(1-0.5)*Fc)])/((1-0.5)*pi)=
=([sin(pi*0.5)]-[sin(2*pi*0.5*Fc)])/(0.5*pi)

H(0) = H(1)

Получится
H(0):=x1;
H(1):=x1;
H(2):=X3;

x3, x1, x1, x1, x1, x3

Просто написал код для нечётной длины. Он работает. Для чётной длины заменил n на (n-0.5) ну и "центральный" коэффициент убрал, но не сработало. Вот и не знаю к чему придраться =)
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 04 Июн 2008 18:30:46 #  

CrazyFlik

Скорее всего или я не внимательно списывал с источника(уже не помню откуда) или ошибка там, нужно читать не для n = 0 ... (FilterLength/2)-1, а для n = 1 ... FilterLength/2. В тексте уже исправил. Выкладки не проверял тогда.
Дата: 04 Июн 2008 20:57:29 #  

Ок. Я так и думал.

источника(уже не помню откуда)
Жаль :) Если там так же доступно написано, я бы почитал.
Dimik
Участник
Offline4.5
с апр 2003
Москва
Сообщений: 653

Дата: 05 Июн 2008 00:52:05 #  

Подскажите, пожалуйста, толковую литературу

Довольно качественная книжка, претендующая на полноту раскрытия темы:

В. П. Васильев, Э. Л. Муро, С. М. Смольский, "Основы теории и расчета цифровых фильтров"

Покупал в книжном на Бауманской, но есть и в других книжных.

ссылка на ozon
Дата: 08 Июн 2008 11:17:52 #  

SergUA6
У меня проблемы с чётной длиной для ФВЧ.
Не мог бы ты проверить формулу:
H(n)=([sin(pi*(n-0.5)]-[sin(2*pi*(n-0.5)*Fc)])/((n-0.5)*pi); для n = 1 ... FilterLength/2;
по сути это
H(n)=( (-1)^(n-1) - [sin(2*pi*(n-0.5)*Fc)])/((n-0.5)*pi); для n = 1 ... FilterLength/2;

На всякий случай.
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 08 Июн 2008 11:26:41 · Поправил: SergUA6 (08 Июн 2008 11:51:50) #  

CrazyFlik

Давайте поступим проще, вот статья там в таблицу сведены все фильтры, не исключено, что я был не внимателен, когда писал тут формулы, может где и накосячил.

p.s.

Опс, статья не та, один момент поискать надо, отпишусь чуть позже.
SergUA6
Модератор (RIP)
Offline6.0
с фев 2004
Сообщений: 1989

Дата: 08 Июн 2008 11:48:45 #  

CrazyFlik

Залил файл стр. 57, там же в статье и поправочные коэффициенты для различных весовых функций.
Дата: 08 Июн 2008 12:11:50 #  

SergUA6
Спасибо. Читаю.
Дата: 11 Июн 2008 21:54:41 #  

SergUA6
Лаба "Программный дизайнер КИХ фильтров сдана" =)
Спасибо за материалы!
Реклама
Google
 

Создавать сообщения могут только зарегистрированные участники форума.
Войти в форум :: » Логин » Пароль
Начало
Средства связи, рации. Купить радиостанции Motorola, Yaesu, Vertex, приемники, антенны.
Время загрузки страницы (сек.): 0.045; miniBB ®