主要内容

dsp。C我C我nterpolator

用级联积分器-梳状滤波器插值信号

描述

dsp。C我C我nterpolator系统对象™使用级联积分器梳状(CIC)插值滤波器插值输入信号。CIC插值滤波器结构由N部分级联梳状滤波器,随后由一个系数的速率变化R,然后是N级联积分器的部分。详细信息请参见算法.的NumSections属性指定N,表示CIC过滤器中的分段数。的InterpolationFactor属性指定R,插值因子。的getFixedPointInfo函数返回定点节的字长和分数长度以及dsp。C我C我nterpolator系统对象。方法还可以为这个System对象生成HDL代码generatehdl函数。

请注意

此对象需要定点设计器™许可证。

使用CIC滤波器插值信号:

  1. 创建dsp。C我C我nterpolator对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

例子

cicInterp= dsp。C我C我nterpolator创建一个CIC插值系统对象,用于对输入信号应用CIC插值滤波器。

例子

cicInterp= dsp。C我C我nterpolator(RN属性创建CIC插值对象InterpolationFactor属性设置为R,DifferentialDelay属性设置为,以及NumSections属性设置为N

cicInterp= dsp。C我C我nterpolator(名称,值创建一个CIC插值对象,将每个指定属性设置为指定值。将每个属性名用单引号括起来。您可以将此语法用于以前的任何输入参数组合。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

输入信号被插入的因子,指定为正整数。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

在滤波器的每个梳状部分中使用的差分延迟值,指定为正整数。详细信息请参见算法.如果差分延迟是内置整数类数据类型,则插值因子必须是相同的整数数据类型或.例如,如果差分延迟是int8,则插值因子必须为anint8

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

CIC滤波器的积分器和梳状段数,指定为正整数。这个数字表示滤波器的梳状部分或积分器部分的节数。CIC过滤器中的总节数是此属性给出的节数的两倍。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

定点属性指定,指定为下列之一:

每个筛选器部分使用的定点字长,指定为整数的标量或行向量。单词长度必须大于或等于2。如果指定标量,则该值将应用于筛选器的所有部分。如果你指定一个向量,这个向量的长度必须是2 ×NumSections

例子:32

例子:[32 32 32 32]

依赖关系

属性时应用此属性FixedPointDataType财产“指定单词长度”“指定单词和分数长度”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于每个筛选器部分的定点分数长度,指定为整数的标量或行向量。分数长度可以为负、0或正。如果指定标量,则该值将应用于筛选器的所有部分。如果你指定一个向量,这个向量的长度必须是2 ×NumSections

例子:-2

例子:[-2 0 5 8]

依赖关系

属性时应用此属性FixedPointDataType财产“指定单词和分数长度”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于筛选器输出的定点字长,指定为大于或等于2的标量整数。

依赖关系

属性时应用此属性FixedPointDataType其中之一的财产“最小节字长度”“指定单词长度”,或“指定单词和分数长度”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

用于过滤器输出的定点分数长度,指定为标量整数。

依赖关系

属性时应用此属性FixedPointDataType财产“指定单词和分数长度”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

使用

描述

例子

cicInterpOut= cicInterp(输入)使用CIC插补器插补输入。

输入参数

全部展开

数据输入,指定为向量或矩阵。如果输入是单数据类型或双数据类型,则忽略与定点数据类型相关的属性设置。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数支持:金宝app是的

输出参数

全部展开

插值输出,返回为向量或矩阵。输出帧大小等于(InterpolationFactor) ×输入帧大小。输出数据的复杂度与输入数据的复杂度相匹配。如果输入是,则输出数据类型与输入数据类型匹配。

类型的输入是内置整数数据类型或定点数据类型,则输出字长度和分数长度取决于您选择的定点数据类型设置FixedPointDataType财产。

完整的精度

FixedPointDataType属性设置为“充分精确”,则适用以下关系:

W l 输出 W l 输入 + N u 年代 e c t F l 输出 F l 输入

在那里,

  • 输出——输出数据的字长。

  • FL输出——输出数据的分数长度。

  • 输入——输入数据的字长。

  • FL输入——输入数据的分数长度。

  • NumSect属性指定的CIC过滤器中的节数NumSections财产。

输入而且FL输入继承自传递给对象算法的数据输入。对于内置整数输入,分数长度为0。

最小分段字长

FixedPointDataType属性设置为“最小节字长度”,则输出字长为中指定的值OutputWordLength财产。输出分数长度,FL输出由下式给出:

F l 输出 W l 输出 W l 输入 F l 输入 + N u 年代 e c t

指定字和分数的长度

FixedPointDataType设置为“指定单词和分数长度”时,输出字长度和分数长度是您在OutputWordLength而且OutputFractionLength属性。

指定字长

FixedPointDataType设置为“指定单词长度”中指定的值OutputWordLength财产。输出分数长度,FL输出由下式给出:

F l 输出 W l 输出 W l 输入 F l 输入 + N u 年代 e c t

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|fi
复数支持:金宝app是的

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

generatehdl 生成量化DSP滤波器的HDL代码(需要滤波器设计HDL编码器
impz 离散时间滤波器的脉冲响应系统对象
freqz 离散时间滤波器的频率响应系统对象
phasez 离散时间滤波器的相位响应系统对象(打开)
fvtool 可视化DSP滤波器的频率响应
获得 CIC滤波器增益系统对象
getFixedPointInfo 获得定点字和分数长度
信息 关于过滤器的信息系统对象
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

有关此对象支持的筛选器分析方法的列表,请键入金宝appdsp.CICInterpolator.helpFilterAnalysis在MATLAB中®命令提示符。有关相应的函数参考页面,请参见过滤系统对象的分析方法

例子

全部折叠

请注意:如果您正在使用R2016a或更早的版本,请将对对象的每个调用替换为等效的调用一步语法。例如,obj (x)就变成了步骤(obj, x)

创建一个dsp。C我C我nterpolator系统对象™InterpolationFactor设置为2。将一个定点信号从22.05 kHz插值到44.1 kHz。

cicint = dsp.CICInterpolator(2)
Cicint = dsp。C我C我nterpolator with properties: InterpolationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Full precision'

创建一个dsp。年代我neWave对象与SampleRate设置为22.05 kHz,SamplesPerFrame设置为32,和OutputDataType设置为“自定义”.要生成一个定点信号,请设置CustomOutputDataType属性。numerictype对象。在本例中,将值设置为numerictype ([], 16).分数长度的计算基于产生的正弦信号的值,以提供最好的精度。

要生成一个定点信号,请设置方法的属性dsp。年代我neWave对象“查表”.这种产生正弦信号的方法要求输出中每个正弦信号的周期能被采样周期均匀整除。也就是说, 1 / f T 年代 k 每个通道必须为整数值= 1, 2,…N。的价值 T 年代 = 1 / F 年代 ,变量 f 是正弦信号的频率,和 F 年代 是信号的采样率。换句话说,比值 F 年代 / f 必须为整数。有关详细信息,请参见算法章节dsp。年代我neWave对象页面。

在这个例子中, F 年代 设置为22050赫兹和 f 设置为1050hz。

Fs = 22.05e3;sin = dsp。SineWave (“频率”, 1050,...“SampleRate”Fs,...“SamplesPerFrame”32岁的...“方法”“查表”...“OutputDataType”“自定义”
sin = dsp。SineWavewith 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 kHz采样的定点正弦信号输入一帧。将流信号内插2倍。插值输出每帧有64个样本。

I = 1:16 x = sin ();Y = cicint(x);结束

CIC插值滤波器的输出被放大一个特定的增益值。方法确定此值获得函数。这个增益等于 2 N th 级的CIC插值滤波器和等号 × D N / ,在那里 是插值因子, D 微分延迟,和 N 为CIC插补器的分段数。

gainCIC =增益(cicint)
gainCIC = 2

为了调整这个放大输出并使其与原始信号的振幅相匹配,将CIC插值信号与计算得到的增益值相除。

比较原始信号和插值信号的最后一帧。在绘图时,考虑2个样本的输出延迟。

N = (0:63)';茎(n一句子)/ Fs,双(x一句子)“r”“填充”)举行;I = cicint.InterpolationFactor;茎(n (1:61) / (Fs *我),...双(y(4:结束))/ gainCIC,“b”)包含(的时间(秒)) ylabel (信号幅度的)传说(原始信号的...“插值信号”...“位置”“北”)举行

图中包含一个轴对象。axis对象包含2个stem类型的对象。这些对象表示原始信号,插值信号。

使用信息“长”格式,得到定点滤波段的字长和分数长度以及滤波输出。

信息(cicint“长”
ans = '离散冷杉多重速率的过滤器(真实 ) ----------------------------------------- 滤波器结构:级联Integrator-Comb插入器插值系数:2微分延迟:1的部分:2稳定:是的线性相位:是的(1型)实施成本数量的乘数:0条数量:4的状态数:4乘法/输入样本:0添加/输入样本:6定点信息部分单词长度:17 17 17 17节部分长度:14 14 14 14输出字长:17输出分数长度:14 '

使用getFixedPointInfo函数时,可以确定字长和分数长度的定点节和输出dsp。C我CDec我米ator而且dsp。C我C我nterpolator系统对象。筛选器部分和输出的数据类型取决于FixedPointDataType属性的过滤器系统对象™。

完整的精度

创建一个dsp。C我CDec我米ator对象。的默认值NumSections属性是2。这个值表示有两个积分器和梳状段。函数返回的WLs和FLs向量getFixedPointInfo函数各包含五个元素。前两个元素表示两个积分器部分。第三和第四个元素表示两个梳状部分。最后一个元素表示筛选器输出。

cicD = dsp。C我CDec我米ator
cicD = dsp。C我CDec我米ator with properties: DecimationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Full precision'

默认情况下,FixedPointDataType属性设置为“充分精确”.调用getFixedPointInfo函数使用输入数值类型,nt,生成以下字长和分数长度向量。

Nt =数字类型(1,16,15)
nt = DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 16 FractionLength: 15
[WLs,FLs] = getFixedPointInfo(cicD,nt)% #好吧
WLs =1×518 18 18 18 18 18 18
FLs的=1×515 15 15 15 15 15

有关如何计算单词长度和分数长度的详细信息,请参阅的描述输出参数。

如果你锁定蔡先生对象通过将输入传递给其算法,则不需要将nt的参数getFixedPointInfo函数。

Input = int64(randn(8,1))
输入=8x1 int64列向量1 2 2 1 0 -1 0 0
输出= cicD(输入)
output = 0 1 3 0 DataTypeMode:定点:二进制点缩放signdness: Signed WordLength: 66 FractionLength: 0
[WLs,FLs] = getFixedPointInfo(cicD)% #好吧
WLs =1×566 66 66 66 66 66
FLs的=1×50 0 0 0 0

输出和分段字长是输入字长(在本例中为64)和分段数(2)的和。输出和分段长度为0,因为输入是一个内置整数。

最小分段字长

释放对象并更改FixedPointDataType财产“最小节字长度”.当输入为定点数据时,确定分段并输出定点信息,fi (randn(2), 1, 24日15)

释放(蔡先生);蔡先生。F我xedPointDataType =“最小节字长度”
cicD = dsp。C我CDec我米ator 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:定点:二进制点缩放signdness: Signed WordLength: 24 FractionLength: 15
[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF))% #好吧
WLs =1×526 26 26 26 32
FLs的=1×515 15 15 15 21

指定字和分数的长度

改变FixedPointDataType财产“指定单词和分数长度”.方法确定定点信息getFixedPointInfo函数。

蔡先生。F我xedPointDataType =“指定单词和分数长度”
cicD = dsp。C我CDec我米ator 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))% #好吧
WLs =1×516 16 16 16 32
FLs的=1×50 0 0 0 0

字符的各自定点属性分配区段和输出字长和分数长度蔡先生对象。这些值不是由输入数字类型决定的。要确认,请拨打getFixedPointInfo函数,而不传递numerictype输入参数。

[WLs, FLs] = getFixedPointInfo(cicD)% #好吧
WLs =1×516 16 16 16 32
FLs的=1×50 0 0 0 0

指定字长

要指定筛选器部分和输出的字长,请设置FixedPointDataType财产“指定单词长度”

蔡先生。F我xedPointDataType =“指定单词长度”
cicD = dsp。C我CDec我米ator 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×516 16 16 16 32
FLs的=1×55 5 5 5 21

有关该函数如何计算单词和分数长度的详细信息,请参阅的描述输出参数

更多关于

全部展开

算法

全部展开

参考文献

[1]霍格诺尔,E.B.一种用于抽取和插值的经济型数字滤波器。IEEE声学、语音与信号处理汇刊.第29卷,第2期,1981,155-162。

[2]迈耶-贝斯,美国;数字信号处理与现场可编程门阵列.纽约:施普林格,2001。

[3]哈里斯,弗雷德里克J。通信系统多速率信号处理“,.印第安纳波利斯:Prentice Hall PTR, 2004。

扩展功能

版本历史

在R2012a中引入