designMultistageDecimator

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

Описание

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

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

Типы данных: 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') проектирует многоступенчатый 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

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