Интерполируйте сигнал с помощью каскадного интегрально-гребенчатого фильтра
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
— Коэффициент интерполяции
(значение по умолчанию) | положительное целое числоФактор, которым входной сигнал интерполирован в виде положительного целого числа.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DifferentialDelay
— Дифференциальная задержка фильтра расчесывает разделы
(значение по умолчанию) | положительное целое числоДифференциальное значение задержки используется в каждом из разделов расчески фильтра в виде положительного целого числа. Для получения дополнительной информации см. Алгоритмы. Если дифференциальная задержка имеет встроенный целочисленный тип данных класса, коэффициент интерполяции должен быть тем же целочисленным типом данных или double
. Например, если дифференциальной задержкой является int8
, затем коэффициентом интерполяции должен быть int8
или double
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
NumSections
— Количество интегратора и разделов расчески
(значение по умолчанию) | положительное целое числоКоличество интегратора и разделы расчески 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-фильтра и объектного выхода через SectionWordLengths, SectionFractionLengths, OutputWordLength и свойства OutputFractionLength.
SectionWordLengths
— Размеры слова фиксированной точки для каждого раздела фильтра
(значение по умолчанию) | скаляр | векторРазмеры слова фиксированной точки, чтобы использовать для каждого фильтра разделяют в виде скаляра или вектора-строки из целых чисел. Размер слова должен быть больше или быть равен 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, или положительной. Если вы задаете скаляр, значение применяется ко всем разделам фильтра. Если вы задаете вектор, вектор должен иметь длину 2 × NumSections
.
Пример 2
Пример: [-2 0 5 8]
Это свойство применяется, когда вы устанавливаете FixedPointDataType
свойство к 'Specify word and fraction lengths'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputWordLength
— Размер слова фиксированной точки для фильтра выводится
(значение по умолчанию) | скалярное целое числоРазмер слова фиксированной точки, чтобы использовать для фильтра выход в виде скалярного целого числа, больше, чем или равный 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
— Длина части фиксированной точки для фильтра выводится
(значение по умолчанию) | скалярное целое числоДлина части фиксированной точки, чтобы использовать для фильтра выход в виде скалярного целого числа.
Это свойство применяется, когда вы устанавливаете 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. Значение равняется , переменная частота синусоидального сигнала, и частота дискретизации сигнала. Другими словами, отношение должно быть целое число. Для получения дополнительной информации смотрите раздел Algorithms по dsp.SineWave
объектная страница.
В этом примере, установлен в 22 050 Гц и установлен в 1 050 Гц.
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
свойство Системы фильтра 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=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
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 концептуально дан upsampler, сопровождаемым одним CIC-фильтром уровня, H(z), который является реконструкционным фильтром lowpass. Фильтр интерполяции CIC увеличивает частоту дискретизации входного сигнала целочисленным коэффициентом с помощью каскадного интегрально-гребенчатого (CIC) фильтра.
В более эффективном внедрении один CIC-фильтр уровня H(z) разложен на множители этот путь:
где,
H C является передаточной функцией разделов N каскадных гребенчатых фильтров, каждого с шириной RM.
H я - передаточная функция части интегратора фильтра, содержащего этапы N интеграторов.
N является количеством разделов. Количество разделов в CIC-фильтре задано как количество разделов или в части расчески или в части интегратора фильтра. Это значение не представляет общее количество разделов в целом фильтре.
R является коэффициентом интерполяции.
M является дифференциальной задержкой.
В полной многоскоростной реализации алгоритм применяет благородную идентичность для интерполяции и перемещает фактор изменения уровня, R, чтобы следовать после разделов N каскадных гребенчатых фильтров.
Передаточная функция получившегося фильтра дана следующим уравнением:
Для блок-схемы, которая показывает многоскоростную реализацию, см. Алгоритмы.
Интерполяция CIC просачивается Больше О, понят как каскад разделов N гребенчатых фильтров, сопровождаемых изменением уровня фактором R, сопровождаемый разделами N каскадных интеграторов.
Эта схема показывает два раздела каскадных гребенчатых фильтров и два раздела каскадных интеграторов. Единичная задержка во фрагменте интегратора CIC-фильтра может быть расположена или в feedforward или в пути к обратной связи. Эти две настройки дают к идентичной частотной характеристике фильтра. Однако числовые выходные параметры от этих двух настроек отличаются из-за задержки. Этот алгоритм помещает единичную задержку в путь прямого распространения интегратора, поскольку это - предпочтительная настройка для реализации HDL.
[1] Hogenauer, E.B. "Экономичный класс цифровых фильтров для децимации и интерполяции". Транзакции IEEE на акустике, речи и обработке сигналов. Объем 29, номер 2, 1981, 155-162.
[2] Мейер-Бэезе, U. Цифровая обработка сигналов с программируемыми пользователем вентильными матрицами. Нью-Йорк: Спрингер, 2001.
[3] Харрис, Фредерик Дж. Многоскоростная обработка сигналов для систем связи. Индианаполис, IN: PTR Prentice Hall, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.