主要内容

dsp。SamplerateConverter.

多级采样率转换器

描述

SamplerateConverter.系统对象™转换传入信号的采样率。

转换信号的采样率:

  1. 创建dsp。SamplerateConverter.对象,并设置其属性。

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

要了解有关系统对象如何工作的更多信息,请参阅什么是系统对象?

创建

描述

src= dsp。SamplerateConverter.创建一个多级FIR采样率转换器系统对象,src,它转换输入信号的每个通道的采样率。

例子

src= dsp。SampleRateConverter (名称,价值返回多级FIN采样率转换器系统对象,src,具有一个或多个指定的属性和选项名称,价值对参数。

属性

全部展开

除非另有说明,属性是nontunable,这意味着您不能在调用对象之后更改它们的值。对象在调用时锁定,而释放函数打开它们。

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

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

将感兴趣的双边带宽(在比率转换后)指定为以Hz表示的正标量。此属性设置您希望保留的信号的信息携带部分的双边带宽。

将输入信号的采样率指定为Hz中表达的正标量。输入采样率必须大于感兴趣的带宽。

将输出信号的采样率的最大允许偏差指定为0到1之间的正标量。

输出速率容差允许在许多情况下进行更简单的设计。实际输出采样率变化但在指定范围内。例如,如果OutputRateTolerance被指定为0.01,然后实际输出采样率处于所提供的范围内OutputSampleRate±1%。

将输出信号的采样率指定为Hz中以Hz表示的正标量。输出采样率必须大于感兴趣的带宽。

将阻带衰减指定为用dB表示的正标量。此属性是过程中涉及的任何混叠衰减的最小值。

使用

句法

描述

例子

y= src (X设计一个或多个多速率FIR滤波器,然后使用滤波器转换每个通道(列)的实际或复杂的输入信号的速率X为输出采样率。

输入参数

全部展开

输入信号,指定为向量或矩阵。的行长X必须是整体抽取因子的倍数。抽取因子由getRateChangeFactors函数。每一列的X被视为一个单独的通道。

数据类型:|
复数支持:金宝app是的

输出参数

全部展开

重新采样的信号,作为向量或矩阵返回。

数据类型:|
复数支持:金宝app是的

对象功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj.,使用下面的语法:

发行版(obj)

全部展开

getActualOutputrate. 获得实际产量
Getfilters. 获得单级过滤器
getRateChangeFactors 得到整体插值和抽取因子
visualizeFilterStages 可视化过滤阶段
成本 采样率转换器的实现成本
弗里克 多速率多级滤波器的频率响应
信息 显示有关采样率转换器的信息
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特性
重置 使内部状态复位系统对象

例子

全部折叠

转换音频信号的采样率从44.1千赫(CD质量)到96千赫(DVD质量)。

笔记:如果您使用的是R2016A或早期版本,则用等价物将每个调用替换为对象一步句法。例如,obj (x)就变成了步骤(obj, x)

注意:dsp。AudioFileWriter中不支持系统对象™金宝appMatlab在线

fs1 = 44.1 e3;fs2 = 96年e3;SRC = dsp。SampleRateConverter ('带宽', 40 e3,...'InputSamplerate', fs1、“OutputSampleRate”,FS2);[L,M] = GetRateChangeFactors(SRC);框架= 10 * m;ar = dsp.audiofilereader('guitar10min.ogg'...'samplesperframe', FrameSize);AW = dsp。AudioFileWriter (“guitar10min_96k.wav”...“SampleRate”,FS2);

运行系统15秒。释放所有对象。

Tic.toc <15 x = ar();y = src(x);AW(Y);结尾释放(AR);释放(AW);释放(SRC);

绘制输入和输出信号。为每个信号使用不同的轴。将输出移位以补偿过滤器引入的延迟。

t1 = 0:1 / fs1:1/30-1 / fs1;t2 = 0:1 / fs2:1/30-1 / fs2;延迟= 114;el1 = 1:长度(t1)延迟;el2 = 1:长度(t2);el2(1:延迟)= [];次要情节(2,1,1)情节(t1(1:长度(el1)), x (el1, 1))情节(t1(1:长度(el1)), x (el1, 2))标题(“输入”子plot(2,1,2) plot(t2(1:length(el2)),y(el2,1)) hold情节(t2(1:长度(el2)), y (el2, 2))包含(“时间(s)”)标题(“输出”

图中包含2个轴对象。标题为Input的轴对象1包含2个类型为line的对象。标题为Output的轴对象2包含2个类型为line的对象。

放大以查看采样率的差异。为每个通道使用不同的轴。

图次要情节(2,1,1)情节(t1(1:长度(el1)), x (el1, 1),'O-')举行情节(t2(1:长度(el2)), y (el2, 1),“d——”) xlim([0.01 0.0103]) title(“第一频道”)子图(2,1,2)绘图(T1(1:长度(EL1)),x(EL1,2),'O-')举行情节(t2(1:长度(el2)), y (el2, 2),“d——”xlabel([0.01 0.0103])“时间(s)”)标题(“第二频道”

图中包含2个轴对象。第一个通道包含2个类型为line的对象。标题为“第二个通道”的轴对象2包含2个类型为line的对象。

笔记:如果您使用的是R2016A或早期版本,则用等价物将每个调用替换为对象一步句法。例如,obj (x)就变成了步骤(obj, x)

创建一个具有默认属性的多级采样率转换器。转换器转换从192千赫到44.1千赫在三个阶段。

src = dsp.SampleRateConverter;

使用src转换噪声正弦信号的采样率。正弦信号的频率为20 kHz,采样时间为0.1 s。

f = 20 e3;傅氏国际= src.InputSampleRate;FsOut = src.OutputSampleRate;t1 =(0:1 /国际:0.1 1 /国际)';sIn = sIn (2*pi*f*t1) + randn(size(t1));

估计输入的功率谱密度。

hsa = dsp。简介(“SampleRate”傅氏国际,'ylimits', 40 [-40]);HSA(SIN)

转换信号的采样率。估计输出的功率谱密度。

多= src(罪);hsb = dsp。简介(“SampleRate”Fsout,'ylimits', 40 [-40]);hsb(多)

A/D转换器的信号输出采样频率为98.304 MHz。这个信号的带宽是20兆赫兹。将信号的采样率降低到22mhz,这是802.11信道的带宽。准确地进行转换,然后以1%的输出速率公差重新进行转换。

SRC1 = dsp。SampleRateConverter ('带宽', 20 e6,...'InputSamplerate',98.304e6,“OutputSampleRate”22 e6,...“OutputRateTolerance”, 0);SRC2 = dsp。SampleRateConverter ('带宽', 20 e6,...'InputSamplerate',98.304e6,“OutputSampleRate”22 e6,...“OutputRateTolerance”,0.01);

使用成本确定每个采样率转换成本的方法。零容差处理需要超过500倍的系数作为1%的过程。

c1 =成本(SRC1)
C1 =结构体字段:NumCoefficients: 84779 NumStates: 133 MultiplicationsPerInputSample: 27.0422 AdditionsPerInputSample: 26.0684
C2 =成本(SRC2)
C2 =结构体字段:NumCoefficients: 150 NumStates: 127 MultiplicationsPerInputSample: 22.6667 AdditionsPerInputSample: 22.1111

找出每个转换中使用的整数上采样和下采样因子。

[L1,M1] = GetRateChangeFactors(SRC1)
l1 = 1375.
M1 = 6144
(L2, M2) = getRateChangeFactors (SRC2)
L2 = 2
M2 = 9

当采样率转换误差为1%时,计算输出信号的实际采样率。

getActualOutputRate (SRC2)
ans = 2.1845 e + 7

笔记:如果您使用的是R2016A或早期版本,则用等价物将每个调用替换为对象一步句法。例如,obj (x)就变成了步骤(obj, x)

创建一个具有默认属性的多级采样率转换器,对应于用于从192khz转换到44.1 kHz的合并的三个滤波级。确定其总体抽取和插值因子。

src = dsp.SampleRateConverter;[L, M] = getRateChangeFactors (src);

创建一个双通道随机信号。指定与抽取因子相等的样本数目。根据信号调用该对象两次。

x = randn(m,2);y1 = src(x);y2 = src(x);no =全部(y2 == y1)
没有=1 x2逻辑阵列0 0.

输出是不同的,因为内部状态src已经改变了。使用重置重置转换器并再次调用转换器。验证输出是否未更改。

重置(SRC)Y3 = SRC(X);是=全部(y3 == y1)
是的=1 x2逻辑阵列1 1

创建一个具有默认属性的多级采样率转换器,对应于用于从192khz转换到44.1 kHz的合并的三个滤波级。计算和显示频率响应。

src = dsp.SampleRateConverter;[h,f] = freqz(src);绘图(F,20 * log10(ABS(H))))

图包含轴对象。轴对象包含类型线的对象。

计算并显示20 Hz和44.1kHz之间范围内的频率响应。

f = 20:10:44.1e3;[h,f] = freqz(src,f);绘图(F,20 * log10(ABS(H))))

图包含轴对象。轴对象包含类型线的对象。

创建src,多级采样率转换器,具有默认属性。src转换192 kHz和44.1 kHz。找到级联的单个过滤器一起执行转换。

src = dsp.SampleRateConverter;c = getFilters (src);

可视化进程的第一阶段中使用的放射器的频率响应。

m = c.Stage1;[h, w] = freqz (m);情节(w /π,20 * log10 (abs (h)))包含(“ω\ / \π”) ylabel ('幅度(db)'

图包含轴对象。轴对象包含类型线的对象。

创建一个具有默认属性的多级采样率转换器,对应于用于从192khz转换到44.1 kHz的合并的三个滤波级。

src = dsp。SamplerateConverter.
src = dsp。带有属性的SampleRateConverter: InputSampleRate: 192000 OutputSampleRate: 44100 outputrattolerance: 0 Bandwidth: 40000 stopband衰减:80

显示有关设计的信息。

信息(SRC)
ans = '整体插值因子:147整体抽取因子:640滤波器的数量:3乘每输入样本:27.667188系数的数量:8631滤波器:滤波器1:dsp。FIRDecimator -抽取因子:2滤波器2:dsp。FIRDecimator -抽取因子:2滤波器3:dsp。FIRRateConverter -插补系数:147 -抽取系数:160 '

当给定1%的公差时,获得192khz和44.1 kHz之间转换的实际输出采样率。

src = dsp.SampleRateConverter;src.outputratetolerance = 0.01;fsout = getActualOutputrate(SRC)
FsOut = 4.4308 e + 04

创建src,多级采样率转换器,具有默认属性。src结合三个过滤级转换从192千赫到44.1千赫。确定其整体内插和抽取因子。

src = dsp.SampleRateConverter;[L, M] = getRateChangeFactors (src)
L = 147
米= 640

创建一个具有默认属性的多级采样率转换器,对应于用于从192khz转换到44.1 kHz的合并的三个滤波级。可视化阶段。

src = dsp.SampleRateConverter;VisualizedFilterstages(SRC)

图形过滤器可视化工具-幅度响应(dB)包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为“大小响应(dB)”的轴对象包含3个类型为line的对象。这些对象代表滤镜1,滤镜2,滤镜3。

算法

  • 一般的多级采样率转换器按此顺序执行多级抽取、单级采样率转换和多级插值。实际的设计最多包括其中两个步骤。

  • 该程序自动确定抽取或插值级的最佳数目。在特殊情况下,抽取或插值可以在单个阶段执行。

  • 该算法总是尝试通过降低采样率来开始。这降低了所需的计算量。抽取步骤设计成使得中间采样率下降低于感兴趣的带宽。这可确保无滤除任何信息。

  • 每个阶段使用半带或奈奎斯特滤波器来最小化非零系数的数量。

  • 允许过渡带混叠,因为它降低了实现成本。在感兴趣的带宽内的信号保持别名自由,直到指定的值StopbandAttenuation财产。

扩展功能

介绍了R2014b