exponenta event banner

designMultistageDecimator

Многоступенчатая конструкция прореживателя

Описание

C = designMultistageDecimator(M) конструирует многоступенчатый прореживатель, который имеет общий коэффициент прореживания M. Для C многоступенчатый, M не должно быть простым числом. Дополнительные сведения см. в разделе Алгоритмы. Процесс проектирования может занять некоторое время, если M имеет много факторов.

пример

C = designMultistageDecimator(M,Fs,TW) конструирует многоступенчатый прореживатель с частотой дискретизации Fs и ширина перехода TW. Частота дискретизации в этом случае относится к входной частоте дискретизации сигнала перед многоступенчатым прореживателем.

Многоступенчатый прореживатель имеет частоту отсечки, равную Fs/(2M).

пример

C = designMultistageDecimator(M,Fs,TW,Astop) задает минимальное ослабление, равное Astop дБ для результирующей конструкции.

пример

C = designMultistageDecimator(___,Name,Value) задает дополнительные параметры конструкции, используя один или несколько аргументов пары имя-значение.

Пример: C = designMultistageDecimator(48,48000,200,80,'NumStages','auto') конструирует многоступенчатый прореживатель с наименьшим количеством умножений на входную выборку (MPIS).

Примеры

свернуть все

Спроектируйте одноступенчатый прореживатель с помощью designMultirateFIR и многоступенчатый прореживатель с использованием designMultistageDecimator функция. Определите эффективность двух конструкций с помощью cost функция. Эффективность внедрения характеризуется двумя показателями затрат - NumCoefficients и MultiplicationsPerInputSample.

Вычислите стоимость внедрения обеих конструкций и определите, какая конструкция является более эффективной. Для сравнения сконструируйте фильтры таким образом, чтобы их ширина перехода была одинаковой.

Инициализация

Выберите коэффициент прореживания 48, частоту входных выборок 30,72 × 48 МГц, одностороннюю полосу пропускания 10 МГц и затухание полосы останова 90 дБ.

M = 48;
Fin = 30.72e6*M;
Astop = 90;
BW = 1e7;

Использование designMultirateFIR Функция

Проектирование фильтра прореживания с использованием designMultirateFIR функция дает одноступенчатую конструкцию. Установите длину полуполифазы в конечное целое число, в данном случае 8.

HalfPolyLength = 8;
b = designMultirateFIR(1,M,HalfPolyLength,Astop);
d = dsp.FIRDecimator(M,b)
d = 
  dsp.FIRDecimator with properties:

     NumeratorSource: 'Property'
           Numerator: [1x768 double]
    DecimationFactor: 48
           Structure: 'Direct form'

  Show all properties

Вычислите стоимость внедрения прореживателя. Прореживающий фильтр требует 753 коэффициента и 720 состояний. Количество умножений на входную выборку и добавлений на входную выборку равно 15.6875 и 15.6667соответственно.

cost(d)
ans = struct with fields:
                  NumCoefficients: 753
                        NumStates: 720
    MultiplicationsPerInputSample: 15.6875
          AdditionsPerInputSample: 15.6667

Использование designMultistageDecimator Функция

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

Fc = Fin/(2*M);
TW = 2*(Fc-BW);

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

c = designMultistageDecimator(M,Fin,TW,Astop)
c = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]
    Stage3: [1x1 dsp.FIRDecimator]
    Stage4: [1x1 dsp.FIRDecimator]

Вызов info функция на c показывает, что фильтр реализован в виде каскада из четырех dsp.FIRDecimator с коэффициентами прореживания 3, 2, 2 и 4 соответственно.

Вычислите стоимость внедрения прореживателя.

cost(c)
ans = struct with fields:
                  NumCoefficients: 78
                        NumStates: 99
    MultiplicationsPerInputSample: 7.2708
          AdditionsPerInputSample: 6.6667

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

Сравните амплитудную характеристику обеих конструкций.

fvtool(b,c)
legend('Single-stage','Multistage')

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 2 objects of type line. These objects represent Single-stage, Multistage.

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

Использование 'design' Опция в designMultistageDecimator Функция

Фильтр можно сделать еще более эффективным, установив 'CostMethod' аргумент designMultistageDecimator функция для 'design'. По умолчанию этот аргумент имеет значение 'estimate'.

В 'design' функция проектирует каждый этап и вычисляет порядок фильтрации. Это дает оптимальную конструкцию по сравнению с 'estimate' режим, в котором функция оценивает порядок фильтров для каждой стадии и проектирует фильтр на основе оценки.

Обратите внимание, что 'design' опция может занять гораздо больше времени по сравнению с 'estimate' вариант.

cOptimal = designMultistageDecimator(M,Fin,TW,Astop,'CostMethod','design')
cOptimal = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]
    Stage3: [1x1 dsp.FIRDecimator]
    Stage4: [1x1 dsp.FIRDecimator]

cost(cOptimal)
ans = struct with fields:
                  NumCoefficients: 70
                        NumStates: 93
    MultiplicationsPerInputSample: 7
          AdditionsPerInputSample: 6.5417

Спроектируйте прореживатель с общим коэффициентом прореживания 24, используя designMultistageDecimator функция. Сконструируйте фильтр в двух конфигурациях:

  • Двухступенчатая конфигурация - NumStages имеет значение 2.

  • Автоматическая настройка - NumStages имеет значение 'Auto'. В этой конфигурации создается фильтр с наименьшим количеством умножений на входную выборку.

Сравните cost реализации обеих конфигураций.

Инициализация

Выберите коэффициент прореживания 24, частоту входных выборок 6 кГц, затухание полосы останова 90 дБ и ширину перехода 0,03 × 60002.

M = 24;
Fs = 6000;
Astop = 90;
TW = 0.03*Fs/2;

Проектирование фильтра

Спроектируйте два фильтра с помощью designMultistageDecimator функция.

cAuto = designMultistageDecimator(M,Fs,TW,Astop,'NumStages','Auto')
cAuto = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]
    Stage3: [1x1 dsp.FIRDecimator]

cTwo = designMultistageDecimator(M,Fs,TW,Astop,'NumStages',2)
cTwo = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]

Просмотр информации о фильтре с помощью info функция. 'Auto' конфигурация конструирует каскад из трех дециматоров FIR с коэффициентами децимации 2, 3 и 4 соответственно. Двухступенчатая конфигурация предусматривает каскад из двух дециматоров КИХ с коэффициентами прореживания 4 и 6 соответственно.

Сравнение затрат

Сравните затраты на реализацию двух проектов с помощью cost функция.

cost(cAuto)
ans = struct with fields:
                  NumCoefficients: 73
                        NumStates: 94
    MultiplicationsPerInputSample: 8.6250
          AdditionsPerInputSample: 7.9167

cost(cTwo)
ans = struct with fields:
                  NumCoefficients: 100
                        NumStates: 118
    MultiplicationsPerInputSample: 8.9583
          AdditionsPerInputSample: 8.6667

'Auto' фильтр прореживания конфигурации дает трехступенчатую конструкцию, которая выполняет двухступенчатую конструкцию для всех показателей затрат.

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

Сравнивая амплитудную характеристику двух фильтров, оба фильтра имеют одинаковое поведение в диапазоне переходов и соответствуют спецификациям конструкции.

fvtool(cAuto,cTwo,'magnitude')
legend('Auto multistage','Two-stage')

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 Auto multistage, Two-stage.

Однако, чтобы понять, откуда идет вычислительная экономия в трехступенчатой конструкции, посмотрите на амплитудную характеристику трех стадий по отдельности.

autoSt1 = cAuto.Stage1;
autoSt2 = cAuto.Stage2;
autoSt3 = cAuto.Stage3;
fvtool(autoSt1, autoSt2, autoSt3,'magnitude')
legend('Stage 1','Stage 2','Stage 3')

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 Stage 1, Stage 2, Stage 3.

Третья ступень обеспечивает узкую ширину перехода, необходимую для общей конструкции (0,03 × Fs/2). Однако третья ступень работает на частоте 1,5 кГц и имеет спектральные реплики, центрированные на этой частоте и ее гармониках.

Первый этап удаляет такие реплики. Эта первая и вторая ступени работают с более высокой скоростью, но могут обеспечить широкую ширину перехода. Результатом является фильтр прореживания на 2 первой ступени только с 7 ненулевыми коэффициентами и фильтр прореживания на 3 второй ступени только с 19 ненулевыми коэффициентами. Третий этап требует 47 коэффициентов. В целом имеется 73 ненулевых коэффициента для трехступенчатой конструкции и 100 ненулевых коэффициентов для двухступенчатой конструкции.

Фильтры в многоступенчатой конструкции удовлетворяют следующим условиям:

  • Комбинированная реакция должна соответствовать или превышать заданные проектные характеристики.

  • Суммарное прореживание должно равняться требуемому общему прореживанию.

Для общего коэффициента прореживания 48 существует несколько комбинаций отдельных этапов.

Чтобы получить конструкцию с наименьшим числом общих коэффициентов, установите значение 'MinTotalCoeffs' аргумент для true.

Astop = 80;
M = 48;
Fs = 6000;
TW = 0.03*Fs/2;
cMinCoeffs = designMultistageDecimator(M,Fs,TW,Astop,'MinTotalCoeffs',true)
cMinCoeffs = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]
    Stage3: [1x1 dsp.FIRDecimator]
    Stage4: [1x1 dsp.FIRDecimator]

cost(cMinCoeffs)
ans = struct with fields:
                  NumCoefficients: 48
                        NumStates: 59
    MultiplicationsPerInputSample: 5.8542
          AdditionsPerInputSample: 5.0833

Для получения проекта с наименьшим количеством умножений на входную выборку установите 'NumStages' комуauto'.

cMinMulti = designMultistageDecimator(M,Fs,TW,Astop,'NumStages','auto')
cMinMulti = 
  dsp.FilterCascade with properties:

    Stage1: [1x1 dsp.FIRDecimator]
    Stage2: [1x1 dsp.FIRDecimator]

cost(cMinMulti)
ans = struct with fields:
                  NumCoefficients: 158
                        NumStates: 150
    MultiplicationsPerInputSample: 5.6875
          AdditionsPerInputSample: 5.1667

Сравните амплитудную характеристику обоих фильтров с помощью fvtool. Оба фильтра имеют одинаковое поведение полосы перехода и затухание полосы останова, которое ниже 80 дБ.

fvtool(cMinCoeffs,cMinMulti)
legend('Minimize total coefficients','Minimize number of multiplications per input sample')

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 Minimize total coefficients, Minimize number of multiplications per input sample.

Входные аргументы

свернуть все

Общий коэффициент прореживания, заданный как положительное целое число больше единицы. Для C многоступенчатый, M не должно быть простым числом. Дополнительные сведения см. в разделе Алгоритмы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Входная частота дискретизации перед многоступенчатым прореживателем, заданная как положительный действительный скаляр. Если не указано, Fs по умолчанию 48 000 Гц. Многоступенчатый прореживатель имеет частоту отсечки, равную Fs/(2M).

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Ширина перехода, заданная как положительный действительный скаляр меньше Fs/M. Если не указано, TW по умолчанию 0,2 ×Fs/M. Ширина перехода должна быть меньше Fs/M.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Минимальное затухание полосы останова для результирующей конструкции, определяемое как положительный действительный скаляр.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: C = designMultistageDecimator(48,48000,200,80,'NumStages','auto') конструирует многоступенчатый прореживатель с наименьшим количеством умножений на входную выборку.

Число ступеней прореживателя, указанное как положительное целое число. Если установлено значение 'auto', алгоритм проектирования определяет количество этапов, которые приводят к наименьшему количеству умножений на входную выборку. Если указано положительное целое число, N, общий коэффициент прореживания, M, должна быть способна учитывать, по крайней мере, N факторов, не считая 1 или M в качестве факторов.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Когда false, алгоритм конструирования минимизирует количество умножений на входную выборку. Когда true, алгоритм конструирования минимизирует общее количество коэффициентов.

Типы данных: logical

Метод расчета затрат, указанный как:

  • 'estimate' - Функция оценивает порядок фильтров, необходимый для каждой стадии, и проектирует фильтр на основе оценки. Этот метод быстрее, чем 'design', но может привести к неоптимальным конструкциям.

  • 'design' - Функция проектирует каждый этап и вычисляет порядок фильтрации. Этот метод приводит к оптимальной общей конструкции.

Типы данных: char

Допуск, заданный как положительный скаляр. Допуск используется для определения многоступенчатой конфигурации с наименьшим уровнем MPIS. Когда несколько конфигураций приводят к одному и тому же минимальному MPIS в пределах заданного допуска, выбирается конфигурация, которая дает наименьшее количество коэффициентов в целом. Чтобы просмотреть общее количество коэффициентов и MPIS для конкретного фильтра, используйте cost функция.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Спроектированный фильтр, возвращенный как dsp.FilterCascade object™ системы. Фильтр представляет собой каскад из нескольких этапов, разработанных функцией. Количество этапов определяется 'NumStages' аргумент.

Для получения информации о каждом этапе фильтрации вызовите info функции на C аргумент.

Алгоритмы

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

Функция определяет количество ступеней прореживателя через 'NumStages' аргумент. Последовательность этапов определяется на основе затрат на внедрение. По умолчанию 'NumStages' имеет значение 'auto', что приводит к последовательности, которая дает наименьшее число MPIS. Когда несколько конфигураций приводят к одному и тому же минимальному MPIS в пределах заданного допуска, выбирается конфигурация, которая дает наименьшее количество коэффициентов в целом. Если 'MinTotalCoeffs' имеет значение true, функция определяет последовательность, которая требует наименьшего количества общих коэффициентов.

По умолчанию 'CostMethod' имеет значение 'estimate'. В этом режиме функция оценивает порядок фильтров, необходимый для каждой стадии, и проектирует фильтр на основе оценки. Этот метод быстрее, чем 'design', но может привести к неоптимальным конструкциям. Для оптимальной конструкции установите 'CostMethod' кому 'design'. В этом режиме функция проектирует каждый этап и вычисляет порядок фильтрации.

Представлен в R2018b