|
|
  |
Цифровой фильтр |
|
|
|
Jan 24 2006, 08:59
|

Участник

Группа: Свой
Сообщений: 65
Регистрация: 31-08-05
Из: Moscow
Пользователь №: 8 124

|
поисследовал ситуацию поподробнее и обнаружил, что сказанное выше справедливо и для других частот. То есть фильтр с такими, например, параметрами FILTER COEFFICIENT FILE FILTER TYPE BAND PASS ANALOG FILTER TYPE BUTTERWORTH PASSBAND RIPPLE IN -dB -3.0000 STOPBAND RIPPLE IN -dB -30.0000 PASSBAND CUTOFF FREQUENCIES 426 434 HERTZ STOPBAND CUTOFF FREQUENCIES 316 2080 HERTZ SAMPLING FREQUENCY 4167 HERTZ почему-то принимает крайнюю левую частоту полосы задерживания 316гц  иллюстрации в файле по адресу http://webfile.ru/766585Не могу понять в чем может быть дело. Пожалуйста помогите!
|
|
|
|
|
Jan 24 2006, 15:08
|

Участник

Группа: Свой
Сообщений: 65
Регистрация: 31-08-05
Из: Moscow
Пользователь №: 8 124

|
фильтр на 316гц по идее должен пропускать частоту 316, не усиливая и не подавляя. А этот результат я объяснить никак не могу. Филтр реализуется такой вот функцией на языке Си++ в IAR C для Atmel AVR (3 версия)
// 1. Вычисление результата в рекурсивной ветви звена: // D10 = Uadc + D11*a11 + D12*a12
void MyChannelClass::FilterOne(MyChannelClass *pntr) { //формат коэффициентов 4.12 //формат переменных фильтров 8.8 pntr->D10 = pntr->ADC_buffer; //ывделяем из формата 12.20 число в формате 8.8 pntr->D10 = pntr->D10 + int( fmuls16x16_32( pntr->D11, pntr->a11)>>12 ); pntr->D10 = pntr->D10 + int( fmuls16x16_32( pntr->D12, pntr->a12)>>12 ); pntr->D12 = pntr->D11; pntr->D11 = pntr->D10; }
далее выполняется
// 2. Детектирование и сглаживание сигнала (амплитудное детектирование // Цикл выборки НЧ в 16 раз больше периода квантования // Uad1 = 4*b10*abs(D10) (умножение на 4 из-за сдвига на 2 разряда влево, чтобы убрать знак, хранящийся в старших разрядах 2байтной переменной D10 - это было в предыдущей программе для другого МК) Сейчас это написано на Си так.
pntr->Uad1 = SignedToUnsigned(pntr->D10); pntr->Uad1 = int( fmuls16x16_32( pntr->Uad1, pntr->b10)>>12 ); //8.8 x 4.12 = 12.20 -> 8.8 pntr->Uad1 = (pntr->Uad1)*4;
функция fmuls16x16_32 реализует умножение двухбайтных чисел и дает 4 байтный результат (арифметика с фиксированной точкой)
для фильтра на 430гц 1.584584 /* section 1 A1 */ -0.987981 /* section 1 A2 */ 0.006009 /* section 1 B0 */ -0.006009 /*section 1 B2 */ здесь имеется ввиду уравнение x[t] +a1*x[t-1] + a2*x[t-2] = b0*y[t] +b2*y[t-2] на практике остается только левая часть, а правая выносится как бы за сумматор (простите, что без картинки - если надо, сделаю).
Используемый коэффициент b0=0.3308. Это значение было подобрано так, чтобы все работало. И оно действительно работает в предыдущей версии устройства (его делал не я, и программу тоже не я писал, но сомнений в том, что это так не возникает). Подбирался он из следующих соображений : результат не должен был переполнять разрядную сетку. А если вынести коэффициенты b0 и b2 за сумматор, то значение фильтра будет равно абсолютному значению рекурсивной ветви звена.
я заподозрил что что-то не так, когда увидел что среднее значение после детектирования подчиняется закономерности, которую я описывал выше, и от этого предположения перешел к предыдущему шагу, о чем здесь и спрашиваю.
забыл сказать что речь идет о рекурсивном фильтре с бесконечной импульсной характеристикой (IIR). Рачет выполняет в старой проге методом Bilinear Transformation , работающей под DOS. Ее результат сомнений не вызывает
|
|
|
|
|
Jan 24 2006, 19:54
|
Местный
  
Группа: Свой
Сообщений: 316
Регистрация: 22-10-05
Пользователь №: 9 976

|
Я бы все таки проверил характеристики фильтра в Matlab'е, потому как квантование может очень сильно влиять на БИХ-фильры. Задайте ваш формат коэффициентов и переменных и посмотрите что реально получается. Можно, конечно, полагаться на старую досовскую прогу и предыдущий проект, но, как говорится, "доверяй, но проверяй". Кстати, наверное, это опечатка, но мне кажется, что у коэффициентов A1 и A2 знаки должны быть противоположные.
|
|
|
|
|
Jan 25 2006, 07:06
|

Участник

Группа: Свой
Сообщений: 65
Регистрация: 31-08-05
Из: Moscow
Пользователь №: 8 124

|
я уже неоднократно проверял. И в матлабе, и в программе специально сделаной для построения ачх с учетом эффектов квантования. Вот так выглядит АЧХ для фильтра на 430гц. с 12 разрядными коэффициентами и 8-разрядными переменными в фильтре http://webfile.ru/768926. Почему-то работает мой фильтр прям как Highpass, а не Bandpass
|
|
|
|
|
Jan 25 2006, 08:06
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(skopus @ Jan 23 2006, 19:52)  Уважаемые, скажите пожалуйста насколько сильно может влиять постоянная составляющая в фильтруемом сигнале. Я столкнулся с проблемой. У меня есть два полосных фильтра баттерворта 2го порядка. Один на частоту 316гц, другой на частоту 430гц. Я считываю сигнал с АЦП. Туда он подается с добавленной постоянной составляющей то есть Uвхода=Uсигнала+const. Происходит следующий эффект : при подаче сигнала 316 гц значение на выходе 2го фильтра(который на 430гц) такое же, как и на расчетной частоте. На самом деле - даже немного больше. Все коэффициенты проверил по 100 раз. Подавление в полосе затухания -30дб. Алгоритмически все вроде верно (я использую одну и ту же функцию для 11 фильтров, расчитанных на разные частоты, подставляя просто разные коэффициенты - и все кроме одного заметно давят нерасчетные частоты). Может ли это быть обусловлено постояннной составляющей в сигнале или шумом, на высоких частотах? ( ФНЧ перед АЦП я не ставил пока) Ничего удивительного, что Ваш фильтр который на 430гц пропускает что и фильтр на 316гц, да еще и с большей амплитудой. В самом начале Вы оговаривали, что у Вас фильтры - НЧ, почему они должны работать по другому? Увеличение амплитуды происходит потому что 430гц больший частотный диапазон, чем 316гц. Вот если бы использовались селективные фильтры без перекрытия частотных диапазонов (316гц и 430гц), то ничего подобного не было бы ('пролаза'). Все зависило от полосы затухания фильтров. А постоянная составляющая здесь не причем, ее даже полезно вводить для того что бы на входе фильтра небыло нулевых значений. А перед АЦП необходимо ставить аналоговый фильтр, чтобы быть уверенным что полученные частоты при цифровом преобразовании превышающие диапазон аналогового фильтра являются шумами квантования. Иначе анализ бесмыслен...
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Jan 25 2006, 08:34
|

Участник

Группа: Свой
Сообщений: 65
Регистрация: 31-08-05
Из: Moscow
Пользователь №: 8 124

|
я не говорил что у меня НЧ фильтры. У меня узкополосные фильтры BandPass (с полосой пропускания порядка Частота настройки(+-)3гц). Пример АЧХ фильтра в файле, ссылка на который дал в предыдущем посте. http://webfile.ru/769075 - здесь приницпиальная схема устройства и уравнения по которым оно работает. Решение о приеме сигнала принимается по превышению интегратором Ui установленного порога
Сообщение отредактировал skopus - Jan 25 2006, 08:36
|
|
|
|
|
Jan 25 2006, 11:11
|
Участник

Группа: Свой
Сообщений: 61
Регистрация: 24-01-06
Пользователь №: 13 541

|
Вряд ли ты прав... Хотя точно сказать не могу...
|
|
|
|
|
Jan 25 2006, 14:54
|

Участник

Группа: Свой
Сообщений: 65
Регистрация: 31-08-05
Из: Moscow
Пользователь №: 8 124

|
Цитата(BVU @ Jan 25 2006, 13:20)  Для выяснения причин данной проблемы нужно подать на вход системы (АЦП) синус 316гц, и контролировать, что получается на выходе фильтра 316гц и 430гц. Так же синус и для 430гц. Если будет 'пролаз' значит фильтры не работают, как полосовые или имеют не расчетную полосу, а на много больше. Так же характеристику фильтра можно снять при помощи анализатора спектра (Брюль и Кьер например или другой...), что еще комфортней для анализа и настройки фильра. http://webfile.ru/766585 в этом файле картинки с показаниями со входов и выходов фильтров. Да фильтр 430гц пропускает и 316 гц. Да он не работает. Вопрос ПОЧЕМУ??? Рачетные коэффициенты верны, программная реализация верна. Почему же он не работает. Может дело в математике? http://webfile.ru/769075 - это принципиальная схема. Там же на картинке 3 решаемых уравнения. Но на самом деле там есть спорный момент. По уравнениям я не вижу на втором сумматоре прибавления сигнала задержанного на 2 отсчета (который называется D2) . А если этого нет тогда то, что у меня называется "Рекурсивной частью звена", на самом деле - цифровой резонатор... Посмотрите пожалуйста! Если я прав, то этим можно объяснить то, что амплитуда сигнала частотой 316гц на выходе фильтра, расчитанного на эту частоту, в несколько раз превышает входной сигнал... Но почему тогда фильтр на 430гц одинаково резонирует как на 430 так и на 316?
|
|
|
|
|
Jan 25 2006, 15:46
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(skopus @ Jan 25 2006, 17:54)  Цитата(BVU @ Jan 25 2006, 13:20)  Для выяснения причин данной проблемы нужно подать на вход системы (АЦП) синус 316гц, и контролировать, что получается на выходе фильтра 316гц и 430гц. Так же синус и для 430гц. Если будет 'пролаз' значит фильтры не работают, как полосовые или имеют не расчетную полосу, а на много больше. Так же характеристику фильтра можно снять при помощи анализатора спектра (Брюль и Кьер например или другой...), что еще комфортней для анализа и настройки фильра. http://webfile.ru/766585 в этом файле картинки с показаниями со входов и выходов фильтров. Да фильтр 430гц пропускает и 316 гц. Да он не работает. Вопрос ПОЧЕМУ??? Рачетные коэффициенты верны, программная реализация верна. Почему же он не работает. Может дело в математике? http://webfile.ru/769075 - это принципиальная схема. Там же на картинке 3 решаемых уравнения. Но на самом деле там есть спорный момент. По уравнениям я не вижу на втором сумматоре прибавления сигнала задержанного на 2 отсчета (который называется D2) . А если этого нет тогда то, что у меня называется "Рекурсивной частью звена", на самом деле - цифровой резонатор... Посмотрите пожалуйста! Если я прав, то этим можно объяснить то, что амплитуда сигнала частотой 316гц на выходе фильтра, расчитанного на эту частоту, в несколько раз превышает входной сигнал... Но почему тогда фильтр на 430гц одинаково резонирует как на 430 так и на 316? Судя по картинкам (http://webfile.ru/766585) у фильтра происходит возбуждение - отсюда и увеличение амплитуды выходного сигнала (это видно на эффекте модуляции), по всей видимости из за неустойчивости рекурсивной части звена. Что конкретно и почему сказать немогу. Попробуйте взять за основу уже работающую на практике модель фильтра (смена математической концепции)...
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|