主要内容

dsp。SampleRateConverter

多级采样速率转换器

描述

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

转换信号的采样率:

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

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

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

创建

描述

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

例子

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

属性

全部展开

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

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

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

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

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

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

在许多情况下,输出速率公差允许更简单的设计。实际输出采样率有所不同,但都在指定范围内。例如,如果OutputRateTolerance指定为0.01,则实际输出的采样率在所给出的范围内OutputSampleRate±1%。

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

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

使用

语法

描述

例子

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

输入参数

全部展开

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

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

输出参数

全部展开

重新采样的信号,以矢量或矩阵形式返回。

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

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

将音频信号的采样率从44.1 kHz (CD质量)转换为96 kHz (DVD质量)。

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

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

FsIn = 44.1e3;FsOut = 96e3;SRC = dsp。SampleRateConverter (“带宽”, 40 e3,...“InputSampleRate”傅氏国际,“OutputSampleRate”, FsOut);[L,M] = getRateChangeFactors(SRC);FrameSize = 10*M;AR = dsp。AudioFileReader (“guitar10min.ogg”...“SamplesPerFrame”, FrameSize);AW = dsp。AudioFileWriter (“guitar10min_96k.wav”...“SampleRate”, FsOut);

转换100帧音频信号。释放所有对象。

n = 1:100 x = AR();y = SRC(x);亚历山大-伍尔兹(y);结束释放(AR);释放(AW);释放(SRC);

绘制输入和输出信号。采样率转换器的延迟在输出信号中引入了延迟。

tx =(0:长度(x)-1)./FsIn;ty =(0:长度(y)-1)./FsOut;图subplot(2,1,1) plot(tx,x(:,1),“。”)举行情节(泰,y (: 1),“——”) ylim([-0.25 0.25]);Xlim ([0 0.005])“时间(s)”)传说(输入样本的的输出样本“位置”“最佳”)标题(通道1的) subplot(2,1,2) plot(tx,x(:,2),“。”)举行情节(泰,y (:, 2),“——”) ylim([-0.25 0.25]);Xlim ([0 0.005])“时间(s)”)传说(输入样本的的输出样本“位置”“最佳”)标题(通道2的

图中包含2个轴对象。标题为Channel 1的axis对象1包含2个类型为line的对象。这些对象表示输入样本、输出样本。标题为Channel 2的axis对象2包含2个类型为line的对象。这些对象表示输入样本、输出样本。

使用outputDelay函数确定此延迟值。要考虑这个延迟,请按此延迟值移位输出。

[delay,~,~] = outputDelay(SRC,Fc=0)
延迟= 0.0012
tx =(0:长度(x)-1)./FsIn;ty =(0:长度(y)-1)./FsOut;图subplot(2,1,1) plot(tx,x(:,1),“。”)举行情节(ty-delay, y (: 1),“——”xlim([0 0.005])“时间(s)”)传说(输入样本的的输出样本“位置”“最佳”)标题(通道1的) subplot(2,1,2) plot(tx,x(:,2),“。”)举行情节(ty-delay, y (:, 2),“——”xlim([0 0.005])“时间(s)”)传说(输入样本的的输出样本“位置”“最佳”)标题(通道2的

图中包含2个轴对象。标题为Channel 1的axis对象1包含2个类型为line的对象。这些对象表示输入样本、输出样本。标题为Channel 2的axis对象2包含2个类型为line的对象。这些对象表示输入样本、输出样本。

放大查看样本率的差异。

图subplot(2,1,1) plot(tx,x(:,1),Color=[0.6 0.6 0.6])保持不变情节(tx, x (: 1),“罗”)情节(ty-delay y (: 1),“b”。xlim([0.0105 0.0107])“插入输入”输入样本的的输出样本)标题(通道1的次要情节(2,1,2)情节(tx, x(:, 2),颜色= [0.6 0.6 0.6])情节(tx, x (:, 2),“罗”)情节(ty-delay y (:, 2),“b”。xlim([0.0105 0.0107])“插入输入”输入样本的的输出样本)标题(通道2的

图中包含2个轴对象。标题为Channel 1的Axes对象1包含3个类型为line的对象。这些对象表示插值输入、输入样本、输出样本。标题为Channel 2的Axes对象2包含3个类型为line的对象。这些对象表示插值输入、输入样本、输出样本。

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

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

src = dsp.SampleRateConverter;

使用src转换一个有噪声的正弦波的采样率。正弦波的频率为20千赫,采样时间为0.1秒。

F = 20e3;FsIn = src.InputSampleRate;FsOut = src.OutputSampleRate;t1 = (0:1/FsIn:0.1-1/FsIn)';sIn = sIn (2*pi*f*t1) + randn(size(t1));

估计输入的功率谱密度。

hsa =光谱分析仪(“SampleRate”傅氏国际,...“方法”“韦尔奇”“YLimits”, 40 [-40]);hsa(罪)释放(hsa)

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

sOut = src(sIn);光谱分析仪(“SampleRate”FsOut,...“方法”“韦尔奇”“YLimits”, 40 [-40]);hsb(多)释放(hsb)

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

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

使用成本确定每个采样率转换成本的方法。零容忍过程需要的系数是1%过程的500倍以上。

c1 = cost(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.1845e+07

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

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

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

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

x = randn(M,2);Y1 = src(x);Y2 = src(x);No = all(y2==y1)
没有=1x2逻辑阵列0 0

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

重置(src) y3 = src(x);Yes = all(y3==y1)
是的=1x2逻辑阵列1

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

src = dsp.SampleRateConverter;[H,f] = freqz(src);情节(f, 20 * log10 (abs (H)))

图中包含一个轴对象。axis对象包含一个line类型的对象。

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

F = 20:10:44.1e3;[H,f] = freqz(src,f);情节(f, 20 * log10 (abs (H)))

图中包含一个轴对象。axis对象包含一个line类型的对象。

创建src,具有默认属性的多级采样速率转换器。src在192千赫和44.1千赫之间转换。找到级联在一起执行转换的各个过滤器。

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

可视化在过程的第一阶段中使用的十进制的频率响应。

m = c.Stage1;[h,w] = freqz(m);情节(w /π,20 * log10 (abs (h)))包含(“\omega / \pi”) ylabel (“(dB)级”

图中包含一个轴对象。axis对象包含一个line类型的对象。

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

SRC = dsp。SampleRateConverter
SRC = dsp。带属性的SampleRateConverter: InputSampleRate: 192000 OutputSampleRate: 44100 outputratettolerance: 0 Bandwidth: 40000 StopbandAttenuation: 80

显示有关设计的信息。

信息(src)
ans = '总体插值因子:147总体抽取因子:640过滤器数量:3乘法每个输入样本:27.667188系数数量:8631过滤器:过滤器1:dsp。FIRDecimator - Decimation Factor: 2 Filter 2: dsp。FIRDecimator - Decimation Factor: 2 Filter 3: dsp。FIRRateConverter -插值因子:147 -抽取因子:160 '

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

src = dsp.SampleRateConverter;src。outputrattolerance = 0.01;FsOut = getActualOutputRate
FsOut = 4.4308e+04

创建src,具有默认属性的多级采样速率转换器。src结合了三个滤波器级,从192khz转换为44.1 kHz。确定其整体插值和抽取因子。

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

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

src = dsp.SampleRateConverter;visualizeFilterStages (src)

{

算法

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

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

  • 算法总是试图从降低采样率开始。这减少了所需的计算量。抽取步骤确保中间采样率不会低于感兴趣的带宽,并且块不会过滤掉任何信息。

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

  • 该算法允许过渡带混叠,因为它降低了实现成本。方法所指定的值之前,它将信号保持在感兴趣的别名带宽内StopbandAttenuation财产。

扩展功能

版本历史

在R2014b中引入