dsp。SampleRateConverter
多级采样速率转换器
描述
的SampleRateConverter
系统对象™转换传入信号的采样率。
转换信号的采样率:
创建
dsp。SampleRateConverter
对象并设置其属性。使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
描述
创建多级FIR采样速率转换器系统对象,src
= dsp。SampleRateConvertersrc
,它转换输入信号的每个通道的采样率。
返回多级FIR采样速率转换器系统对象,src
= dsp。SampleRateConverter (名称,值
)src
,其中的属性和选项由一个或多个指定名称,值
对参数。
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
功能解锁它们。
如果属性为可调,您可以随时更改其值。
有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计.
带宽
- - - - - -感兴趣的双向带宽
40000(默认)|积极的标量
指定感兴趣的双边带宽(速率转换后)为以Hz表示的正标量。此属性设置希望保留的信号中携带信息部分的双面带宽。
InputSampleRate
- - - - - -输入信号的采样率
192000(默认)|积极的标量
指定输入信号的采样率为以Hz表示的正标量。输入采样率必须大于感兴趣的带宽。
OutputRateTolerance
- - - - - -输出采样率的最大允许容差
0(默认)|积极的标量
指定输出信号的采样率的最大允许容差为0到1之间的正标量。
在许多情况下,输出速率公差允许更简单的设计。实际输出采样率有所不同,但都在指定范围内。例如,如果OutputRateTolerance
指定为0.01
,则实际输出的采样率在所给出的范围内OutputSampleRate
±1%。
OutputSampleRate
- - - - - -输出信号的采样率
44100(默认)|积极的标量
指定输出信号的采样率为以Hz表示的正标量。输出采样率必须大于感兴趣的带宽。
StopbandAttenuation
- - - - - -锯齿组件的最小dB衰减
80(默认)|积极的标量
将阻带衰减指定为以dB表示的正标量。此属性是该过程中涉及的任何混叠被衰减的最小值。
使用
语法
输入参数
x
- - - - - -输入信号
向量|矩阵
输入信号,指定为矢量或矩阵。的行长x
必须是整体抽取因子的倍数。抽取因子由getRateChangeFactors
函数。的每一列x
被视为单独的通道。
数据类型:单
|双
复数支持:金宝app是的
输出参数
y
-重采样信号
向量|矩阵
重新采样的信号,以矢量或矩阵形式返回。
数据类型:单
|双
复数支持:金宝app是的
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj
,使用这种语法:
发行版(obj)
特定于dsp。SampleRateConverter
getActualOutputRate |
获得实际产量 |
getFilters |
获得单级过滤器 |
getRateChangeFactors |
得到整体插值和抽取因子 |
visualizeFilterStages |
可视化过滤阶段 |
例子
转换音频信号的采样率
将音频信号的采样率从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的)
使用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的)
放大查看样本率的差异。
图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的)
转换正弦信号的采样率
请注意:如果您正在使用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)))
计算并显示20 Hz至44.1 kHz范围内的频率响应。
F = 20:10:44.1e3;[H,f] = freqz(src,f);情节(f, 20 * log10 (abs (H)))
单级过滤器
创建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)级”)
默认多级采样率转换器
创建一个具有默认属性的多级采样率转换器,对应于用于从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
财产。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
看到系统对象在MATLAB代码生成(MATLAB编码器).
的getRateChangeFactors
函数支持C和c++金宝app代码生成。
该对象支持在以下条件下使金宝app用Intel AVX2技术生成SIMD代码:
对于上采样,输出采样率与输入采样率的比值必须为整数。
对于下采样,输入采样率与输出采样率的比值必须为整数。
输入信号的数据类型为
单
或双
.
SIMD技术显著提高了生成代码的性能。
版本历史
在R2014b中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。