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

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

Односкоростная/одноступенчатая проект равновесия

Рассмотрите следующие проектные спецификации для 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');

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

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

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

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

Уменьшите вычислительные затраты с помощью Mulitrate/Multistage Design

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

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')

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Equiripple design, Multirate/multistage design.

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

Сравнение Степени спектральных плотностей

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

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

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Input signal PSD, Equiripple output PSD, Multirate/multistage output PSD.

Похожие темы

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