designMultistageDecimator

Многоступенчатый проект decimator

Синтаксис

C = designMultistageDecimator(M)
C = designMultistageDecimator(M,Fs,TW)
C = designMultistageDecimator(M,Fs,TW,Astop)
C = designMultistageDecimator(___,Name,Value)

Описание

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

пример

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

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

пример

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

пример

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

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

Примеры

свернуть все

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

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

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

Выберите фактор десятикратного уменьшения 48, введите частоту дискретизации 30.72×48 МГц, односторонняя пропускная способность 10 МГц и полоса задерживания attenution 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

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

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

Используя функцию designMultistageDecimator

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

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, соответственно.

Вычислите стоимость реализации decimator.

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

Ответ значения показывает, что ширина перехода обоих фильтры является тем же самым, делая фильтры сопоставимыми. Функция 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

Разработайте decimator с полным фактором десятикратного уменьшения 24 использований функции designMultistageDecimator. Разработайте фильтр в двух настройках:

  • 2D подготовьте настройку - 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' разрабатывает каскад трех КИХ decimators с факторами десятикратного уменьшения 2, 3, и 4, соответственно. Настройка 2D этапа разрабатывает каскад двух КИХ decimators с факторами десятикратного уменьшения 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: 104
                        NumStates: 124
    MultiplicationsPerInputSample: 9.1250
          AdditionsPerInputSample: 8.8333

Децимирующий фильтр настройки 'Auto' приводит к трехэтапному проекту, который превосходит 2D дизайн сцены по характеристикам на всех метриках стоимости.

Сравните ответ значения

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

fvtool(cAuto,cTwo,'magnitude')
legend('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')

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

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

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

  • Объединенный ответ должен соответствовать или превысить данные спецификации проекта.

  • Объединенное десятикратное уменьшение должно равняться полному требуемому десятикратному уменьшению.

Для полного фактора десятикратного уменьшения 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')

Входные параметры

свернуть все

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

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

Введите уровень выборки до многоступенчатого decimator, заданного как положительный действительный скаляр. Если не заданный, значения по умолчанию Fs к 48 000 Гц. Многоступенчатый decimator имеет частоту среза 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

Типы данных: логический

Стойте метода вычисления, заданного как также:

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

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

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

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

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

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

свернуть все

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

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

Алгоритмы

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

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

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

Введенный в R2018b