Интерполируйте сигнал с помощью каскадного интегрально-гребенчатого фильтра
The dsp.CICInterpolator
Система object™ интерполирует входной сигнал с помощью каскадного фильтра интерполяции интегратор-гребень (CIC). Структура фильтра интерполяции CIC состоит из N секций каскадных гребенчатых фильтров, за которыми следует изменение скорости в множитель R, за которым следуют N секции каскадных интеграторов. Для получения дополнительной информации смотрите Алгоритмы. Свойство NumSections задает N, количество разделов в CIC-фильтре. Свойство InterpolationFactor задает R, коэффициент интерполяции. getFixedPointInfo
функция возвращает размеры слова и длины дробей разделов с фиксированной точкой и выход для dsp.CICInterpolator
Системный объект. Можно также сгенерировать HDL-код для этого системного объекта с помощью generatehdl
функция.
Примечание
Для этого объекта требуется лицензия Fixed-Point Designer™.
Чтобы интерполировать сигнал с помощью CIC-фильтра:
Создайте dsp.CICInterpolator
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
создает Системный объект интерполяции CIC, который применяет фильтр интерполяции CIC к входному сигналу.cicInterp
= dsp.CICInterpolator
создает объект интерполяции CIC с cicInterp
= dsp.CICInterpolator(R
,M
,N
)InterpolationFactor
значение свойства установлено в R
, а DifferentialDelay
значение свойства установлено в M
, и NumSections
значение свойства установлено в N
.
создает объект интерполяции CIC с каждым заданным набором свойств до заданного значения. Заключайте каждое имя свойства в одинарные кавычки. Можно использовать этот синтаксис с любыми предыдущими комбинациями входных аргументов.cicInterp
= dsp.CICInterpolator(Name,Value
)
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
InterpolationFactor
- Коэффициент интерполяции2
(по умолчанию) | положительное целое числоКоэффициент, которым интерполируется входной сигнал, заданный как положительное целое число.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DifferentialDelay
- Дифференциальная задержка секций гребня фильтра1
(по умолчанию) | положительное целое числоДифференциальное значение задержки, используемое в каждой из гребенчатых секций фильтра, задается как положительное целое число. Для получения дополнительной информации смотрите Алгоритмы. Если дифференциальная задержка имеет встроенный тип данных целочисленного класса, коэффициент интерполяции должен быть таким же целочисленным типом данных или double
. Для примера, если дифференциальная задержка является int8
, тогда коэффициент интерполяции должен быть int8
или double
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
NumSections
- Количество интеграторов и гребенчатых секций2
(по умолчанию) | положительное целое числоКоличество интеграторов и гребенчатых секций CIC-фильтра, заданное в виде положительного целого числа. Это число указывает количество разделов в гребенчатой части или интеграторной части фильтра. Общее количество разделов в CIC-фильтре в два раза превышает количество разделов, заданное этим свойством.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
FixedPointDataType
- Обозначения свойств с фиксированной точкойFull precision
(по умолчанию) | Minimum section word lengths
| Specify word lengths
| Specify word and fraction lengths
Обозначения свойств с фиксированной точкой, заданные как одно из следующих:
Full precision
- размер слова и длина дроби секций CIC-фильтра и выхода объекта работают с полной точностью.
Minimum section word lengths
- Задайте выход размера слова через свойство OutputWordLength. Объект определяет тип данных сечения фильтра и выхода длину дроби, которые дают максимально возможную точность. Для получения дополнительной информации см. getFixedPointInfo
и cicInterpOut
аргумент.
Specify word lengths
- Задайте размеров слова разделов CIC-фильтра и объекта, выхода с помощью свойств SectionWordLengths и OutputWordLength. Объект определяет соответствующие длины дробей, чтобы получить максимально возможную точность. Для получения дополнительной информации см. getFixedPointInfo
и cicInterpOut
аргумент.
Specify word and fraction lengths
- Задайте размер слова и длину дробей разделов CIC-фильтра и выхода объекта с помощью свойств Section Word Lengths, Section Fraction Lengths, Output Word Length и Output Fraction Length.
SectionWordLengths
- размеры слова с фиксированной точкой для каждой секции фильтра[16 16 16 16]
(по умолчанию) | скалярный вектор |Размеры слова с фиксированной точкой для использования в каждом разделе фильтра, заданные как скаляр или вектор-строка из целых чисел. Размер слова должна быть больше или равной 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
SectionFractionLengths
- Длины дробей с фиксированной точкой для каждой секции фильтра0
(по умолчанию) | скалярный вектор |Длины дробей с фиксированной точкой для использования в каждой секции фильтра, заданные как скаляр или вектор-строка из целых чисел. Длина дроби может быть отрицательной, 0 или положительной. Если вы задаете скаляр, значение применяется ко всем разделам фильтра. Если вы задаете вектор, вектор должен иметь длину 2 × NumSections
.
Пример: -2
Пример: [-2 0 5 8]
Это свойство применяется, когда вы устанавливаете FixedPointDataType
свойство к 'Specify word and fraction lengths'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputWordLength
- размер слова с фиксированной точкой для вывода фильтра32
(по умолчанию) | скалярное целое числоРазмер слова с фиксированной точкой для выхода фильтра, заданная как скаляр целое число, больше или равное 2.
Это свойство применяется, когда вы устанавливаете FixedPointDataType
свойство одному из 'Minimum section word lengths'
, 'Specify word lengths'
, или 'Specify word and fraction lengths'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputFractionLength
- Длина дроби с фиксированной точкой для выхода фильтра0
(по умолчанию) | скалярное целое числоДлина дроби с фиксированной точкой для выхода фильтра, заданная в виде скалярного целого числа.
Это свойство применяется, когда вы устанавливаете FixedPointDataType
свойство к 'Specify word and fraction lengths'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
интерполирует вход с помощью CIC интерполятора.cicInterpOut
= cicInterp(input)
input
- Вход данныхВход данных, заданный как вектор или матрица. Если вход имеет один или двойной тип данных, настройки свойств, относящиеся к типам данных с фиксированной точкой, игнорируются.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
Поддержка комплексного числа: Да
cicInterpOut
- выход интерполятора CICИнтерполированный выход, возвращенный как вектор или матрица. Выход формата кадра равен (InterpolationFactor) × размеру входного кадра. Сложность выходных данных совпадает с сложностью входных данных. Если вход single
или double
тип выходных данных совпадает с типом входных данных.
Если вход имеет встроенный целочисленный тип данных или тип данных с фиксированной точкой, выходы размера слова и длина дроби зависят от настройки типа данных с фиксированной точкой, которую вы выбираете через свойство FixedPointDataType.
Полная точность
Когда FixedPointDataType
для свойства задано значение 'Full precision'
, применяется следующая связь:
где,
WL выход - Размер слова выходных данных.
FL выход - Длина дроби выходных данных.
WL вход -- Размер слова входных данных.
FL вход -- Длина дроби входных данных.
NumSect - Количество разделов в CIC-фильтре, заданное свойством NumSections.
WL и FL входы наследуются от входных данных, которые вы передаете в алгоритм объекта. Для встроенных целочисленных входов длина дроби составляет 0.
Минимальные размеры слова разделов
Когда FixedPointDataType
для свойства задано значение 'Minimum section word lengths'
, выход размера слова является значением, заданным в свойстве OutputWordLength. Длина выходной дроби, FL выход, задается следующим уравнением:
Задайте длины слова и дроби
Когда FixedPointDataType
установлено в 'Specify word and fraction lengths'
, выходы размера слова и длина дроби являются значениями, заданными в свойствах OutputWordLength и OutputFractionLength.
Задайте размеры слова
Когда FixedPointDataType
установлено в 'Specify word lengths'
, выход размера слова является значением, заданным в OutputWordLength
свойство. Длина выходной дроби, FLoutput, задается следующим уравнением:
Типы данных: 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 | Информация о фильтре Системный объект |
Для списка методов анализа фильтров, которые поддержки этот объект, введите dsp.CICInterpolator.helpFilterAnalysis
в MATLAB® командная строка. Для соответствующих страниц с описанием функции смотрите Методы анализа для Фильтрация системных объектов.
Примечание. Если вы используете R2016a или более ранний релиз, замените каждый вызов объекта эквивалентным step
синтаксис. Для примера, obj(x)
становится step(obj,x)
.
Создайте dsp.CICInterpolator
Системная object™ с InterpolationFactor
установите значение 2. Интерполируйте сигнал с фиксированной точкой в 2 раза с 22,05 кГц до 44,1 кГц.
cicint = dsp.CICInterpolator(2)
cicint = dsp.CICInterpolator with properties: InterpolationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Full precision'
Создайте dsp.SineWave
объект с SampleRate
установите на 22,05 кГц, SamplesPerFrame
установите значение 32 и OutputDataType
установлено на 'Custom'
. Чтобы сгенерировать сигнал с фиксированной точкой, установите CustomOutputDataType
свойство для numerictype
объект. Для целей этого примера установите значение numerictype([],16)
. Длина дроби вычисляется на основе значений сгенерированного синусоидального сигнала, чтобы получить лучшую возможную точность.
Чтобы сгенерировать сигнал с фиксированной точкой, установите Method
свойство dsp.SineWave
объект к 'Table lookup'
. Этот способ генерации синусоидального сигнала требует, чтобы период каждой синусоиды в выходе был равномерно делен на период дискретизации. То есть, должно быть целым значением для каждого канала i = 1, 2,..., N. Значение равняется , переменная - частота синусоидального сигнала, и - скорость дискретизации сигнала. Другими словами, отношение должно быть целым числом. Для получения дополнительной информации смотрите раздел Алгоритмы на dsp.SineWave
страница объекта.
В этом примере, устанавливается на частоте 22050 Гц и устанавливается на частоте 1050 Гц.
Fs = 22.05e3; sine = dsp.SineWave('Frequency',1050,'SampleRate',Fs,'SamplesPerFrame',32,... 'Method','Table lookup','OutputDataType','Custom')
sine = dsp.SineWave with properties: Amplitude: 1 Frequency: 1050 PhaseOffset: 0 ComplexOutput: false Method: 'Table lookup' TableOptimization: 'Speed' SampleRate: 22050 SamplesPerFrame: 32 OutputDataType: 'Custom' Show all properties
В каждом цикле итерации поток в системе координат синусоидального сигнала с фиксированной точкой дискретизирован на 22,05 кГц. Интерполируйте потоковый сигнал в 2 раза. Интерполированный выход имеет 64 выборки на систему координат.
for i = 1:16 x = sine(); y = cicint(x); end
Выход фильтра интерполяции CIC усиливается определенным значением усиления. Вы можете определить это значение с помощью gain
функция. Это усиление равняется усилению каскад фильтра интерполяции CIC и равен , где - коэффициент интерполяции, - дифференциальная задержка, и - количество разделов интерполятора CIC.
gainCIC = gain(cicint)
gainCIC = 2
Чтобы настроить этот усиленный выход и соответствовать его амплитуде исходного сигнала, разделите интерполированный сигнал CIC на вычисленное значение усиления.
Сравните последние системы координат исходного и интерполированного сигналов. При построении графика учитывайте задержку на выходе 2 выборки.
n = (0:63)'; stem(n(1:31)/Fs, double(x(1:31)),'r','filled') hold on; I = cicint.InterpolationFactor; stem(n(1:61)/(Fs*I), ... double(y(4:end))/gainCIC,'b') xlabel('Time (sec)') ylabel('Signal Amplitude') legend('Original Signal','Interpolated Signal',... 'location','north') hold off;
Использование info
функция в 'long'
форматирование, получение размеров слова и дробей секций фильтра с фиксированной точкой и выходом фильтра.
info(cicint,'long')
ans = 'Discrete-Time FIR Multirate Filter (real) ----------------------------------------- Filter Structure : Cascaded Integrator-Comb Interpolator Interpolation Factor : 2 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 : 6 Fixed-Point Info Section word lengths : 17 17 17 17 Section fraction lengths : 14 14 14 14 Output word length : 17 Output fraction length : 14 '
Использование 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
Для получения дополнительной информации о том, как функция вычисляет длины слова и дроби, смотрите описание выходных аргументов.
CIC-фильтры являются оптимизированным классом КИХ-фильтров линейной фазы, состоящим из гребенчатой части и интеграторной части.
Интерполяционный фильтр CIC концептуально задается усилителем, за которым следует один CIC-фильтр скорости, H(z), который является lowpass антиизображающим фильтром. Фильтр интерполяции CIC увеличивает частоту дискретизации входного сигнала на целочисленный коэффициент с помощью каскадного фильтра интегратор-гребень (CIC).
В более эффективной реализации одна скорость CIC-фильтра H(z) факторизирована следующим образом:
где,
H C является передаточной функцией N участков каскадных гребенчатых фильтров, каждый с шириной RM.
H I является передаточной функцией интеграторной части фильтра, содержащей N ступени интеграторов.
N - количество разделов. Количество секций в CIC-фильтре определяется как количество секций в гребенчатой части или интеграторной части фильтра. Это значение не представляет общее количество разделов на протяжении всего фильтра.
R - коэффициент интерполяции.
M - дифференциальная задержка.
В общей многоразовой реализации алгоритм применяет благородные тождества для интерполяции и перемещает коэффициент изменения скорости, R, следовать после N участков каскадных гребенчатых фильтров.
Передаточная функция полученного фильтра задается следующим уравнением:
Для блока схемы, которая показывает многократную реализацию, смотрите Алгоритмы.
Интерполяционный фильтр CIC в More About реализуется как каскад N участков гребенчатых фильтров с последующим изменением скорости коэффициентом R, за которым следуют N участков каскадных интеграторов.
Эта схема показывает две секции каскадных гребенчатых фильтров и две секции каскадных интеграторов. Единичная задержка в фрагменте CIC-фильтра может быть расположена либо в канале с feedforward, либо в пути с обратной связью. Эти два строений дают идентичную частотную характеристику фильтра. Однако числовые выходы этих двух строений отличаются из-за задержки. Этот алгоритм помещает модуль задержку в feedforward пути интегратора, поскольку он является предпочтительным строением для реализации HDL.
[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.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
Схема сигнала с фиксированной точкой показывает типы данных, которые dsp.CICInterpolator
объект использует для сигналов с фиксированной точкой.
где,
secNT = numerictype(1,secWL,secFL)
outNT = numertictype(1,outWL,outFL)
secWL - размер слова раздел, заданная через свойство SectionWordLengths.
secFL - длина дроби сечения, заданная через свойство SectionFractionLengths.
outWL - это выход размера слова, которую вы задаете через свойство OutputWordLength.
outFL - выход длина дроби, которую вы задаете через свойство OutputFractionLength.
Значение NumSections
в этой схеме 2.
freqz
| fvtool
| gain
| generatehdl
| getFixedPointInfo
| impz
| info
| phasez
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.