Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проектирование полосового ЦФ
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
Kikky
Доброго времени суток, форумчане!
Мне на бакалаврский проект нужно спроектировать цифровой полосовой фильтр с переменной полосой пропускания. Характеристиками задаться можно любыми.
Я думаю взять полосу пропускания для речевого диапазона частот и проектировать КИХ-фильтр во временной реализации (поправьте если что не так).
На счёт переменной полосы пропускания - то это можно сделать просто, расчитав х-ки для 2-х разных полос пропускания, потом в зависимости от какого-то условия использовать нужную, этого хватит.
Читаю литературу и немного запутался...возникли вопросы:
1) Чем временная реализация отличается от частотной...говорят временная проще в реализации + по ней больше литературы
2) какой вид оконной функции лучше выбрать в моем случае?...или может использовать другой метод?
3) от чего зависит несущая частота и ПП фильтра?

Поделитесь советами пожалуйста, буду очень благодарен.
Lyubimov
1. И. С. Гоноровский Радиотехнические цепи и сигналы дрофа 2006 г. с. 547
Serg76
Цитата(Kikky @ Apr 17 2011, 00:21) *
Мне на бакалаврский проект нужно спроектировать цифровой полосовой фильтр с переменной полосой пропускания.

Ничего личного, но, по-моему, тема какая-то слабоватая даже для бакалаврского уровня. Раньше вроде даже курсовые проекты по-мощнее выглядели sad.gif
Kikky
Спасибо, нашёл, разобрался...может кто подскажет на счёт оконной функции?
ivan219
Зависит от желаймого уровня подавления.
Окно Блэкмана даёт порядка 60 дБ думаю для вас подойдёт.

http://www.dsplib.ru/content/winadd/win.html
Иван Панченко
про оконные функции кое-что полезное,наверняка найдете в книге
Сергиенко "Цифровая обработка сигналов"
Kikky
Спасибо большое! И книга и ссылка очень помогли, разобрался, с помощью FDATool в Matlab построил х-ки.

У меня вопрос по составлению принципиальной схемы. Я так понимаю, сначала нужно определиться со структурой. Я думаю взять самую простую - трансверсальную. На чём основываться при разработке принципиальной схемы и при выборе элементной базы?
Заранее благодарен.
анатолий
Если речевой диапазон частот, то структура простая: типовая схема включения микроконтроллера.
Тем более, если частота перестраивается, нужен какой-то калькулятор коэффициентов - подпрограмма микроконтроллера.
Kikky
а можно ли обойтись без микроконтроллеров в моём случае?
анатолий
Можно взять рекурсивный фильтр - у него коэффициентов мало и они, бывает, изменяются в соответствии с частотой полосы.
Можно выбрать диапазон частот в десятки мегагерц - и делать фильтр на ПЛИС, вырисовывая структуру, прошиваемую в ней.
Типичная методика проектирования фильтров - делай на микроконтроллере (сигнальном микропроцессоре),
если не успевает - переходи на ПЛИС.
Другой подход в наше время - дурость.
Serg76
Цитата(Kikky @ Apr 24 2011, 11:44) *
а можно ли обойтись без микроконтроллеров в моём случае?

естественно
2 анатолий Человеку необходимо спроектировать ЦФ, а не обрабатывать сигнал с его помощью, причем здесь МК? Проектирование обычного КИХ фильтра под любое окно займет не более сотни строк кода для ПК (а то и того намного меньше).
анатолий
Цитата(Serg76 @ Apr 24 2011, 12:09) *
естественно
2 анатолий Человеку необходимо спроектировать ЦФ, а не обрабатывать сигнал с его помощью, причем здесь МК? Проектирование обычного КИХ фильтра под любое окно займет не более сотни строк кода для ПК (а то и того намного меньше).


Цитирую: "У меня вопрос по составлению принципиальной схемы. "
Serg76
Цитата(анатолий @ Apr 25 2011, 11:17) *
Цитирую: "У меня вопрос по составлению принципиальной схемы. "

Цитирую TC: "Мне на бакалаврский проект нужно спроектировать цифровой полосовой фильтр с переменной полосой пропускания. Характеристиками задаться можно любыми."
К тому же причем здесь составление принципиальной схемы к расчету к-ов ЦФ на МК? На МК или DSP/FPGA необходимо реализовывать сей ЦФ, да и то если это необходимо, а рассчитывать к-ты надо отдельной программулькой или в каком-нибудь спец. пакете.
Kikky
На счёт расчета коэффициентов и х-к я разобрался. МК мне использовать не нужно. А принципиальная схема нужна, т.к. реализация аппаратная, а не программная.
Mad_max
Цитата(Kikky @ Apr 25 2011, 15:29) *
На счёт расчета коэффициентов и х-к я разобрался. МК мне использовать не нужно. А принципиальная схема нужна, т.к. реализация аппаратная, а не программная.

Если нужна аппаратная реализация и Вы остановились на фильтре с конечной импульсной характеристикой, то все что Вам нужно
для принципиальной схемы это посмотреть как аппаратно реализуется операция свертки.
анатолий
Цитата(Kikky @ Apr 25 2011, 14:29) *
А принципиальная схема нужна, т.к. реализация аппаратная, а не программная.

Если делать аппаратную реализацию - то на ПЛИС.
Так как другая элементная база - умножители, сумматоры в отдельных микросхемах - уже вымерла.
Kikky
Спасибо большое.
Подскажите пожалуйста как можно реализовать переменную полосу пропускания? Одна у меня будет от 300 до 3000 Гц, а вторая от 300 до большего значения.
Мои соображения: исходя из того, что кол-во коэффициентов и их значения изменятся нужно использовать другую микросхему ПЗУ для хранения этих самых коэффициентов, а также другое кол-во регистров сдвига для формирования линии задержки. Также изменения коснуться ещё многих элементов в схеме. Мне кажется этот способ далеко не самый эффективный и рациональный.
Заранее спасибо.
Kikky
народ, помогите реализовать переменную полосу пропускания!..натолкните на правильную мысль или литературу..
petrov
Цитата(Kikky @ May 11 2011, 12:38) *
народ, помогите реализовать переменную полосу пропускания!..натолкните на правильную мысль или литературу..


Например можно реализовать с помощью банка фильтров не критически семплированного. Начинать с автора P. P. Vaidyanathan. Может быть сложноват такой путь будет для бакалаврского проекта, впрочем всё от вас зависит.
bahurin
Цитата(Kikky @ May 11 2011, 11:38) *
народ, помогите реализовать переменную полосу пропускания!..натолкните на правильную мысль или литературу..


Ну вы же все сами сказали надо подменять коэффициенты структура фильтра число линий задержек при этом не изменится только умножения будут на другие к-ты фильтра заранее просчитанные и сохраненные в пзу
Kikky
2petrov, спасибо, но мне пока нужно что-то проще.

2bahurin, а как быть с частотой дискретизации?..я так понимаю, тактовый генератор может выдавать разную частоту в зависимости от какого-то условия?
анатолий
Цитата(Kikky @ May 11 2011, 11:38) *
народ, помогите реализовать переменную полосу пропускания!..натолкните на правильную мысль или литературу..


Вот такой фильтр

H(z) = 1 - (z^-2 +b(1+a)z^-1 +a)/(1+b(1+a)z^-1 +az^-2)

- полосовой фильтр с центральной частотой fЗ такой, что b = cos(2Pi* fЗ),
с шириной полосы пропускания Δf такой, что

t = tg(Pi* Δf); a = (1-t)/(1+t).

Так что крутишь fз - меняешь настройку реально в пределах (0,05 - 0,45) частоты дискретизации,
крутишь а - меняешь добротность.
Kikky
Спасибо, мне нужно как-то схемно реализовать это дело....мне кажется, что при изменении коэффициентов изменится только форма сигнала, это будет аналогично использованию другого окна, а вот кол-во регистров сдвига в линии задержки повлияет на ширину полосы пропускания...так ли это?
bahurin
Цитата(Kikky @ May 15 2011, 14:12) *
Спасибо, мне нужно как-то схемно реализовать это дело....мне кажется, что при изменении коэффициентов изменится только форма сигнала, это будет аналогично использованию другого окна, а вот кол-во регистров сдвига в линии задержки повлияет на ширину полосы пропускания...так ли это?


Нет не так. Почитайте какую нить книгу по цифровой фильтрации. Есть понятие порядка фильтра который задается количеством коэффициентов и линий задержки, а есть понятие полосы пропускания фильтра, которая задается значением этих коэффициентов. Фильтр фиксированного порядка (с фиксированной структурой) может иметь произвольную полосу пропускания, которая будет зависеть от значения к-тов а не от их количества
mdmitry
Стоит помнить, что в рекурсивном фильтре изменение любого коэффициента рекурсивной части влияет на устойчивость фильтра.
анатолий
Цитата(mdmitry @ May 16 2011, 11:12) *
Стоит помнить, что в рекурсивном фильтре изменение любого коэффициента рекурсивной части влияет на устойчивость фильтра.

Данного рекурсивного фильтра это не касается. Он построен на основе фазового фильтра, а он устойчив почти всегда.
Kikky
Я то понимаю, что такое длина фильтра, но мне препод сказал, что кол-во регистров сдвига не обязательно такое же как кол-во коэффициентов в ких-фильтре. Сказал, что коэффициенты можно взять одни, а длина линии задержки разная должна быть. Чем больше задержка во времени(регистров сдвига), тем уже полоса пропускания и наоборот (я так понимаю связь через прямое и обратное преобразование Фурье)....и фильтр то у меня ких - значит нерекурсивный..

Книги читал, может он мне не так что рассказывает?..подскажите где эти моменты посмотреть можно пожалуйста, а то я уже сильно запутался..
Kikky
подскажите пожалуйста где почитать о зависимости полосы пропускания от значений коэффициентов фильтра?...Вот например в Матлабе в fdatool когда задаёшь полосу пропускания шире или уже, то он на выходе выдаёт разные коэффициенты, но что на счёт линии задержки, это ведь нельзя контролировать в матлабе?...может кто знает где есть такая возможность?

Я понимаю, что изменения кол-ва коэффициентов изменит форму х-ки(крутизну спадов и т.д.), а вот как повлияет изменения кол-ва регистров сдвига?
TSerg
Начните с чтения книг по цифровым фильтрам: Рабинер, Голд, Рейдер, Гольденберг и др.

bahurin
Цитата(Kikky @ May 18 2011, 21:17) *
подскажите пожалуйста где почитать о зависимости полосы пропускания от значений коэффициентов фильтра?...Вот например в Матлабе в fdatool когда задаёшь полосу пропускания шире или уже, то он на выходе выдаёт разные коэффициенты, но что на счёт линии задержки, это ведь нельзя контролировать в матлабе?...может кто знает где есть такая возможность?

Я понимаю, что изменения кол-ва коэффициентов изменит форму х-ки(крутизну спадов и т.д.), а вот как повлияет изменения кол-ва регистров сдвига?


Есть понятие порядка фильтра которое связано с количеством коэффициентов. Порядок фильтра равен количеству линий задержки фильтра. Для ких фильтра порядок фильтра на единицу меньше количества коэффициентов. для расчета надо задать и полосу пропускания и порядок фильтра. Если матлаб вам вернул коэффициенты КИХ фильтра посчитайте их и порядок будет на 1 меньше. Для бих фильтра порядок как правило равен количеству к-тов знаменателя передаточной функции (к-ты "a", которые возвращает матлаб)
анатолий
Цитата(Kikky @ May 16 2011, 16:37) *
Сказал, что коэффициенты можно взять одни, а длина линии задержки разная должна быть. Чем больше задержка во времени(регистров сдвига), тем уже полоса пропускания и наоборот (я так понимаю связь через прямое и обратное преобразование Фурье)....и фильтр то у меня ких - значит нерекурсивный..

Имеется в виду, если например, в КИХ - фильтре НЧ импульсную реакцию сжать вдвое,
то и частота среза увеличится вдвое.
Т.е. есть такой метод: имеется базовая импульсная реакция на фиксированную частоту,
а рабочая импульсная реакция (т.е. набор коєффициентов) получается ее интерполированием
для нужной частоты.
При этом действительно, если при интерполяции импульсная реакция сжимается,
то это значит, уменьшается число регистров сдвига, т.к. сжатая реакция дополняется нулями.
Kikky
2TSerg, спасибо за книги.
2bahurin, это всё понятно.
2Анатолий, это то, что мне нужно!...вы не знаете где можно подробнее об этом методе почитать?..о том как осуществляется интерполяция базовой импульсной реакции и как это реализовать?
анатолий
Цитата(Kikky @ May 20 2011, 07:48) *
2Анатолий, это то, что мне нужно!...вы не знаете где можно подробнее об этом методе почитать?..о том как осуществляется интерполяция базовой импульсной реакции и как это реализовать?

Ищите классика Константинидиса или ссылки на его методику пересчета АЧХ по базовой АЧХ.
Kikky
Нашёл его книгу, но не нашёл в ней ничего на эту тему sad.gif...в поисковиках на эту методику тоже ссылок не обнаружил..может у кого есть в своих запасах?
bahurin
Цитата(Kikky @ May 22 2011, 15:42) *
Нашёл его книгу, но не нашёл в ней ничего на эту тему sad.gif...в поисковиках на эту методику тоже ссылок не обнаружил..может у кого есть в своих запасах?


Если вам надо ких фнч на любую частоту среза то берете функцию h(t) = w(t*Fs)*sinc(pi*t*Fs)/(pi*t*Fs), Fs - частота дискретизации, w(t) - весовое окно и дискретизируете эту функцию с шагом 1/f0, f0 - частота среза. Если надо четное N - к-тов фильтра то дискретизируете N/2 в отрицательной области, N/2 в положительной чтобы фаза линейная оставалась. Где то так.
анатолий
Цитата(Kikky @ May 22 2011, 13:42) *
Нашёл его книгу, но не нашёл в ней ничего на эту тему sad.gif


См. "Частотные преобразования" , таблицу 5.1. на стр. 79.
Kikky
2Анатолий, спасибо, но эти формулы предназначены для БИХ-фильтров.
2bahurin, я так понимаю, что после дискретизации этой функции я получу нужные коэффициенты фильтра?
bahurin
Цитата(Kikky @ May 24 2011, 19:19) *
2bahurin, я так понимаю, что после дискретизации этой функции я получу нужные коэффициенты фильтра?


да вот пример на матлабе расчета полосового фильтра на заданную частоту с заданной полосой
Код
clear all;
Fs = 400;   %частота дискретизации (Гц)
f0 = 100;    %центральная частота фильтра (Гц)
band = 50;    %полоса фильтра (Гц)

N = 256;    %количество к-тов фильтра (число линий задержки равно N-1)

w = hamming(N)'; %окно хемминга

%моменты дискретизации для линейной ФЧХ
t = (-N/2+0.5):(N/2-0.5);
t = t*band/Fs;

h = w.*sin(pi*t)./(pi*t); %расчет ФНЧ c полосой band

h = 2*h/sum(h);              %нормирую

h=h.*cos(2*pi*t*f0/band); %переношу на частоту f0
%в массиве h лежат к-ты полосового фильтра, рассчитанного на частоту f0 с полосой band
% НЕ меняя структуры фильтра (не меняя N) можно расчитать фильтр на любую частоту с любой полосой
%(разумеется чтобы он укладывался от 0 до Fs/2)

% построим АЧХ фильтра при помощи fft

f = (0:8*N-1)*Fs/(8*N);

H = 20*log10(abs(fft([h, zeros(1,7*N)])));

subplot(211), stem(1:N,h), grid;
subplot(212), plot(f,H), grid, axis([0,Fs/2,-140,10]);

анатолий
Цитата(Kikky @ May 24 2011, 18:19) *
2Анатолий, спасибо, но эти формулы предназначены для БИХ-фильтров.

Значит, на более общий случай.
БИХ-фильтр задается передаточной характеристикой из числителя и знаменателя.
Числитель - то, что касается КИХ-фильтра.
Знаменатель - то, что отличает БИХ от КИХ.
Ну, взять то, что получается в числителе - и будут искомые коэффициенты.
Kikky
2bahurin, спасибо Вам огромное, этот алгоритм мне очень помог, препод одобрил. Только вот сказал, что использовать его можно только если есть теоретическое обоснование...на счёт используемого окна - понятно. Подскажите пожалуйста, какие Вы формулы использовали для дискретизации, расчета ФНЧ и для переноса на заданную частоту?
bahurin
Цитата(Kikky @ May 31 2011, 12:33) *
2bahurin, спасибо Вам огромное, этот алгоритм мне очень помог, препод одобрил. Только вот сказал, что использовать его можно только если есть теоретическое обоснование...на счёт используемого окна - понятно. Подскажите пожалуйста, какие Вы формулы использовали для дискретизации, расчета ФНЧ и для переноса на заданную частоту?


Все формулы в листинге. sin(x)/x - это импульсная характеристика фнч.
h=h.*cos(2*pi*t*f0/band); - перенос на частоту f0
Kikky
Вот например, формула переноса на частоту f0, она у Вас просто в голове родилась?..или может получилась на основе каких-то теорем или формул?
bahurin
Цитата(Kikky @ May 31 2011, 14:44) *
Вот например, формула переноса на частоту f0, она у Вас просто в голове родилась?..или может получилась на основе каких-то теорем или формул?


Есть такая теорема об амплитудной модуляции, которая говорит что умножение сигнала на синус или косинус некоторой частоты f0 переносит спектр сигнала на эту частоту. В данном случае спектр это частотная характеристика фильтра частота f0 - нужная центральная частота полосового фильтра. Так из фнч получился полосовой фильтр. Ну разумеется еще надо сохранить линейную фчх нашего фильтра, для этого импульсная характеристика должна подходить под один из 4-х типов в зависимости от количества к-тов импульсной характеристики, я выбрал первый тип, поэтому косинус. Более подробно читайте в книжках.
thermit
Теорема о запаздывании.
Грубо:
Сдвиг во времени - умножение на комплексную экспоненту в частотной области.
Сдвиг по частоте - умножение во времени на комплексную экспоненту.
Какую часть результата умножения брать (вещественную или мнимую) и начальную фазу экспоненты определяют требования к линейности ФЧХ (постоянству ГВЗ).
Kikky
Спасибо большое, с этим вроде бы разобрался, ещё есть вопрос о выборе АЦП: насчет быстродействия понятно, а вот на счёт разрядности?...где-то прочитал, что разрядность зависит от допустимого уровня шума квантования...а не зависит ли от длины фильтра?..у меня длина фильтра - 63 , значит АЦП должен выдавать на выходе 64 отсчёта?...и сдвиговые регистры нужны 64-разрядные?
Kikky
немного разобрался, 8-разрядный двоичный АЦП способен на выходе выдать до 256 отсчетов, значит мне такой подходит. А 8-разрядные двоичные ПЗУ могут хранить до 256 значений коэффициентов?

подскажите что значит: "8-разрядное ПЗУ ёмкостью 256 бит (32x8)"? я имею ввиду 32x8..
bahurin
Цитата(Kikky @ Jun 3 2011, 12:11) *
немного разобрался, 8-разрядный двоичный АЦП способен на выходе выдать до 256 отсчетов, значит мне такой подходит. А 8-разрядные двоичные ПЗУ могут хранить до 256 значений коэффициентов?

подскажите что значит: "8-разрядное ПЗУ ёмкостью 256 бит (32x8)"? я имею ввиду 32x8..

эх молодежь молодежь... 8-разрядный двоичный АЦП способен на выходе выдать столько отсчетов сколько нужно (хоть бесконечное количество) но каждый отсчет будет представлен одним байтом (8 бит)
пзу емкостью 256 бит может запомнить не более 32 байт информации
Kikky
Значит я могу использовать 8-разрядный АЦП и ПЗУ ёмкостью 512 бит(для хранения 64 коэффициентов)..?
bahurin
Цитата(Kikky @ Jun 3 2011, 14:53) *
Значит я могу использовать 8-разрядный АЦП и ПЗУ ёмкостью 512 бит(для хранения 64 коэффициентов)..?

а причем тут ацп? Вам надо к-ты фильтра хранить?
Kikky
ну да, ПЗУ нужно под 64 коэффициента, а сдвиговые регистры под 64 отсчёта? получается одинаковой розрядности?...или одно от другого не зависит?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.