|
Создание фильтра в MATLAB и его реальное применение |
|
|
|
Aug 14 2013, 09:06
|
Группа: Новичок
Сообщений: 7
Регистрация: 29-11-10
Из: Минск
Пользователь №: 61 249

|
 Вот результаты моделирования Вашего фильтра с нормированными коэффициентами. Виден спад АЧХ из-за нормирования коэффициентов фильтра. Лучше пользоваться стандартной функцией fdatool для нормировки коэффициентов.  На скриншоте виден спад из-за квантования (штриховая - необходимая Вам АЧХ). Кроме того фильтр нестабилен, что тоже не очень хорошо.
Сообщение отредактировал BooZe - Aug 14 2013, 09:11
|
|
|
|
|
Aug 26 2013, 18:01
|

пуля
   
Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959

|
Помоему из этого: Цитата ...также фильтруются и портят алгоритм (поскольку с помощью фильтра я определяю переход синусоиды через 0). следует что Вы или не тот алгоритм взяли, или фильтр не тот или Вам вообще фильтрация не нужна. И давайте лучше сначала (поскольку речь вые шла только про фильтры), Вы что хотите из сигнала "выудить"?
|
|
|
|
|
Aug 27 2013, 15:38
|

пуля
   
Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959

|
Цитата но также фильтруются и портят алгоритм Каким образом, покажите. И давайте больше информации, тут нет телепатов) Верхний и нижний график это после фильтра или как? Покажите лучше исходный сигнал, со всеми вариантами шума. И.. попробуйте загнать данные сначала в матлаб, там его как следует обработать, ну и потом выбирайте алгоритм. ну и Вы не до конца ответили на вопрос... зачем вам переход через ноль? Вы, надеюсь, в курсе, что выход фильтра имеет "запаздывание" по выходу? Может Вам просто полосовой фильтр на основную частоту попробовать?
|
|
|
|
|
Nov 11 2013, 18:30
|
Группа: Новичок
Сообщений: 3
Регистрация: 9-04-13
Пользователь №: 76 428

|
помогите разобраться делаю фильтр так: ------- BIQUADS=3; fs=48000; fc=450; fn=fc/fs; [b,a]=butter(2*BIQUADS,fn); [sos,g]=tf2sos(b,a); sos=sos'; d=[0,0]; fp2=fopen('low.dat','w'); for i=1:BIQUADS, j=(i-1)*6; sos(j+4:j+6)=-sos(j+4:j+6); fprintf(fp2,'%2.20e,\n',sos(j+1)); fprintf(fp2,'%2.20e,\n',sos(j+2)); fprintf(fp2,'%2.20e,\n',sos(j+5)); fprintf(fp2,'%2.20e,\n',sos(j+3)); fprintf(fp2,'%2.20e,\n',sos(j+6)); fprintf(fp2,'%2.20e,\n',d(1)); fprintf(fp2,'%2.20e,\n',d(2)); end fprintf(fp2,'%2.20e\n',g); fclose(fp2); ---------- дальше эти коэф загружаю в adsp хочу посмотреть график: freqz(b,a,2048,2000); выводится график, но частота среза раз в 10 ниже (примерно 45гц) пока два вопроса 1 правильно ли я расчитваю коэфф 2 почему неправильно рисуется график спс
|
|
|
|
|
Nov 12 2013, 09:12
|

Частый гость
 
Группа: Свой
Сообщений: 89
Регистрация: 24-10-10
Из: Санкт-Петербург
Пользователь №: 60 386

|
fn - это же нормализованная частота? Она должна считаться как f/(Fs/2). АЧХ вывожу командой: Код h = fvtool(b,a); set(h, 'Fs', fs); Вроде, совпадает с заданной.
Сообщение отредактировал SemperAnte - Nov 12 2013, 09:22
|
|
|
|
|
Nov 12 2013, 11:20
|
Группа: Новичок
Сообщений: 3
Регистрация: 9-04-13
Пользователь №: 76 428

|
fs - частота квантования (48 кгц) fc - частота среза фильтра (450 гц) fn =2*fc/fs - я правильно понял?
|
|
|
|
|
Nov 12 2013, 11:39
|

Частый гость
 
Группа: Свой
Сообщений: 89
Регистрация: 24-10-10
Из: Санкт-Петербург
Пользователь №: 60 386

|
Цитата(_VGA_ @ Nov 12 2013, 15:20)  fs - частота квантования (48 кгц) fc - частота среза фильтра (450 гц) fn =2*fc/fs - я правильно понял? Да, так. Отношение частоты среза к частоте Найквиста. В Matlab примере на функцию butter это показано (по крайней мере, в моей 2012b версии).
|
|
|
|
|
Nov 12 2013, 12:54
|
Группа: Новичок
Сообщений: 3
Регистрация: 9-04-13
Пользователь №: 76 428

|
там хелп есть? ну я и бестолочь  Спасибо получилось, красиво; теперь я хочу фнч и фвч с одинаковой частотой среза вывести на график (результирующую) это возможно?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|