首页 > 其他分享 >I2S采集卡&播放器 Verilog实现

I2S采集卡&播放器 Verilog实现

时间:2024-07-05 23:02:23浏览次数:22  
标签:频谱 FFT 信号 I2S FIFO Verilog 频率 采集卡 泄露

1. 杜老师的建议
  1. 购买采集卡播放器
  • 使用采集卡可以验证生成的i2s时序是否正确
  • 使用播放器可以观察正确的i2s时序
  1. 带使能的计数器
  2. 自己能播自己能录
2. 几个音频的专业术语
  1. 音调
    实际上就是频率

  2. 音色
    音调的决定因素:

    1. 谐波的结构:声音中的谐波极其相对强度和分布是音色的主要决定因素
    2. 瞬态特性:声音开始和结束时的瞬态变化,如攻击Attack,衰减Decay,持续Sustain,释放Release过程(统称ADSR包络)
    3. 基频决定了音调,谐波影响音色
      在这里插入图片描述

各次谐波的能量分布有什么特点?
-具体问题具体分析

  1. 泛音
    1. 泛音介绍
      泛音(Overtone)是指除了基音(Fundamental Frequency)之外的其他频率成分。这些频率成分可以是基音频率的整数倍(称为谐波,Harmonics)或非整数倍(称为非谐波,Inharmonics)。
    2. 泛音的作用
      音色(Timbre):泛音的分布和强度决定了声源的音色,使得同一个音高的声音可以有不同的听感。例如,小提琴和钢琴演奏相同音高的音符,但听起来音色不同。
3. 理论分析

1 频谱泄露

  1. 泄露介绍
    发生频谱泄露是频谱发生了展宽或者拖尾造成了对临近的频率造成了干扰
    在这里插入图片描述

  2. 泄露的原因
    理论的信号可以通过傅里叶变换得到,但是现实的很多信号是不能通过傅里叶变换得到的
    对于频谱分析,因为使用计算机,所以使用DFT代替FFT,使用DFT就需要对信号进行截断,会造成频谱的泄露

  3. 窗口函数和频谱泄露
    窗口函数用于减少FFT计算时边界效应引起的频谱泄露。不同的窗口函数(如矩形窗口、汉宁窗口、汉明窗口等)对频谱泄露的影响不同。较短的FFT窗口长度使得窗口函数对信号的截断更为明显,从而增加频谱泄露。

  4. FFT的频率分辨率
    FFT的频率分辨率由窗口长度决定:
    Δ f = f s N \Delta f = \frac{f_s}{N} Δf=Nfs​​
    其中 ( \Delta f ) 为频率间隔, ( f_s ) 为采样频率, ( N ) 为FFT长度。调小FFT长度 ( N ),会增加 ( \Delta f ),即每个频率点代表的频率范围增大,从而降低频谱的分辨率。

  5. 总结
    调小FFT长度会降低频谱的频率分辨率,增加频谱泄露效应。在波形交界处,这些效应更为显著,可能导致出现两个谱峰。为了减少这些影响,可以适当增加FFT长度,或者使用合适的窗口函数以减少频谱泄露现象。

4. 我的AU实验1
  1. 频谱和有什么联系?有什么区别?

    • 为什么频谱中生成的1k是一个有宽度的?不应该是一条直线吗?
    • 频率分析图好像类似于幅频响应的东西,频谱是看频率的分布情况
      • 对的

    在这里插入图片描述

  2. 频谱图和频谱分析图对比

特点频谱图 (Spectrogram)频谱分析图 (Spectrum Analysis Plot)
定义频谱图是一种三维图表,展示了信号的频率成分随时间变化的情况。频谱分析图是一种二维图表,展示了信号在某一时刻或整体上的频率成分。
维度三维:时间、频率、幅度(通常通过颜色或灰度表示,定性)二维:频率、幅度(定量)
用途用于观察信号频率成分随时间的动态变化,常用于分析非平稳信号用于查看信号的总体频率成分,适用于平稳信号的频谱分析
表示方式x轴表示时间,y轴表示频率,颜色或灰度表示幅度。x轴表示频率,y轴表示幅度。
应用场景声音信号分析、语音处理、音乐信号处理等。电磁波信号分析、机械振动分析、声学分析等。
分析方法通过短时傅里叶变换(STFT)或其他时频分析方法生成。通过傅里叶变换(FFT)或功率谱密度(PSD)等方法生成。
  1. 傅里叶变换(FFT)和功率谱密度(PSD)对比
特点傅里叶变换(FFT)功率谱密度(PSD)
用途将时间域信号转换为频域信号分析信号在不同频率上的功率分布
适用场景信号频率成分分析随机信号的能量分布分析
结果表示频谱图,显示频率和振幅PSD图,显示频率和功率
主要应用音频处理、通信信号、振动分析噪声分析、震动测试、雷达信号
计算方法通过FFT计算离散傅里叶变换自相关函数的傅里叶变换
  1. 根据采样点和采样率计算实际信号的频率
    在这里插入图片描述

一个周期12个点 48kHz的采样率
分析:1s采样48K个点 12个点对应的时间是1/4k 对应的频率就是4kHz

  1. 在adobe audition中调小FFT长度,在波形交界处的谱线会有怎样的变化?为什么?
    调小FFT长度会对波形交界处的谱线的变化

    1. 频谱泄露增加:由于较短的窗口无法完全包含信号的完整周期信息,信号在频域内的能量分布会更加扩散,频谱泄露现
  2. 产生两个谱峰的原因

    1. 频谱泄露:由于窗口长度较短,信号在时域的截断效应导致频域上的泄露增加。在波形交界处,这种泄露效应会更加明显,从而出现两个谱峰。
    2. 边界效应信号在波形交界处的不连续性或突变在频域中表现为多个频率成分的叠加,从而导致频谱上出现多个峰值。
    3. 信号成分重叠:在交界处,不同频率成分的信号可能存在重叠,由于短窗口的频谱分辨率低,频率成分不能被准确区分,从而导致多个谱峰。
5. 我的AU实验2
  1. 实验任务
    使用Audition进行音频信号滤波

  2. AU软件的使用

    1. 频谱图的颜色代表电平/音量的大小
    2. 在时域容易直观调节音响,在频域容易直观调节噪声,两者互为补充
    3. AU处理音频的时候,视觉为辅助,最重要的还是耳朵的听觉
6. 我的I2S时序生成Verilog代码设计
  1. 程序设计的几个关键点
    在这里插入图片描述

    1. I2S规定BCLK的下降沿和LRCK的下降沿对齐
    2. MSB(数据的最高位)在BCLK的下降沿进行修改,在BCLK的上升沿进行传输
    3. 32bit是BCLK=64fs的一种极端情况,BCLK布满LRCK所有时序空间,所以理论上在BCLK=64fs的情况下最大的传输位数就是32bit(不是64bit,因为有左右声道)
    4. 注意一个重要问题:MSB的是在LRCLK的跳变沿后的第二个BCLK的上升沿进行传输的,这是一个历史的原因
  2. 出现的问题

    1. FIFO在输入输出的带宽一样的,输出速率略小于输入速率的情况下,在隔一段时间后FIFO就会爆满,在爆满的情况下再写入就会出现错误!!所以最后播放出现的声音就会出现低频的噪声
    2. 目前针对1的解决办法是尽量增大FIFO的深度,在检测到FIFO快满的时候对FIFO进行复位清空,这不是最优的处理办法,因为肯定会丢失很长的一部分数据
      在这里,我举一个例子:FIFO的深度是81XX,采样率fs=48k,那么对于丢一次数据的时间就是4000/48 000 = 4/48 = 1/12s
      在这里插入图片描述

    在这里插入图片描述

    1. FIFO偶尔读出的数据有问题也不太影响音质,一个数据进一个数据出FIFO的音质不好,不知道怎么解决
  3. 改进方法

  • 1. 让输出到DAC的LRCK时钟对齐ADC的LRCK时钟,不经过FIFO直接输出
  • 2. 让读取FIFO的速度比写FIFO的速度快一点,但是在FIFO的数量在大于200的时候才开始读
  • 3. 使用一个计数器跟踪误差偏差,如果发现数据的偏差就少写入一个FIFO的数据
7. I2S的主从模式介绍

在这里插入图片描述

8. PCM1820-ADC模块驱动
  1. 各个引脚介绍
    在这里插入图片描述

里面的FSYNC就是LRCLK

  1. 系统方框图
    在这里插入图片描述

  2. 硬件功能引脚配置

    1. MSZ接高,表示PCM1820作为主模式使用,输出LRCLK和MCLK
      在这里插入图片描述

    2. FMT0接低表示使用I2S模式
      在这里插入图片描述

    3. MD0接高表示输出的MCLK的频率是fs的512倍,并且MCLK从MD1端口进行输出
      在这里插入图片描述

  3. 模块连接图
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标签:频谱,FFT,信号,I2S,FIFO,Verilog,频率,采集卡,泄露
From: https://blog.csdn.net/qq_45956475/article/details/140101543

相关文章

  • verilog行为建模(二):命名事件和行为描述
    目录1.命名事件(namedevent)2.行为描述举例3.RTL描述举例微信公众号获取更多FPGA相关源码:1.命名事件(namedevent)在行为代码中定义一个命名事件可以触发一个活动。命名事件不可综合。moduleadd_mult(out,a,b);input[2:0]a,b;output[3:0]o......
  • Verilog图片仿真
            今天给大家分享自己使用的一段仿真代码,是我调整好的,拿去就可以直接使用!!!        我们做fpga有时候会接触一些图像相关的算法,我们不能每一次都是编译成功下载验证看效果吧,我也是找了好久,终于找到一个没啥毛病的,我对于这个模块还是做了一些调整,满足我们......
  • 【Emacs Verilog mode保姆级的使用指南】
    ......
  • 图像采集卡是什么,有什么用处
    机器视觉技术的发展源于光学、化学、物理、电子、电视、机械设计、数学、软件、人工智能、计算机和计算机视觉以及互联网等领域的发现。随着这些不同学科取得某些里程碑式的进展,它们为开发用于自动检查、测量、过程控制和机器人引导应用的成像系统铺平了道路。图像采集卡是许多高......
  • verilog写12 小时时钟(带上午/下午指示器)计数器(HDLbits Count clock)
    Createasetofcounterssuitableforuseasa12-hourclock(witham/pmindicator).Yourcountersareclockedbyafast-running clk,withapulseon ena wheneveryourclockshouldincrement(i.e.,oncepersecond).reset resetstheclockto12:00AM.......
  • HDLBits练习Shift18 Verilog逻辑右移和算数右移的区别
    算术右移时,移入的是移位寄存器中数字(本例中为q[63])的符号位,而不是逻辑右移时的零。右移n位,即加入n位符号位。即若符号位为1,在左边补1;若符号位为0,就补0。算术右移的另一种思路是,它假定被移位的数字是带符号的,并保留符号,因此算术右移是右移n位将带符号的数字除以2的n次幂。......
  • 用verilog/systemverilog 设计fifo (2)
    目录异步fifo实现中要解决的问题信号同步到那个时钟域读写指针转化为格雷码格雷码表示的读写地址如何判断空满?异步fifoverilog代码异步fifo实现中要解决的问题异步fifo和同步fifo功能相似,但是它的读写由两个时钟信号控制,所以它的设计和同步fifo不同,需要考虑更多的因素。信号......
  • 【Emacs Verilog mode保姆级的使用指南】
    ......
  • 数据采集与控制 > 声音与振动 > PCI8811,该板卡是一款为测试音频和振动信号而设计的高精
    每通道集成独立的IEPE激励源,可实现加速度传感器及麦克风等相关的信号调理。信息社会的发展,在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息与信号处理技术的整个面貌,而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关......
  • verilog 设计与综合实验报告(6)
    题目6:设计一个交通信号灯控制器1、设计方案输入为car车辆到来时为1,无车时为0,输出o_signal为交通信号灯,0001时为红灯,0010时为黄灯,0100时为绿灯,1000时为左拐灯,复位之后,交通灯在空闲状态,当车辆到来时交通灯到下一状态绿灯,等待40s,到下一状态左拐灯,等待15s,到黄灯,然后等待5s转到空......