主要内容

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

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

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

这个例子的重点是转换音频信号采样在96千赫(DVD质量)到音频信号采样在44.1千赫(CD质量)。比较使用的数据采样在96千赫在线http://src.infinitewave.ca/.在这个例子中,96 kHz的啁啾信号是在本地产生的,所以不需要下载。

设置

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

frameSize = 64;正= 96年e3;

读取96khz文件

上面的网站有3套不同质量的文件,以便进行比较。在这个例子中,焦点只会在其中一个文件上:Swept_int.wav.这个文件包含一个啁啾正弦波扫从0 Hz到48 kHz超过8秒的过程。该文件的格式是32位整数,给定它一个非常高的动态范围。

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

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

产生96千赫信号

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

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

创建频谱分析仪

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

SpectrumAnalyzer44p1 = 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千赫采样的原始信号频谱

下面的回路绘制了原始96khz信号的谱图和功率谱。啁啾信号从0开始,扫频到48 kHz,超过8秒的模拟时间。

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

设置采样率转换器

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

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

分析涉及转换的过滤器

使用信息获取有关设计用于执行转换的筛选器的信息。这表明转换将分两个步骤执行。第一步是通过两个滤波器进行抽取,将信号从96 kHz转换为48 kHz。第二步涉及到一个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 - 1405])
ans = '整体插值因子:147整体抽取因子:320滤波器数量:2乘每输入样本:42.334375系数数量:8618滤波器:滤波器1:dsp。FIRDecimator -抽取因子:2滤波器2:dsp。FIRRateConverter -插补系数:147 -抽取系数:160 '

异步缓冲

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

浅黄色= dsp.AsyncBuffer;

主要处理循环

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

绘制了转换后信号的谱图和功率谱。谱图中额外的线对应于滤波后剩下的光谱别名/图像。从功率谱图上可以验证,复制的衰减优于80 dB。

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

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

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

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

分析涉及转换的过滤器

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

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 -抽取因子:2滤波器2:dsp。FIRRateConverter -插补系数:147 -抽取系数:160 '

主要处理循环

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

再一次绘制转换信号的谱图和功率谱。请注意,成像/混叠的衰减足够大,以至于在谱图中不可见。功率谱表现为谱混叠衰减超过160 dB(峰值约为20 dB)。

k = 1:NFrames sig96 = source();%产生啁啾在=写(浅黄色,sig96);%缓冲数据如果迷。NumUnreadSamples >= srcFrameSize [sig96buffered,under] = read(buff,srcFrameSize);sig44p1 = SRC43p5kHz160dB (sig96buffered);%转换采样率SpectrumAnalyzer44p1 (sig44p1);%转换后的信号频谱结束结束释放(源)发布(SpectrumAnalyzer44p1)发布(浅黄色)