вычисление коэффициентов w для фильтра iir

0

Я пытаюсь реализовать фильтр IIR, который я разработал в Matlab, в программу c++ для фильтрации нежелательного сигнала из волнового файла. Fdatool в Matlab сгенерировал этот заголовок C (это фильтр с полосой пропускания):

#include "tmwtypes.h"
/* 
 * Expected path to tmwtypes.h 
 * C:\Program Files (x86)\MATLAB\R2013a Student\extern\include\tmwtypes.h 
 */
const int al = 7;
const real64_T a[7] = {
     0.9915141178644,   -5.910578456199,    14.71918523779,   -19.60023964796,
      14.71918523779,   -5.910578456199,   0.9915141178644
};
const int bl = 7;
const real64_T b[7] = {
                   1,   -5.944230431733,    14.76096188047,   -19.60009655976,
      14.67733658492,   -5.877069568864,   0.9831002459245
};

После нескольких часов исчерпывающих исследований я все еще не могу понять, как правильно использовать эти значения для определения значений W, а затем как использовать эти значения W для правильного вычисления моих Y-выходов. Если кто-либо имеет представление о заказе, эти значения должны использоваться для выполнения всех этих преобразований, это будет серьезной помощью.

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

Благодарю.

  • 0
    Может быть, это поможет. mathworks.com/help/matlab/ref/filter.html Или вы хотите реализовать это в C ++ и, следовательно, не можете использовать встроенные функции MATLAB? В этом случае вам нужно найти библиотеку C ++ IIR, которая работает аналогично filter ()
  • 0
    Я должен реализовать это в C ++ для этого проекта
Показать ещё 2 комментария
Теги:

2 ответа

0

Мне кажется, что у вас есть 3-полюсный IIR-фильтр с коэффициентами, указанными для реализации N-го порядка (в отличие от серии секций 2-го порядка). Так как это отклонение полосы (или полоса пропускания), полиномиальный порядок равен удвоенному числу полюсов.

Я не уверен, что вы подразумеваете под значениями W, если вы не пытаетесь оценить частотную характеристику этого фильтра.

Для расчета значений Y, как вы выразились, см. Эту ссылку для кода при внедрении фильтров IIR. См., В частности, код реализации N-го порядка.

http://www.iowahills.com/A7ExampleCodePage.html

BTW: Я предположил, что это коэффициенты N-го порядка и имитируют их. Я получил отметку 10 дБ при 0,05 пи. Звучит неплохо?

где B6 = 0,9915141178644. , , b0 = 0,9915141178644

a6 = 0,9831002459245. , , a0 = 1

Кроме того, вы можете задать вопрос следующим образом:

https://dsp.stackexchange.com/

0

Фильтры IIR работают следующим образом. Предполагая массив выборок A и массив ceof с именем 'c', массив результатов B будет: B [i] = (A [i] * c [0]) + (B [i- 1] * c [1]) +... + (B [n] * c [n])

Обратите внимание, что только новый элемент берется из A. Это проще сделать на месте, просто обновляйте A по мере продвижения. Эти коэффициенты фильтра очень жестоки, вы уверены, что получили их правильно? Первый также симметричен, что, вероятно, указывает на его КИХ-фильтр.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню