12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
1

Построение АЧХ цифрового БИХ фильтра и его реализация

06.05.2014, 08:31. Показов 6528. Ответов 14
Метки нет (Все метки)

Добрый день! Заранее извиняюсь, если задаю откровенно глупые вопросы, но не могу никак въехать как построить АЧХ фильтра, расчитанногопо способу, изложенному здесь: http://www.dsplib.ru/content/f... terex.html.

По формуле https://www.cyberforum.ru/cgi-bin/latex.cgi?H\left|jw| = \sqrt[]{{Re}^{2}+{Im}^{2}} получаются две линии, пенпердикулярно сходящиеся между собой, что вообще не правильно.

По формуле https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{1+{Eps}^{2}*{W}^{2*N}} для всех типов фильтров получается лишь картина АЧХ для ФНЧ, что меня напрягает.....

Как правильно расчитывается АЧХ?

++ По способу реализации фильтра вопрос: при фильтрации спроектированным фильтром ну совсем ничего прям не происходит.

Реализация фильтра моя:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
short *IIR_Filtration(long Size,long Num_Size,long Den_Size,short *In,double *Numerator,double *Denumerator)
{
 short *Result = (short*)malloc(sizeof(short)*Size);
  for (long i = 0; i < Size; i++) Result[i] = 0;
 //Часть для входного сигнала.
 double X,Y;
 for (long i = 100; i < Size; i++)
  {
   X = 0;
   for (long j = 0; j < Num_Size; j++)
    {
     X += In[abs(i-j)]*Numerator[j];
    }
   Y = 0;
   for (long j = 1; j < Den_Size; j++)
    {
     Y += Result[abs(i-j)]*Denumerator[j];
    }
   Result[i] = X-Y;
   Result[i] = Result[i];
  }
 return Result;
}
Иллюстрирую все рисунками ниже.

Еще раз вопросы сформулирую:
1. Каким способом построить АЧХ фильтра, расчитанного по способу, приведенному по ссылке выше?
2. Верно ли я реализовал функцию фильтрации сигнала БИХ фильтром? Если нет, то как верно все сделать?

Заранее спасибо за помощь!
Миниатюры
Построение АЧХ цифрового БИХ фильтра и его реализация   Построение АЧХ цифрового БИХ фильтра и его реализация  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2014, 08:31
Ответы с готовыми решениями:

Построить АЧХ, ФЧХ цифрового фильтра и сравнить с идеальным
Здравствуйте. Нужна помощь в совершенно элементарной задаче. Итак, у меня задание: 1. Рассчитать...

Непонятные вещи творятся с АЧХ цифрового фильтра Баттерворта
Всем привет. Возникла задача отфильтровать сигнал. Срезать ВЧ. (Ну честно говоря далеко не ВЧ -...

Реализация БИХ-фильтра
Уважаемые форумчане! Еще не приходилось работать в matlab, но уже дали задание. Кто поможет с...

Получить амплитудно-частотную и фазочастотную характеристики (АЧХ и ФЧХ) цифрового рекурсивного фильтра N-го порядка
Получить амплитудно-частотную и фазочастотную характеристики (АЧХ и ФЧХ) цифрового рекурсивного...

14
2013 / 1285 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
06.05.2014, 14:09 2
Лучший ответ Сообщение было отмечено raxp как решение

Решение

Цитата Сообщение от DimKaKiber Посмотреть сообщение
Как правильно расчитывается АЧХ?
Вычисляйте преобразование фурье числителя, знаменателя, делите числитель на знаменатель и берите модуль результата. На матлабе выглядит так:
Matlab M
1
2
3
4
5
6
[b, a] = butter(6, 0.3);
a  = [a zeros(1,length(b)-length(a))];
b  = [b zeros(1,length(a)-length(b))];
h = fft(b, 512) ./ fft(a, 512);
h(end/2+1:end) = [];
figure; plot(abs(h))
Код для фильтрации лучше возьмите тут
1
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
06.05.2014, 15:14  [ТС] 3
Спасибо большое!
Только немного не догнал.....

Получается, что для построения АЧХ мне надо выполнить БПФ коэффициентов, которые я получил в результате расчета цифрового фильтра?

И сразу тогда еще один вопрос созрел: правильным ли будет произвести расчет АЧХ фильтра (его аналоговой части) через нули и полюса этого фильтра? Тогда просто не надо дополнительно БПФ производить, т. к. все операции и так идут с использованием комплексных чисел.....Или для реализации расчета "аля Матлаб" такой подход не подойдет?

За код функции фильтрации отдельное спасибо! Перед тем как тему создать форум просматривал (оказывается не достаточно внимательно) и пропустил эту тему.
0
2013 / 1285 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
06.05.2014, 15:53 4
Цитата Сообщение от DimKaKiber Посмотреть сообщение
Получается, что для построения АЧХ мне надо выполнить БПФ коэффициентов, которые я получил в результате расчета цифрового фильтра?
да. В вашем случае ачх = abs(fft(Numerator) / fft(Denominator)). abs - модуль комплексный.
Цитата Сообщение от DimKaKiber Посмотреть сообщение
правильным ли будет произвести расчет АЧХ фильтра (его аналоговой части) через нули и полюса этого фильтра?
не знаю как считать ачх через нули и полюса. Если бы передо мной стояла такая задача, я бы сначала перевел в коэффициенты (перемножил скобки), потом считал ачх. Тем более ачх цифрового фильтра может отличаться от аналогового до дискретизации(я так думаю)
1
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
06.05.2014, 15:58  [ТС] 5
Спасибо!) Про модуль то я в курсах )))))) Просто уточнял.

Если интересно, могу привести код, по которому считаю АЧХ аналогового фильтра по нулям и полюсам фильтра. По этому способу реализации фильтров у меня, как это ни странно, заработало все. Но хочется все таки уже все способы проектирования фильтров попробывать и реализовать)

А про отличия аналогового прототипа от цифрового фильтра уже я что то и не подумал......Спасибо, еще раз, Вам за направление.
0
2013 / 1285 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
06.05.2014, 16:12 6
Цитата Сообщение от DimKaKiber Посмотреть сообщение
Если интересно, могу привести код, по которому считаю АЧХ аналогового фильтра по нулям и полюсам фильтра.
скиньте, интересно
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
06.05.2014, 16:31  [ТС] 7
Источник http://www.mikroe.com/chapters/view/73/#id32

Авторы хитрые - в разных местах книжки - формулы разные приводят, но все просчитывается нормально, когда вдумываешся.

Вот код функции для получения точки АЧХ фильтра (для ФНЧ) на определенной частоте (Freq = 0...Пи). Частота в рад/с.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
long double ACHX_Butter_LPF(long N,double Tetta,double *Poles,double Freq)// АЧХ фильтра Баттерворта считаю.
{
 long double Point;
  TComplex A,B,C,D;
 //Рсчитываю нижнее произведение. Результаты вычитания в скобках друг на друга домножаю.
 for (long i = 0; i < 2*N; i++)
  {
   if (i == 0) 
    {
     A.a = 0; A.b = 0;
     B.a = 0; B.b = 0; 
     C.a = 0; C.b = 0;
     A.a = 0; A.b = Freq;
     B.a = Poles[i]; i++; B.b = Poles[i];
     C = Raznost_Complex(A,B);     
    }
    else
     {   
      A.a = 0; A.b = 0;
      B.a = 0; B.b = 0; 
      A.a = 0; A.b = Freq;
      B.a = Poles[i]; i++; B.b = Poles[i];
      D.a = 0; D.b = 0;
      D = Raznost_Complex(A,B);
      A.a = 0; A.b = 0;
      A.a = C.a; A.b = C.b;
      C.a = 0; C.b = 0;
      C = Multiply_Complex(A,D);
     }
  }
  //Делю теперь знаменатель на числитель
  A.a = 0; A.b = 0;
  B.a = 0; B.b = 0;
  A.a = pow(Tetta,N); A.b = 0;
  B.a = C.a; B.b = C.b;
  C.a = 0; C.b = 0;
  C = Div_Complex(A,B);
  //Результирующая точка.
  Point = sqrt(pow(C.a,2)+pow(C.b,2));
 return Point;
}

Тут соответственно идут операции с комплексными числами (C,A,B,D). Частоту подставляю с шагом 0.01 подставляю (в результате - 100 точек на графике)

TComplex - для своего удобства сделал класс комплексных чисел, для которого сам уже все операции прописал.

Расчет полюсов веду так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double *PolesOfButter_LPF(long N,long SampleRate,long BP) //Расчет полюсов ФНЧ Баттерворта
{
//Считаем нормированную полосу среза.
 double Tetta = tan(M_PI*(BP/(float)SampleRate));
 double *Poles = (double*)malloc(sizeof(double)*(N*2));//массив, содержащий значение нолей и полюсов фильтра
 long Count;
  Count = -1;
 for (long i = 0; i < N; i++)
  {
   Count++;
   Poles[Count] = Tetta*cos(M_PI*(0.5+((2*i+1)/(float)(2*N))));//Действительная часть
   Count++;
   Poles[Count] =  Tetta*sin(M_PI*(0.5+((2*i+1)/(float)(2*N))));//Мнимая часть.
  }
 return Poles;
}
Но это для аналогового нормированного на нужную частоту среза фильтра нижних частот.
Буду делать (как закончу одну вещь писать) как Вы посоветовали, т. к. весь интерес то АЧХ именно цифрового фильтра получить.....Работать то с ним дальше.
1
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
12.05.2014, 11:33  [ТС] 8
Спасибо большое за подсказку по расчету АЧХ цифрового фильтра!

А ФЧХ вычисляется таким же способом? или какой то другой подход приеняется?
0
2013 / 1285 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
12.05.2014, 12:29 9
Цитата Сообщение от DimKaKiber Посмотреть сообщение
А ФЧХ вычисляется таким же способом?
да. Так же как ачх - модуль комплексной афчх, фчх ее аргумент. То есть atan2(imag(H), real(H)). Только надо еще немного поколдовать с переходами через pi, чтобы она была гладкой
0
5 / 5 / 3
Регистрация: 19.04.2014
Сообщений: 20
14.05.2014, 23:33 10
Для цифрового фильтра комплексный к-т передачи равен

https://www.cyberforum.ru/cgi-bin/latex.cgi?H\left(e^{jw} \right)  = \frac{\sum_{n=0}^{N} b_n \cdot e^{-jwn}}{\sum_{m=0}^{M} a_m \cdot e^{-jwm}}

АЧХ есть модуль ФЧХ - фаза.
a и b это коэффициенты фильтра, w частота от 0 до pi. Надо лишь задать вектор частоты и посчитать в комплексной арифметике.
1
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
15.05.2014, 08:14  [ТС] 11
Спасибо.
Но перед тем как создавать тему я расчитывал комплексный коэффициент передачи по формуле, предложенной вами, затем расчитывал АЧХ аналогового прототипа путем подстановки в полученное выражение для его https://www.cyberforum.ru/cgi-bin/latex.cgi?\left|H(j\omega ) \right|. После этого (т. к. видел, что картинки что то сильно отличаются) сделал расчет АЧХ цифрового фильтра по способу, предложенному vital792 (во втором посте этой темы). Если честно, то не совсем уверен, что все правильно получается.

Вообще - должны ли быть получаемые графики (значения АЧХ фильтра) полностью одинаковыми, или у меня все верно получается?

Ниже картинки приведу для расчитанного через нули и полюса ФНЧ Баттерворта.
Частота дискретизации: 20000
Полоса пропускания: 4000 Гц.
Полоса заграждения: 5000 Гц.
Подавление в полосе пропускания: 1 Дб.
Подавление в полосе заграждения: 30 Дб.

Ниже картинки привожу:
1. Комплексный коэффициент передачи цифрового фильтра.
2. АЧХ аналогового нормированного фильтра.
3. АЧХ цифрового фильтра по способу vital792.
Миниатюры
Построение АЧХ цифрового БИХ фильтра и его реализация   Построение АЧХ цифрового БИХ фильтра и его реализация   Построение АЧХ цифрового БИХ фильтра и его реализация  

0
5 / 5 / 3
Регистрация: 19.04.2014
Сообщений: 20
15.05.2014, 20:09 12
надо понять что вы хотите? Вам нужна АЧХ аналогового фильтра или цифрового? Если цифрового то надо использовать формулу которую я привел. Если аналогового то надо использовать коэффициенты передаточной характеристики именно аналогового фильтра (они совсем разные с цифровым фильтром) и использовать следующую формулу для комплексного коэффициента передачи
https://www.cyberforum.ru/cgi-bin/latex.cgi?H(jw) = \frac{\sum_{n = 0}^{N} b_n \cdot (jw)^n}{\sum_{m = 0}^{M} a_m \cdot (jw)^m}

здесь w уже частота от 0 до бесконечности рад/с.

АЧX это модуль передаточной характеристики.

На ваших картинках не совсем ясно что имеется ввиду на првом графике где написано комплексный к-т передачи.
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
16.05.2014, 07:15  [ТС] 13
По первому графику - возможно, я неверно написал. По источнику http://www.mikroe.com/chapters/view/73/#id32 словосочетание impulse response coefficients - дословно коэффициенты импульсной характеристики. График строится по импульсной характеристике уже готового цифрового фильтра.

Задача стоит - построить АЧХ как аналогового, так и цифрового фильтров. Это я для себя её определил, т. к. это важно для моего понимания сути построения цифровых фильтров, а также при отладке приложения (если не получается правильно расчитать аналоговый прототип фильтра, то и нет смысла до получения верного результата расчитывать цифровой).
0
5 / 5 / 3
Регистрация: 19.04.2014
Сообщений: 20
16.05.2014, 20:22 14
Опять не понятно график чего строится по импульсной характеристике? И вообще как вы это делаете если импульсная характеристика бесконечна?

IIR фильтры обычно рассчитывают на основе аналоговых ФНЧ - прототипов с дальнейшими частотными преобразованиями и переводом передаточной характеристики аналогового прототипа в цифровую область при помощи билинейного преобразования. здесь целая куча материала как это надо делать.
0
12 / 12 / 0
Регистрация: 20.11.2013
Сообщений: 167
18.05.2014, 09:38  [ТС] 15
Реализую метод, изложенный тут - http://www.mikroe.com/chapters/view/73/#id32.
На графике импульсная характеристика расчитанного цифрового фильтра, которая считается способом, предложенным авторами этого пособия в п. 3.2.3 Transfer function of discrete-time systems.

На последнем графике как раз представленна АЧХ цифрового фильтра, расчитанная по http://www.dsplib.ru/content/filters/ch1/ch1.html.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2014, 09:38
Помогаю со студенческими работами здесь

Kit-модуль MSP-EXP430G2. Реализация цифрового фильтра
Здравствуйте знатоки. Кто-нибудь из вас пытался реализовать на базе контроллера MSP-EXP430G2...

Какой метод синтеза фильтра обеспечивает наименьшее число параметров фильтра при заданных ограничениях АЧХ?
Доброго времени суток! Подскажите пожалуйста,какой метод синтеза фильтра обеспечивает наименьшее...

Нормировка коэффициентов БИХ-фильтра
Здравствуйте все! У меня есть БИХ ФВЧ. Фильтр второго порядка, коэффициенты: A1 =...

Разработать структуру БИХ-фильтра
В матлабе рисую структуру, нажимаю на Run, выдает ошибку. В чем причина? вот стуктура

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

Принцип фильтрации цифрового фильтра
Здравствуйте. В данный момент стоит задача разобраться с цифровыми фильтрам. Математические...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru