Сравните Односкоростные/Одноступенчатые Фильтры с Многоскоростными/Многоступенчатыми Фильтрами

Этот пример показывает увеличение эффективности, которое возможно при использовании многоскоростных и многоступенчатых фильтров для определенных приложений. В этом случае явное преимущество достигается по регулярной линейной фазе equiripple проект, когда узкая ширина полосы перехода требуется. Более подробная обработка ключевых пунктов, сделанных здесь, может быть найдена в названном Эффективном Узком КИХ-Создании фильтра Полосы Перехода примера.

Односкоростной/Одноступенчатый Проект Equiripple

Рассмотрите следующие технические требования проекта для фильтра lowpass (где пульсации даны в линейных модулях):

Fpass = 0.13;   % Passband edge
Fstop = 0.14;   % Stopband edge
Rpass = 0.001;  % Passband ripple, 0.0174 dB peak to peak
Rstop = 0.0005; % Stopband ripple, 66.0206 dB minimum attenuation
Hf = fdesign.lowpass(Fpass,Fstop,Rpass,Rstop,'linear');

Регулярная линейная фаза equiripple проект с помощью этих технических требований может быть спроектирована путем оценки следующего:

lpFilter = design(Hf,'equiripple','SystemObject',true);

Когда вы определяете стоимость этого проекта, вы видите, что требуются 695 множителей.

cost(lpFilter)
ans = struct with fields:
                  NumCoefficients: 695
                        NumStates: 694
    MultiplicationsPerInputSample: 695
          AdditionsPerInputSample: 694

Уменьшайте Вычислительную Стоимость Используя Проект Mulitrate/Multistage

Количество множителей, требуемых фильтром с помощью одного состояния, один уровень equiripple проект, 694. Это количество может быть сокращено с помощью многоскоростных/многоступенчатых методов. В любом односкоростном проекте количество умножения, требуемого каждой входной выборкой, равно количеству ненулевых множителей в реализации. Однако при помощи многоскоростного/многоступенчатого проекта, децимация и интерполяция могут быть объединены, чтобы уменьшить требуемый расчет. Для decimators среднее количество умножения, требуемого на входную выборку, дано количеством множителей, разделенных на фактор децимации.

lpFilter_multi = design(Hf,'multistage','SystemObject',true);

Можно затем просмотреть стоимость фильтра, созданного с помощью этого шага проекта, и вы видите, что было достигнуто значительное преимущество стоимости.

cost(lpFilter_multi)
ans = struct with fields:
                  NumCoefficients: 396
                        NumStates: 352
    MultiplicationsPerInputSample: 73
          AdditionsPerInputSample: 70.8333

Сравните частотные характеристики

fvt = fvtool(lpFilter,lpFilter_multi);
legend(fvt,'Equiripple design', 'Multirate/multistage design')

Заметьте, что затухание в полосе задерживания для многоступенчатого проекта приблизительно дважды больше чем это других проектов. Это вызвано тем, что decimators должен ослабить внеполосные компоненты на 66 дБ во избежание искажения, которое нарушило бы технические требования. Точно так же интерполяторы должны ослабить изображения на 66 дБ. Можно также видеть, что усиление полосы пропускания для этого проекта больше не 0 дБ, потому что каждый интерполятор имеет номинальное усиление (в линейных модулях) равный его коэффициенту интерполяции, и общий коэффициент интерполяции для этих трех интерполяторов равняется 6.

Сравните степень спектральная плотность

Можно проверять эффективность многоскоростного/многоступенчатого проекта путем графического вывода степени спектральная плотность входа и различных выходных параметров, и вы видите что синусоида в 0.4π ослабляется сравнительно и проектом equiripple и многоскоростным/многоступенчатым проектом.

n       = 0:1799;
x       = sin(0.1*pi*n') + 2*sin(0.15*pi*n');
y       = lpFilter(x);
y_multi = lpFilter_multi(x);
[Pxx,w]   = periodogram(x);
Pyy       = periodogram(y);
Pyy_multi = periodogram(y_multi);
plot(w/pi,10*log10([Pxx,Pyy,Pyy_multi]));
xlabel('Normalized Frequency (x\pi rad/sample)');
ylabel('Power density (dB/rad/sample)');
legend('Input signal PSD','Equiripple output PSD',...
    'Multirate/multistage output PSD')
axis([0 1 -50 30])
grid on

Для просмотра документации необходимо авторизоваться на сайте