主要内容

音频信号的多级采样率转换

这个例子展示了如何使用多级/多速率方法在不同音频采样率之间进行采样率转换。

示例使用dsp。SampleRateConverter.该组件自动确定使用多少阶段,并为每个阶段设计所需的滤波器,以便以计算高效的方式执行采样率转换。

本例着重于将采样频率为96 kHz (DVD质量)的音频信号转换为采样频率为44.1 kHz (CD质量)的音频信号。比较是使用在96千赫的采样数据进行的https://src.infinitewave.ca/.在本例中,96 kHz啁啾信号是在本地生成的,因此不需要下载。

设置

定义一些在整个示例中使用的参数。

frameSize = 64;inFs = 96e3;

读取96 kHz文件

为了进行比较,上面的网站有3组不同质量的文件。在这个例子中,焦点只会在一个文件上:Swept_int.wav.这个文件包含一个啁啾正弦波扫从0赫兹到48千赫在8秒的过程中。该文件的格式是32位整数,具有非常高的动态范围。

在这里,您创建一个System对象来读取音频文件并确定文件的音频采样率。如果您想使用wav文件而不是dsp。尖声地说,取消注释下面的行并跳过调用到dsp。尖声地说

source = dsp.AudioFileReader('Swept_int.wav',…SamplesPerFrame, frameSize,……“OutputDataType”、“双”);

生成96千赫信号

而不是下载Swept_int.wav文件,也可以生成啁啾信号使用dsp。尖声地说如下:

Source = dsp。唧唧声(“InitialFrequency”0,“TargetFrequency”48岁的e3,...“SweepTime”8“TargetTime”8“SampleRate”正,...“SamplesPerFrame”frameSize,“类型”“二次”);

创建频谱分析仪

创建两个频谱分析仪。这些将用于可视化原始信号的频率内容以及转换为44.1 kHz的信号的频率内容。

spectrmanalyzer44p1 = dsp。简介(...“SampleRate”, 44100,...“ViewType”“光谱和谱图”...“TimeSpanSource”“属性”“时间间隔”8...“窗口”“皇帝”“SidelobeAttenuation”, 220,...“YLimits”(-250年,50),“ColorLimits”(-150年,20),...“PlotAsTwoSidedSpectrum”、假);SpectrumAnalyzer96 = dsp。简介(...“SampleRate”, 96000,...“ViewType”“光谱和谱图”...“TimeSpanSource”“属性”“时间间隔”8...“窗口”“皇帝”“SidelobeAttenuation”, 220,...“YLimits”(-250年,50),“ColorLimits”(-150年,20),...“PlotAsTwoSidedSpectrum”、假);

在96千赫采样的原始信号频谱

下面的循环绘制了原始96 kHz信号的频谱图和功率谱。啁啾信号从0开始,在8秒的模拟时间内扫到48 kHz。

NFrames = 8*inFs/frameSize;k = 1:NFrames sig96 = source();%的来源SpectrumAnalyzer96 (sig96);%光谱图结束发布(源)发布(SpectrumAnalyzer96)

设置采样率转换器

为了转换信号,dsp。SampleRateConverter使用。第一次尝试将感兴趣的带宽设置为40 kHz,即覆盖范围[-20 kHz, 20 kHz]。这是人类通常可以听到的声音范围。用于去除光谱副本和混叠副本的滤波器的阻带衰减保持默认值80 dB。

BW40 = 40e3;OutFs = 44.11 e3;SRC40kHz80dB = dsp。SampleRateConverter (“带宽”BW40,...“InputSampleRate”正,“OutputSampleRate”, OutFs);

转换中涉及的滤波器分析

使用信息获取有关用于执行转换的筛选器的信息。这表明转换将分两个步骤执行。第一步是通过两个滤波器进行抽取,将信号从96khz转换为48khz。第二步涉及到一个FIR速率转换器,它用147进行插值,用160进行十进制。结果是所需的44.1千赫。的freqz命令可用于可视化所涉及的两个级的组合频率响应。放大显示,通带扩展到指定的20 kHz,通带纹波在毫微米-dB范围内(小于0.003 dB)。

info(SRC40kHz80dB) [H80dB,f] = freqz(SRC40kHz80dB,0:10:25e3);情节(20 * log10 (abs (H80dB) /规范(H80dB正)))包含(的频率(赫兹)) ylabel (“(dB)级”)轴([0 25e3 -140 5])
ans = '总体插值因子:147总体抽取因子:320过滤器数量:2乘法每个输入样本:42.334375系数数量:8618过滤器:过滤器1:dsp。FIRDecimator - Decimation Factor: 2 Filter 2: dsp。FIRRateConverter -插值因子:147 -抽取因子:160 '

异步缓冲

从96 kHz到44.1 kHz的采样率转换为每320个输入样本产生147个样本。由于啁啾信号是由64个采样帧生成的,因此需要一个异步缓冲区。啁啾信号一次写入64个样本,当有足够的样本缓冲时,读取其中的320个样本并将其馈送到样本速率转换器。

buff = dsp.AsyncBuffer;

主要处理回路

下面的循环以流方式执行采样率转换。如果需要,计算速度足够快,可以进行实时操作。

绘制了转换后信号的谱图和功率谱。谱图中多余的线对应滤波后剩余的光谱别名/图像。该副本衰减优于80 dB,可以验证与功率谱图。

srcFrameSize = 320;k = 1:NFrames sig96 = source();%产生啁啾写(浅黄色,sig96);%缓冲数据如果迷。NumUnreadSamples >= srcFrameSize sig96buffered = read(buff,srcFrameSize);sig44p1 = SRC40kHz80dB(sig96buffered);转换抽样率SpectrumAnalyzer44p1 (sig44p1);查看转换后信号的频谱结束结束release(source) release(spectrmanalyzer44p1) release(buff)

一个更精确的采样率转换器

为了提高采样率转换器的质量,可以做两个改变。首先,带宽可以从40 kHz扩展到43.5 kHz。这反过来又需要具有更锐利过渡的滤镜。其次,阻带衰减可以从80 dB增加到160 dB。这两种变化都是以牺牲更多的滤波器系数以及每个输入样本更多的乘法为代价的。

BW43p5 = 43.5e3;SRC43p5kHz160dB = dsp。SampleRateConverter (“带宽”BW43p5,...“InputSampleRate”正,“OutputSampleRate”OutFs,...“StopbandAttenuation”, 160);

转换中涉及的滤波器分析

之前的采样率转换器涉及8618个滤波器系数,每个输入样本的计算成本为42.3次乘法。通过增加带宽和阻带衰减,成本大幅增加到123896个滤波器系数和每个输入样本440.34次乘法。频率响应显示出更尖锐的滤波器跃迁以及更大的阻带衰减。此外,通带纹波现在是在微分贝尺度。注意:此实现涉及设计非常长的过滤器,需要几分钟才能完成。然而,这是离线发生的一次性成本(在实际采样率转换之前)。

info(SRC43p5kHz160dB) [H160dB,f] = freqz(SRC43p5kHz160dB,0:10:25e3);情节(20 * log10 (abs (H160dB) /规范(H160dB正)));包含(的频率(赫兹)) ylabel (“(dB)级”)轴([0 25e3 -250 5])
ans = '总体插值因子:147总体抽取因子:320过滤器数量:2乘法每个输入样本:440.340625系数数量:123896过滤器:过滤器1:dsp。FIRDecimator - Decimation Factor: 2 Filter 2: dsp。FIRRateConverter -插值因子:147 -抽取因子:160 '

主要处理回路

用更精确的采样速率转换器重复处理。

再次绘制转换后信号的谱图和功率谱。请注意,成像/混叠已经衰减到在光谱图中不可见的程度。功率谱显示光谱别名衰减超过160 dB(峰值约为20 dB)。

k = 1:NFrames sig96 = source();%产生啁啾Over = write(buff,sig96);%缓冲数据如果迷。NumUnreadSamples >= srcFrameSize [sig96buffered,under] = read(buff,srcFrameSize);sig44p1 = SRC43p5kHz160dB(sig96buffered);转换抽样率SpectrumAnalyzer44p1 (sig44p1);查看转换后信号的频谱结束结束release(source) release(spectrmanalyzer44p1) release(buff)