matlab实现音频信号的左右声道信号分离_【正点原子FPGA连载】第三十二章 音频环回实验-摘自【正点原子】开拓者 FPGA 开发指南...

1)实验平台:正点原子开拓者FPGA 开发板

2)摘自《开拓者FPGA开发指南》关注官方微信号公众号,获取更多资料:正点原子

3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-13912-1-1.html

01294608dbdd2a1836d98fe44242bd72.png

第三十二章 音频环回实验

WM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器,它结合了一个高质量的

立体声音频DAC和ADC,带有灵活的音频线输入、麦克风输入和音频输出处理。其主要应用于便

携式应用,可以应用到可携式数码摄像机或数码相机等设备。本章我们将使用FPGA开发板上的

WM8978器件实现音频环回的功能。

本章包括以下几个部分:

32.1 WM8978简介

32.2 实验任务

32.3 硬件设计

32.4 程序设计

32.5 下载验证

WM8978简介

WM8978是欧胜(Wolfson)推出的一款全功能音频处理器。它带有一个HI-FI级数字信号处

理内核,支持增强3D硬件环绕音效,以及5频段的硬件均衡器,可以有效改善音质。

WM8978具有高级的片上数字信号处理功能,包含一个5路均衡功能,一个用于ADC和麦克风

或者线路输入之间的混合信号的电平自动控制功能,一个纯粹的录音或者重放的数字限幅功能。

另外在ADC的线路上提供了一个数字滤波的功能,可以更好的应用滤波,比如“减少风噪”。

WM8978集成了立体声差分麦克风的前置放大与扬声器、耳机和差分、立体声线输出的驱动,

减少了应用时必需的外部组件,比如不需要单独的麦克风或者耳机的放大器。WM8978提供了一

个强悍的扬声器功放,可提供高达900mW的高质量音响效果扬声器功率,一个数字回放限制器

可防止扬声器声音过载。WM8978进一步提升了耳机放大器输出功率,在推动16欧姆耳机的时候,

每个声道最大输出功率高达40毫瓦!可以连接市面上绝大多数适合随身听的高端HI-FI耳机。

WM8978整体功能模块的框图如图 32.1.1所示:

14c73dec398cb70a96ed1e6bd19e326e.png

图 32.1.1 WM8978整体功能框图

WM8978可通过I2S或PCM音频接口(I2S/PCM AUDIO INTERFACE)与FPGA进行音频数据传输。

具体应用哪种方式可通过控制接口(Control Interface)配置相应的寄存器。控制接口是一

个可选的2线或3线结构。通过MODE引脚选择(MODE引脚接高电平时为3线接口模式、低电平时

为2线接口模式),当控制接口为2线接口模式时,其时序图如下图所示。

8b5a97638cfe33c524465c10d94e57f2.png

图 32.1.2 两线接口时序图

由上图可见,其时序图与I2C时序相同。此时SCLK为串行时钟线、SDIN为串行数据线,WM8978

芯片的器件地址固定为0011010b。本次实验我们使用的是两线的控制接口。

音频接口的ADCDAT为ADC数据的输出接口,本实验中WM8978通过此接口输出音频给FPGA,

DACDAT为DAC数据的输入接口,WM8978通过此接口接收FPGA输出的音频。LRC为音频左右声道的

数据对齐时钟信号,BCLK即Bit Clock(位时钟),用于同步数据输入和输出。MCLK为主时钟

输入接口,MCLK的频率为256fs,fs为音频的采样率,一般为48kHz,所以MCLK为256 × 48 =

12288kHz = 12.288MHz。我们一般使用FPGA内部的PLL分频得到12MHz的时钟信号,然后通过

配置WM8978内部的寄存器使其PLL输出12.288MHz的时钟信号。

WM8978支持主从两种工作模式。主从工作模式的区别在于BCLK和LRC由谁控制。在主模式

下,WM8978作为主控设备,产生BCLK和LRC信号并输出。在从模式下,BCLK和LRC信号由外部设

备(本实验指FPGA)提供,WM8978作为从设备接收BCLK和LRC信号。可见如果使WM8978工作在

从模式下,我们需要通过FPGA产生BCLK和LRC信号,既浪费FPGA内部的资源也浪费(空闲)了

WM8978本身的资源,所以一般使WM8978工作在主模式下。主从工作模式通过配置R6寄存器的

bit0位来设置,bit0位为0时WM8978工作在从模式下,为1时WM8978工作在主模式下,本次实验

我们使WM8978工作在主模式下。

对于音频接口,本次实验我们采用I2S音频总线接口传输音频数据。I2S(Inter-IC Sound)

总线,又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定

的一种总线标准,该总线专门负责音频设备之间的数据传输,广泛应用于各种多媒体系统。I2S

的优点是接收端与发送端的音频数据有效位数可以不同。如果接收端能处理的有效位数少于发

送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自

行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

I2S总线的音频传输格式如下图:

94bf5d34a1ea8fce56a92cf7732c5445.png

图 32.1.3 I2S总线音频传输格式

fs为音频的采样率,LRC为左右声道的对齐时钟。由上图可知,当LRC为低电平时传输左声

道的音频数据,高电平时传输右声道的音频数据。位时钟BCLK的频率=2×采样频率×采样位数,

由于使用的是主模式,LRC和位时钟BCLK由WM8978提供,所以我们无需关心其频率的大小。我

们需要注意的是I2S格式的音频信号DACDAT和ADCDAT无论有多少位有效数据,数据的最高位总

是出现在LRC变化后的第2个BCLK脉冲处,即传输数据时高位在前,且该位在LRC变化后BCLK的

第2个上升沿采样到。

图 32.1.1中的LIP(LIN)、RIP(RIN)分别为左麦克风前置放大同相(反相)输入和右

麦克风前置放大同相(反相)输入,L2/GPIO2和R2/GPIO3分别为左通道线输入/GPIO引脚和右

通道线输入/GPIO引脚,AUXL和AUXR为左右辅助输入。LOUT1和ROUT1为耳机的左右输出,LOUT2

为第二左输出或者BTL扬声器反相输出,ROUT2第二右输出或者BTL扬声器同相输出。

由图 32.1.1可见输入到输出的通道通过一个个开关控制,每个开关由相应的寄存器控制。

配置相应的寄存器就可打开相应的通道、使能相应的功能。

WM8978内部有58个寄存器。每个寄存器的地址位为7位,数据位为9位。可通过控制接口配

置相应的寄存器以打开相应的通道或使能相应的功能。这里我们简单介绍一下要正常使用

WM8978来播放音乐时,需要配置的寄存器。

1.寄存器R0(00h),该寄存器用于控制WM8978的软复位,写任意值到该寄存器地址,即

可实现WM8978的软复位。

2.寄存器R1(01h),该寄存器需要设置VMIDSEL(bit[1:0])为2’b11,开启最快启动;

BUFIOEN(bit2)为1,避免输入输出直接在WM8978内部环回;BIASEN(bit3)为1,模拟部分

的放大器才会工作,才可以听到声音,PLLEN(bit5)为1使能WM8978内部PLL功能,使WM8978

内部的主时钟为12.288MHz。

3.寄存器R2(02h),该寄存器需要设置ROUT1EN(bit8)、LOUT1EN(bit7)为1,使能耳机输

出;BOOSTENR(bit5)、BOOSTENL(bit4)为1,使能左右声道进入BOOST;ADCENR(bit1)、

ADCENL(bit0)为1,使能左右声道的ADC功能。

4.寄存器R3(03h),该寄存器要设置LOUT2EN(bit6),ROUT2EN(bit5),RMIXER(bit3),

LMIXER(bit2),DACENR(bit1)和DACENL(bit0)等6个位为1。LOUT2EN和ROUT2EN,设置为1,使

能喇叭输出;LMIXER和RMIXER设置为1,使能左右声道混合器;DACENL和DACENR则是使能左右

声道的DAC,使数字音频信号转换为模拟音频信号。

5.寄存器R4(04h),该寄存器要设置WL(bit[6:5])和FMT(bit[4:3]) 4个位。WL(bit[6:5])

用于设置字长(即设置音频数据有效位数),00表示16位音频,10表示24位音频;FMT(bit[4:3])

用于设置音频接口数据传输格式,我们设置为10,使用I2S音频数据格式传输音频数据。

6.寄存器R6(06h),该寄存器的MS(bit0)设置为1,使WM8978工作在主模式下,输出BCLK

和LRC给FPGA。

7.寄存器R7(07h),该寄存器我们要设置采样率SR(bit[3:1])为000,使用48kHz的采

样率;设置SLOWCLKEN(bit0)为1,使能零交叉功能。

8.寄存器R10(0Ah),该寄存器我们要设置DACOSR128(bit3)为1,DAC得到最好的SNR。

9.寄存器R14(0Eh),该寄存器我们要设置ADCOSR128(bit3)为1,ADC得到最好的SNR。

10.寄存器R43(2Bh),该寄存器我们只需要设置INVROUT2(bit4)为1即可,反转ROUT2

输出,更好的驱动喇叭。

11.寄存器R47(2Fh)和寄存器R48(30h),这两个寄存器设置类似,一个用于设置左声

道(R47)输入增益(bit[6:4]),另外一个用于设置右声道(R48)输入增益(bit[6:4])。

12.寄存器R49(31h),该寄存器我们要设置SPKBOOST(bit2)和TSDEN(bit1)这两个位。

SPKBOOST用于设置喇叭的增益,我们设置为1(gain=+1.5)以获得更大的声音;TSDEN用于设

置过热保护,设置为1(开启)即可。

13.寄存器R50(32h)和 R51(33h),这两个寄存器一个用于设置左声道(R50),另外

一个用于设置右声道(R51)。我们只需要设置这两个寄存器的最低位为1即可,将左右声道的

DAC输出接入左右声道混合器里面,才能在耳机/喇叭听到音乐。

14.寄存器R52(34h)和R53(35h),这两个寄存器用于设置耳机音量,同样一个用于设

置左声道(R52),另外一个用于设置右声道(R53)。这两个寄存器的最高位(HPVU)用于设

置是否更新左右声道的音量,最低6位用于设置左右声道的音量,我们可以先设置好两个寄存器的音量值,最后设置其中一个寄存器最高位为1,即可更新音量设置。

15.寄存器R54(36h&#

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值