Полосовой фильтр (MatLab)

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

Warning: The output is not correct/robust. Coeffs of
B(s)/A(s) are real, but B(z)/A(z) has complex coeffs.
Probable cause is rooting of high-order repeated poles in
A(s).

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Полосовой фильтр (MatLab)

Сообщение Бахурин Сергей »

Конечно скажется на работе у вас предупреждение гласит что вы получили комплексные к-ты цифрового фильтра из аналогового прототипа. Замените impinvar на bilinear. Должно помочь.

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

Если я заменю на bilinear у меня получится, такая вот картинка АЧХ и спектра сигнала на выходе фильтра.
Вложения
Новый точечный рисунок.jpg
Безымянный.jpg

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

Видно, что АЧХ имеет в центральную частоту где-то 5 МГц и 23 МГц, а должно быть 7 МГц и 21 МГц и полоса 10 МГц

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

Вот написал код в матлабе с помощью функции bilinear и получил след.

Код: Выделить всё

Center_frequency=14;                          % Центральная частота аналогового полосового фильтра
[b,a]=butter(5,[2*pi*(Center_frequency-10) 2*pi*(Center_frequency+10)],'s'); % Синтез коэффициентов аналогового фильтра 
[bz,az]=bilinear(b,a,fs);                       
[hz,wz]=freqz(bz,az,[],fs,'whole');           % Комплексный коэффициент передачи цифрового фильтра
h=freqs(b,a,2*pi*wz);                         % Комплексный коэффициент передачи аналогового фильтра
%plot(wz,abs(h),':')                           % График ЧХ аналогового фильтра  
%hold on
plot(wz,abs(hz))                              % График ЧХ цифрового фильтра 
%hold off
xlabel('f (МГц)')
xlim([0,fs])
title('Частотная характеристика цифрового фильтра')
grid on
А вот АЧХ получил. Что-то не могу понять изменил центральную частоту можно сказать на бум, полосу пропускания вместо 5 поставил 10 и в результате получил такую АЧХ, верно сделал или нет я не знаю, помогите разобратся с этим вопросом
Вложения
Новый точечный рисунок.jpg

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Полосовой фильтр (MatLab)

Сообщение Бахурин Сергей »

при переходе от аналогового фильтра к цифровому ось частот искажается нелинейно (смотри этот раздел).

Поэтому вы и получили искажение частот при переходе от аналогового фильтра к цифровому.
Вы можете пойти двумя путями:
1) Учесть это искажение и провести перерасчет аналогового фильтра так чтобы частоты встали на свои места
2) Расчитывать сразу цифровой фильтр при помощи функции butter

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

Код: Выделить всё

% Цифровой полосовой фильтр f0=21 МГц, полоса пропускания 10 МГц.
Center_frequency=14;                          % Центральная частота аналогового полосового фильтра
[b,a]=butter(5,[(Center_frequency-10) (Center_frequency+10)]/fs); % Синтез коэффициентов аналогового фильтра                  
[hz,wz]=freqz(b,a,[],fs,'whole');           % Комплексный коэффициент передачи цифрового фильтра
plot(wz,abs(hz))                              % График ЧХ цифрового фильтра 
xlabel('f (МГц)')
xlim([0,fs])
title('Частотная характеристика цифрового фильтра')
grid on

т.е. будет так? где fs=28

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

а Вот АЧХ
Вложения
Новый точечный рисунок.jpg

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Полосовой фильтр (MatLab)

Сообщение Бахурин Сергей »

да так должно быть лучше

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Полосовой фильтр (MatLab)

Сообщение Андрей1991 »

Не стал создавать новую тему. Если применяется субдискретизация т.е. частота дискретизации ниже частоты которая выбирается из теоремы Котельникова, а зачем это делается. Я правильно понимаю, что это зависит от АЦП и на какой частоте дискретизации он работает? Если да т.е. зависит от АЦП, то всегда ли нужно ставить перед АЦП фильтр, который будет срезать частоты? В интернете нашел вот такую запись: Субдискретизация — Дискретизация сигнала с частотой ниже, чем выбранная по теореме Котельникова. Используется, когда спектр сигнала ограничен не только сверху, но и снизу. Для устранения эффекта наложения спектров используется полосовой антиалиасный фильтр. Меня сильно смутило то, что используется когда спектр сигнала ограничен т.е. если он ограничен то зачем ставить фильтр, не пойму эту запись? Расскажите.

Ответить