dsp. CICDecimator

Десятикратно уменьшите сигнал с помощью каскадного интегрально-гребенчатого (CIC) фильтра

Описание

Система dsp.CICDecimator object™ десятикратно уменьшает входной сигнал с помощью децимирующего фильтра каскадной расчески интегратора (CIC). Структура децимирующего фильтра CIC состоит из разделов N каскадных интеграторов, сопровождаемых изменением уровня фактором R, сопровождаемого разделами N каскадных гребенчатых фильтров. Для получения дополнительной информации см. Алгоритмы. Свойство NumSections задает N, количество разделов в CIC-фильтре. Свойство DecimationFactor задает R, фактор десятикратного уменьшения. Функция getFixedPointInfo возвращает размеры слова и дробные длины разделов фиксированной точки и вывода для Системного объекта dsp.CICDecimator. Можно также сгенерировать HDL-код для этого Системного объекта с помощью функции generatehdl.

Примечание

Этот объект требует лицензии Fixed-Point Designer™.

Десятикратно уменьшать сигнал с помощью CIC-фильтра:

  1. Создайте объект dsp.CICDecimator и установите его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

cicDecim = dsp.CICDecimator
cicDecim = dsp.CICDecimator(R,M,N)
cicDecim = dsp.CICDecimator(Name,Value)

Описание

пример

cicDecim = dsp.CICDecimator создает Системный объект десятикратного уменьшения CIC, который применяет децимирующий фильтр CIC к входному сигналу.

пример

cicDecim = dsp.CICDecimator(R,M,N) создает объект десятикратного уменьшения CIC с набором свойств DecimationFactor к R, набором свойств DifferentialDelay к M и набором свойств NumSections к N.

cicDecim = dsp.CICDecimator(Name,Value) создает объект десятикратного уменьшения CIC с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в одинарные кавычки. Можно использовать этот синтаксис с любой предыдущей комбинацией входных аргументов.

Свойства

развернуть все

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

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Фактор, которым подкошен входной сигнал, задал как положительное целое число.

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

Дифференциальное значение задержки, используемое в каждом из разделов расчески фильтра, заданного как положительное целое число. Для получения дополнительной информации см. Алгоритмы. Если дифференциальная задержка является встроенным целочисленным типом данных, фактором десятикратного уменьшения должен быть тот же целочисленный тип данных или double. Например, если дифференциальной задержкой является int8, то фактором десятикратного уменьшения должен быть int8 или double.

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

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

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

Обозначения свойства фиксированной точки, заданные как одно из следующего:

  • Full precision – Размер слова и дробная длина разделов CIC-фильтра и объектного вывода действуют в полной точности.

  • Minimum section word lengths – Задайте выходной размер слова через свойство OutputWordLength. Объект определяет тип данных раздела фильтра и выходную длину части, которые дают самую лучшую точность. Для получения дополнительной информации смотрите аргумент getFixedPointInfo и cicDecimOut.

  • Specify word lengths – Задайте размеры слова разделов CIC-фильтра и объектного вывода через свойства SectionWordLengths и OutputWordLength. Объект определяет соответствующие дробные длины, чтобы дать самую лучшую точность. Для получения дополнительной информации смотрите getFixedPointInfo и аргумент cicDecimOut.

  • Specify word and fraction lengths – Задайте размер слова и дробную длину разделов CIC-фильтра и объектного вывода через SectionWordLengths, SectionFractionLengths, OutputWordLength и свойства OutputFractionLength.

Размеры слова фиксированной точки, чтобы использовать для каждого раздела фильтра, заданного как скаляр или вектор - строка из целых чисел. Размер слова должен быть больше, чем или равным 2. Если вы задаете скаляр, значение применяется ко всем разделам фильтра. Если вы задаете вектор, вектор должен иметь длину 2 × NumSections.

Пример: 32

Пример: [32 32 32 32]

Зависимости

Это свойство применяется, когда вы устанавливаете свойство FixedPointDataType на 'Specify word lengths' или 'Specify word and fraction lengths'.

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

Длины части фиксированной точки, чтобы использовать для каждого раздела фильтра, заданного как скаляр или вектор - строка из целых чисел. Дробная длина может быть отрицательной, 0, или положительной. Если вы задаете скаляр, значение применяется ко всем разделам фильтра. Если вы задаете вектор, вектор должен иметь длину 2 × NumSections.

Пример 2

Пример: [-2 0 5 8]

Зависимости

Это свойство применяется, когда вы устанавливаете свойство FixedPointDataType на 'Specify word and fraction lengths'.

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

Размер слова фиксированной точки, чтобы использовать для фильтра вывод, заданный как скалярное целое число, больше, чем или равный 2.

Зависимости

Это свойство применяется, когда вы устанавливаете свойство FixedPointDataType на 'Minimum section word lengths', 'Specify word lengths' или 'Specify word and fraction lengths'.

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

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

Зависимости

Это свойство применяется, когда вы устанавливаете свойство FixedPointDataType на 'Specify word and fraction lengths'.

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

Использование

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

cicDecimOut = cicDecim(input)

Описание

пример

cicDecimOut = cicDecim(input) десятикратно уменьшает вход с помощью CIC decimator.

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

развернуть все

Ввод данных, заданный как вектор или матрица. Количество строк во входе должно быть кратным DecimationFactor. Если вход имеет single или тип данных double, настройки свойства, связанные с типами данных с фиксированной точкой, проигнорированы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного числа: Да

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

развернуть все

Подкошенный выходной параметр, возвращенный как вектор или матрица. Выходной формат кадра равняется (1 ∕ DecimationFactor) × входному формату кадра. Сложность соответствий выходных данных те из входных данных. Если входом является single или double, тип выходных данных совпадает с типом входных данных.

Если вход имеет встроенный целочисленный тип данных или типа данных с фиксированной точкой, выходной размер слова и дробная длина зависят от типа данных с фиксированной точкой, устанавливающего вас, выбирают через свойство FixedPointDataType.

Полная точность

Когда FixedPointDataType установлен в 'Full precision', следующее отношение применяется:

WLвывод =WLвходной параметр+NumSectFLвывод =FLвходной параметр

где,

  • WL вывод – Размер слова выходных данных.

  • FL вывод – Дробная продолжительность выходных данных.

  • Вход WL – Размер слова входных данных.

  • Вход FL – Дробная длина входных данных.

  • NumSect – Количество разделов в CIC-фильтре задано через свойство NumSections.

Вход WL и вход FL наследованы от ввода данных, который вы передаете объектному алгоритму. Для встроенных целочисленных входных параметров дробная длина 0.

Минимальные размеры слова раздела

Когда свойство FixedPointDataType установлено в 'Minimum section word lengths', выходной размер слова является значением, которое вы задаете в свойстве OutputWordLength. Выходной длиной части, FL вывод, дают:

FLвывод =WLвывод (WLвходной параметрFLвходной параметр+NumSect)

Задайте слово и дробные длины

Когда свойство FixedPointDataType установлено в 'Specify word and fraction lengths', выходной размер слова и дробная длина являются значениями, которые вы задаете в свойствах OutputWordLength и OutputFractionLength.

Задайте размеры слова

Когда свойство FixedPointDataType установлено в 'Specify word lengths', выходной размер слова является значением, которое вы задаете в свойстве OutputWordLength. Выходной длиной части, FL вывод, дают:

FLвывод =WLвывод (WLвходной параметрFLвходной параметр+NumSect)

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного числа: Да

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

generatehdlСгенерируйте HDL-код для квантованного фильтра DSP (требует Filter Design HDL Coder),
impzИмпульсный ответ дискретного времени фильтрует Системный объект
freqzЧастотная характеристика фильтра
phasezРазвернутый фазовый отклик для фильтра
fvtoolВизуализируйте частотную характеристику фильтров DSP
gainУсиление CIC-фильтра
getFixedPointInfoПолучите слово фиксированной точки и дробные длины
infoИнформация о Системном объекте фильтра
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Для списка методов анализа фильтра это поддержка объектов введите dsp.CICDecimator.helpFilterAnalysis в командной строке MATLAB®. Для соответствующих страниц ссылки на функцию смотрите Методы анализа для Системных объектов Фильтра.

Примеры

развернуть все

Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj(x) становится step(obj,x).

Создайте Систему dsp.CICDecimator object™ с набором DecimationFactor к 4. Десятикратно уменьшите сигнал от 44,1 кГц до 11,025 кГц.

cicdec = dsp.CICDecimator(4);  
cicdec.FixedPointDataType = 'Minimum section word lengths'; 
cicdec.OutputWordLength = 16;

Создайте фиксированную точку синусоидальный входной сигнал 1 024 выборок с частотой дискретизации 44.1e3 Гц.

Fs = 44.1e3;             
n = (0:1023)';            % 0.0232 sec signal
x = fi(sin(2*pi*1e3/Fs*n),true,16,15);

Создайте объект dsp.SignalSource.

src = dsp.SignalSource(x,64);

Десятикратно уменьшите вывод с 16 выборками на кадр.

y = zeros(16,16);
for ii = 1:16
     y(ii,:) = cicdec(src());   
end

Постройте первый кадр исходных и подкошенных сигналов. Выходная задержка является 2 выборками.

gainCIC = ...
   (cicdec.DecimationFactor*cicdec.DifferentialDelay)^cicdec.NumSections;
stem(n(1:56)/Fs,double(x(4:59))) 
hold on;     
stem(n(1:14)/(Fs/cicdec.DecimationFactor),double(y(1,3:end))/gainCIC,'r','filled')
xlabel('Time (sec)')
ylabel('Signal Amplitude')
legend('Original signal','Decimated signal','Location','north')
hold off;

Используя метод info в формате 'long', получите размеры слова и дробные длины разделов фильтра фиксированной точки и фильтра вывод.

info(cicdec,'long')
ans = 
    'Discrete-Time FIR Multirate Filter (real)               
     -----------------------------------------               
     Filter Structure    : Cascaded Integrator-Comb Decimator
     Decimation Factor   : 4                                 
     Differential Delay  : 1                                 
     Number of Sections  : 2                                 
     Stable              : Yes                               
     Linear Phase        : Yes (Type 1)                      
                                                             
                                                             
     Implementation Cost                                     
     Number of Multipliers            : 0                    
     Number of Adders                 : 4                    
     Number of States                 : 4                    
     Multiplications per Input Sample : 0                    
     Additions per Input Sample       : 2.5                  
     
     
     Fixed-Point Info
     Section word lengths     : 20  19  19  18
     Section fraction lengths : 15  14  14  13
     Output  word length      : 16
     Output  fraction length  : 11
     '

Используя функцию getFixedPointInfo, можно определить размеры слова и фракционировать длины разделов фиксированной точки и вывод Системных объектов dsp.CICInterpolator и dsp.CICDecimator. Типы данных разделов фильтра и вывода зависят от свойства FixedPointDataType Системы фильтра object™.

Полная точность

Создайте объект dsp.CICDecimator. Значение по умолчанию свойства NumSections равняется 2. Это значение указывает, что существует два интегратора и расчесывают разделы. WLs и векторы FLs, возвращенные функцией getFixedPointInfo, содержат пять элементов каждый. Первые два элемента представляют два раздела интегратора. Третьи и четвертые элементы представляют два раздела расчески. Последний элемент представляет фильтр вывод.

cicD = dsp.CICDecimator
cicD = 
  dsp.CICDecimator with properties:

      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
    FixedPointDataType: 'Full precision'

По умолчанию свойство FixedPointDataType объекта установлено в 'Full precision'. Вызывая функцию getFixedPointInfo на этом объекте с входом числовой тип, nt, приводит к следующему размеру слова и дробным векторам длины.

nt = numerictype(1,16,15)
nt =


          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15
[WLs,FLs] = getFixedPointInfo(cicD,nt) %#ok
WLs = 1×5

    18    18    18    18    18

FLs = 1×5

    15    15    15    15    15

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

Если вы блокируете объект cicD путем передачи входа его алгоритму, вы не должны передавать аргумент nt функции getFixedPointInfo.

input = int64(randn(8,1))
input = 8x1 int64 column vector

    1
    2
   -2
    1
    0
   -1
    0
    0

output = cicD(input)
output = 
     0
     1
     3
     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 66
        FractionLength: 0
[WLs,FLs] = getFixedPointInfo(cicD) %#ok
WLs = 1×5

    66    66    66    66    66

FLs = 1×5

     0     0     0     0     0

Вывод и размеры слова раздела являются суммой входного размера слова, 64 в этом случае, и количество разделов, 2. Вывод и длины части раздела 0, поскольку вход является встроенным целым числом.

Минимальные размеры слова раздела

Выпустите объект и измените свойство FixedPointDataType на 'Minimum section word lengths'. Определите раздел и выведите информацию о фиксированной точке, когда вход будет данными фиксированной точки, fi(randn(8,2),1,24,15).

release(cicD);
cicD.FixedPointDataType = 'Minimum section word lengths'
cicD = 
  dsp.CICDecimator with properties:

      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
    FixedPointDataType: 'Minimum section word lengths'
      OutputWordLength: 32

inputF = fi(randn(8,2),1,24,15)
inputF = 
    3.5784   -0.1241
    2.7694    1.4897
   -1.3499    1.4090
    3.0349    1.4172
    0.7254    0.6715
   -0.0630   -1.2075
    0.7148    0.7172
   -0.2050    1.6302

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 24
        FractionLength: 15
[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF)) %#ok
WLs = 1×5

    26    26    26    26    32

FLs = 1×5

    15    15    15    15    21

Задайте слово и дробные длины

Измените свойство FixedPointDataType на 'Specify word and fraction lengths'. Определите информацию о фиксированной точке с помощью функции getFixedPointInfo.

cicD.FixedPointDataType = 'Specify word and fraction lengths'
cicD = 
  dsp.CICDecimator with properties:

          DecimationFactor: 2
         DifferentialDelay: 1
               NumSections: 2
        FixedPointDataType: 'Specify word and fraction lengths'
        SectionWordLengths: [16 16 16 16]
    SectionFractionLengths: 0
          OutputWordLength: 32
      OutputFractionLength: 0

[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF)) %#ok
WLs = 1×5

    16    16    16    16    32

FLs = 1×5

     0     0     0     0     0

Раздел и выходные размеры слова и дробные длины присвоены согласно соответствующим свойствам фиксированной точки объекта cicD. Эти значения не определяются входом числовой тип. Чтобы подтвердить, вызовите функцию getFixedPointInfo, не передавая входной параметр numerictype.

[WLs, FLs] = getFixedPointInfo(cicD) %#ok
WLs = 1×5

    16    16    16    16    32

FLs = 1×5

     0     0     0     0     0

Задайте размеры слова

Чтобы задать размеры слова раздела фильтра и вывести, установите свойство FixedPointDataType на 'Specify word lengths'.

cicD.FixedPointDataType = 'Specify word lengths'
cicD = 
  dsp.CICDecimator with properties:

      DecimationFactor: 2
     DifferentialDelay: 1
           NumSections: 2
    FixedPointDataType: 'Specify word lengths'
    SectionWordLengths: [16 16 16 16]
      OutputWordLength: 32

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

[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF))
WLs = 1×5

    16    16    16    16    32

FLs = 1×5

     5     5     5     5    21

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

Больше о

развернуть все

Алгоритмы

развернуть все

Ссылки

[1] Hogenauer, E.B. "Экономичный класс цифровых фильтров для десятикратного уменьшения и интерполяции". Транзакции IEEE на акустике, речи и обработке сигналов. Объем 29, номер 2, 1981, 155-162.

[2] Мейер-Бэезе, U. Цифровая обработка сигналов с программируемыми пользователем вентильными матрицами. Нью-Йорк: Спрингер, 2001.

[3] Харрис, Фредерик Дж. Многоскоростная обработка сигналов для систем связи. Индианаполис, IN: PTR Prentice Hall, 2004.

Расширенные возможности

Представленный в R2012a

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