реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Децимирующий КИХ фильтр, Завал АЧХ после децимации
ilynxy
сообщение Oct 18 2014, 10:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 11-04-10
Пользователь №: 56 562



Доброго всем.

Уважаемые! Поясните пожалуйста, почему после децимирующего FIR "классический" анализ ответа фильтра на ступеньку (единичная функция) выдаёт неправильные результаты. А анализ ответа на ГКЧ (или просто на набор синусоид) -- правильные.

Вот код MATLAB, где я моделирую подобное измерение:
Код
% классическая ступенька
x = [zeros(1, 1024*m) ones(1, 1024*m)];

% Фильтр на ~1/4 исходной полосы, с подавлением 100 dB
Fp  = 0.20;
Fst = 0.25;
Ap  = 0.0001;
Ast = 100;

hf = design(fdesign.lowpass('Fp,Fst,Ap,Ast', Fp, Fst, Ap, Ast));

% Фильтруем сигнал
y = filter(hf, x);

% Децимируем в 4 раза (имеем право, теорема Котла не нарушена, отрезали
% всё что выше с помощью FIR фильтра)
k = 4;
y_decim = downsample(y, k);

% классика жанра: FFT от дифференциала ответа на ступеньку
PRy = 20*log10(abs(fft(diff(y))));
% и для децимированного сигнала
PRy_decim = 20*log10(abs(fft(diff(y_decim))));

% Рисуем спектр
Fx = [0:length(PRy)-1] / length(PRy) * 2;
Fx_decim = [0:length(PRy_decim)-1] / length(PRy_decim) / k * 2;
plot(Fx, PRy, Fx_decim, PRy_decim);


И получается, что после децимации дифференциал ответа на ступеньку даёт завал АЧХ в конце где-то на 3 dB. Если поэкспериментировать с децимацией (например, сделать в два раза), то завал уменьшится.


Собственно вопрос: почему так происходит?
И попутный вопрос: как исследовать характеристики фильтра "в живой природе"? Получается, что если фильтр децимирующий, то исследовать его характеристики методом подачи "единичной функции" нельзя? В более общем случае: если я не знаю характеристики системы и мне нужно построить её АЧХ, то я не имею права исследовать воздействуя на неё единичной функцией и получая спектр дифференциала ответа?

Сообщение отредактировал ilynxy - Oct 18 2014, 11:48
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 18 2014, 10:29
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



1. Кто вас научил исследовать фильтры с помощью функции Хевисайда вместо дельта-функции?
2. Как модератор предлагаю вам самостоятельно убрать нарушения правила форума 2.1в, до того как этим займется модератор раздела.


--------------------
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 18 2014, 11:00
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



нет здесь никакой функции хевисайда. есть дискретная ед ступень. ее дифф даст дискретную дельта-функцию. другое дело, что дифф надо применять к сигналу до децимации или тупо подать на вход фильтра дискретную дельта-функцию.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 18 2014, 12:20
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(thermit @ Oct 18 2014, 18:00) *
нет здесь никакой функции хевисайда. есть дискретная ед ступень. ее дифф даст дискретную дельта-функцию. другое дело, что дифф надо применять к сигналу до децимации или тупо подать на вход фильтра дискретную дельта-функцию.

вы гуру, вам виднее. но на мой взгляд
Код
% классическая ступенька
x = [zeros(1, 1024*m) ones(1, 1024*m)];

а дискретная функция хевисайда определена на двух интервалах < 0 и >= 0 http://dic.academic.ru/dic.nsf/ruwiki/913201
Конечно могу ошибаться.


--------------------
Go to the top of the page
 
+Quote Post
ilynxy
сообщение Oct 18 2014, 12:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 11-04-10
Пользователь №: 56 562



Цитата(des00 @ Oct 18 2014, 14:29) *
1. Кто вас научил исследовать фильтры с помощью функции Хевисайда вместо дельта-функции?
Возможно я что-то плохо понимаю. Вот как я это представляю:
а) у меня есть чёрный ящик с передаточной функцией y = H(x);
б) мне необходимо получить АЧХ и ФЧХ этого чёрного ящика;
в) в идеальном моделировании на вход подаётся дельта-функция и по ответу делаются выводы
в1) в неидеальном мире дельта-функцию имитировать сложно, более того, я знаю, что чёрный ящик содержит АЦП и КИХ-фильтр, поэтому я принимаю решение подать на вход функцию Хэвисайда. Исходя из того что дельта-функция d(x) есть производная от функции Хевисайда Hevi'(x), я делаю предположение что, y = H(d(x)) = H'(Hevi(x)). Иными словами, ответ передаточной функции на дельта импульс равен дифференциалу ответа передаточной функции на функцию Хэвисайда. Очевидно, что это неверно в общем случае. Однако во множестве источников предлагается такой метод, наряду с использованием генератора качающейся частоты (теста синусоидами на разных частотах).

Характер полученной АЧХ я могу объяснить и понимаю, почему он получается "заваленым". После децимации дифференциал от функции Хевисайда получается усреднённым по степени децимации (то есть усреднение по двум отсчётам в случае децимации в два раза или по четырём в случае децимации в четыре раза). И выходная характеристика получается произведением АЧХ КИХ фильтра и АЧХ "усреднятеля по двум/четырем/n-отсчётам" (это sinc функция). Собственно завал на графике и есть спад sinc функции.

Отсюда возникает вопрос: а как всё-таки правильно исследовать АЧХ/ФЧХ чёрного ящика имея генератор сигналов и осциллограф/рекордер? Если исследовать дельта-функцией, то какой длительности она должна быть? Если исследовать функцией Хэвисайда, то по очевидным причинам дифференциал ответа на функцию Хэвисайда в общем случае не равен ответу на дельта-функцию. Если исследовать с помощью ГКЧ упираемся в неидеальность генератора (всё-таки сгенерировать ступеньку с условно бесконечным спектром несколько проще чем синусоиды на разных частотах).


Цитата(des00 @ Oct 18 2014, 14:29) *
2. Как модератор предлагаю вам самостоятельно убрать нарушения правила форума 2.1в, до того как этим займется модератор раздела.
Если честно, я не понял, что именно нарушено? Грамматика, содержание?
Go to the top of the page
 
+Quote Post
andyp
сообщение Oct 18 2014, 13:15
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(ilynxy @ Oct 18 2014, 16:28) *
Возможно я что-то плохо понимаю. Вот как я это представляю:
а) у меня есть чёрный ящик с передаточной функцией y = H(x);
б) мне необходимо получить АЧХ и ФЧХ этого чёрного ящика;
в) в идеальном моделировании на вход подаётся дельта-функция и по ответу делаются выводы
в1) в неидеальном мире дельта-функцию имитировать сложно, более того, я знаю, что чёрный ящик содержит АЦП и КИХ-фильтр, поэтому я принимаю решение подать на вход функцию Хэвисайда. Исходя из того что дельта-функция d(x) есть производная от функции Хевисайда Hevi'(x), я делаю предположение что, y = H(d(x)) = H'(Hevi(x)). Иными словами, ответ передаточной функции на дельта импульс равен дифференциалу ответа передаточной функции на функцию Хэвисайда. Очевидно, что это неверно в общем случае. Однако во множестве источников предлагается такой метод, наряду с использованием генератора качающейся частоты (теста синусоидами на разных частотах).

Характер полученной АЧХ я могу объяснить и понимаю, почему он получается "заваленым". После децимации дифференциал от функции Хевисайда получается усреднённым по степени децимации (то есть усреднение по двум отсчётам в случае децимации в два раза или по четырём в случае децимации в четыре раза). И выходная характеристика получается произведением АЧХ КИХ фильтра и АЧХ "усреднятеля по двум/четырем/n-отсчётам" (это sinc функция). Собственно завал на графике и есть спад sinc функции.

Отсюда возникает вопрос: а как всё-таки правильно исследовать АЧХ/ФЧХ чёрного ящика имея генератор сигналов и осциллограф/рекордер? Если исследовать дельта-функцией, то какой длительности она должна быть? Если исследовать функцией Хэвисайда, то по очевидным причинам дифференциал ответа на функцию Хэвисайда в общем случае не равен ответу на дельта-функцию. Если исследовать с помощью ГКЧ упираемся в неидеальность генератора (всё-таки сгенерировать ступеньку с условно бесконечным спектром несколько проще чем синусоиды на разных частотах).


Во-первых внутри downsample тоже используется ФНЧ (скорее всего c ИХ вида sinc, умноженный на окно), полоса которого уже чем 0.25 Fs. Отсюда завал на 6 dB. Во-вторых дециматор не является LTI системой (linear time invariant, не знаю как по-русски). В спектре выходного сигнала после него появляются составляющие, которых до него там не было. Зачем тогда говорить про АЧХ-ФЧХ...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 18 2014, 14:25
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Undefined function or variable 'm'.
MATLAB R2012a
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 18 2014, 14:54
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(des00 @ Oct 18 2014, 16:20) *
вы гуру, вам виднее. но на мой взгляд
Код
% классическая ступенька
x = [zeros(1, 1024*m) ones(1, 1024*m)];

а дискретная функция хевисайда определена на двух интервалах < 0 и >= 0 http://dic.academic.ru/dic.nsf/ruwiki/913201
Конечно могу ошибаться.


можете. и ошибаетесь.

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

Go to the top of the page
 
+Quote Post
V_G
сообщение Oct 18 2014, 15:12
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(ViKo @ Oct 19 2014, 00:25) *
Undefined function or variable 'm'.
MATLAB R2012a

перед тем, как вставить код в Матлаб, положите m=1.
Это всего лишь определяет число точек в обрабатываемых массивах, т.е. степень подробности АЧХ
Go to the top of the page
 
+Quote Post
ilynxy
сообщение Oct 18 2014, 16:27
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 11-04-10
Пользователь №: 56 562



Цитата(andyp @ Oct 18 2014, 17:15) *
Во-первых внутри downsample тоже используется ФНЧ (скорее всего c ИХ вида sinc, умноженный на окно), полоса которого уже чем 0.25 Fs. Отсюда завал на 6 dB. Во-вторых дециматор не является LTI системой (linear time invariant, не знаю как по-русски). В спектре выходного сигнала после него появляются составляющие, которых до него там не было. Зачем тогда говорить про АЧХ-ФЧХ...
Спасибо за наводку про LTI. Действительно дециматор не является LTI поэтому применять дифференциацию функции Хэвисайда неправомерно, сначала нужно привести в тот же временной домен (interpolate), что приведет (в идеале) к недецимированному сигналу. Значит остается только один способ - ГКЧ. Спасибо всем, в голове всё уложилось.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 18 2014, 17:18
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(des00 @ Oct 18 2014, 13:29) *
Кто вас научил исследовать фильтры с помощью функции Хевисайда вместо дельта-функции?

https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%86%D0%B8%D1%8F
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 18 2014, 18:40
Сообщение #12


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Если нарисовать разность между y_decim и у, прореженным вручную (индексом), то можно увидеть, что она не нулевая. Похоже, downsample еще и фильтрует.
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 18 2014, 19:31
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(ViKo @ Oct 18 2014, 22:40) *
Если нарисовать разность между y_decim и у, прореженным вручную (индексом), то можно увидеть, что она не нулевая. Похоже, downsample еще и фильтрует.


не надо телепатии и прочей кофейной гущи.
для того, что бы убедиться в отсутствии фильтрации достаточно посмотреть в исходники.
updownsample - добавление нулей/выкидывание отсчетов.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 18 2014, 20:31
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(thermit @ Oct 18 2014, 22:31) *
не надо телепатии и прочей кофейной гущи.
для того, что бы убедиться в отсутствии фильтрации достаточно посмотреть в исходники.
updownsample - добавление нулей/выкидывание отсчетов.

Код
figure;
for N = 1:2047/k
  Err(N) = y(N*k) - y_decim(N);
end
hold on;
plot(y_decim);
plot(Err,'r');
hold off;

Где посмотреть исходник?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 18 2014, 20:54
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(ViKo @ Oct 19 2014, 00:31) *
Код
figure;
for N = 1:2047/k
  Err(N) = y(N*k) - y_decim(N);
end
hold on;
plot(y_decim);
plot(Err,'r');
hold off;

Где посмотреть исходник?


прикольная картинка. метод тоже подкупает своей нетривиальностью.
исходники в файле updownsample.m
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 06:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01553 секунд с 7
ELECTRONIX ©2004-2016