dsp.CICDecimator

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

Описание

The 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. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

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 Использование Системных объектов.

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

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

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

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

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

Описание

пример

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

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

расширить все

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

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

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

расширить все

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

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

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

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

WLoutput=WLinput+NumSectFLoutput=FLinput

где,

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

  • FL выход - Длина дроби выходных данных.

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

  • FL вход -- Длина дроби входных данных.

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

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

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

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

FLoutput=WLoutput(WLinputFLinput+NumSect)

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

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

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

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

FLoutput=WLoutput(WLinputFLinput+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;

Создайте синусоидальный входной сигнал с фиксированной точкой из 1024 выборок с частотой дискретизации 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;

Figure contains an axes. The axes contains 2 objects of type stem. These objects represent Original signal, Decimated signal.

Использование 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.CICDecimator и dsp.CICInterpolator Системные объекты. Типы данных секций фильтра и выход зависят от FixedPointDataType свойство фильтра System object™.

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

Создайте dsp.CICDecimator объект. Значение по умолчанию NumSections свойство равно 2. Это значение указывает, что существует две секции интегратора и гребенки. Векторы WL и FL, возвращенные 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=4×1 object
     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=8×2 object
    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

The 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. «Economical Class of Цифровые Фильтры for Decimation and Interpolation». Транзакции IEEE по акустике, обработке речи и сигналов. Том 29, Число 2, 1981, 155-162.

[2] Meyer-Baese, U. Digital Signal Processing with Field Programmable Gate Arrays. Нью-Йорк: Спрингер, 2001.

[3] Harris, Fredric J. Multirate Signal Processing for Communication Systems. Индианаполис, IN: Prentice Hall PTR, 2004.

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

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