designMultistageDecimator

Многоступенчатый проект дециматора

Описание

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

пример

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

Многоступенчатый дециматор имеет частоту среза Fs/ (2 M).

пример

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×48MHzодносторонняя полоса пропускания 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 состояний. Количество умножений на вход выборку и сложений на вход выборку 1 5.6875 и 1 5.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

The 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.

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

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

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

В 'design' mode, функция проектирует каждый каскад и вычисляет порядок фильтра. Это приводит к оптимальному проекту по сравнению с '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 функция. The 'Auto' Строение проектирует каскад из трёх конечных импульсных характеристик дециматоров с десятикратным уменьшением коэффициентами 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

The '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/ (2 M).

Типы данных: 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