基于fpga与matlab的超声多普勒频移解调应用
微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
一 、超声多普勒频移解调知识点
多普勒效应:接收到的运动目标反射或散射的超声波频率与原发射频率有所不同。
多普勒频移:由多普勒效应引起的发射频率与运动目标反射或散射的频率之间的频差。
多普勒频移解调:发射和接收换能器靠得很近,所以总有一部分发射信号透过来直接耦合到接收器,这些不需要的波称为杂波。从复杂的口波信号中提取多普勒频移信号,称为多普勒频移解调。
多普勒频移解调原理框图:
二、FPGA多普勒频移解调功能设计开发
1、vivado开发平台(vivado 2019.2,其余版本按照步骤生成新工程即可)
①DDS IP核生成2Mhz和(2Mhz+1Khz)的sin频率信号;
②乘法ip核实现2Mhz和(2Mhz+1Khz)的sin频率信号混频处理;
③FIR IP实现低通滤波算法(Matlab获取滤波参数);
④FFT IP核实现FFT的算法;
⑤乘法ip核实现FFT处理后数据取模运算;
⑤通过算法实现取模运算后65536数据的峰值搜索;
⑥对峰值结果进行计算,并与1Khz理论值比对
2、FPGA功能设计框图
3、FFT工程设计
①顶层TOP,fft_top.v;
②内部时钟i产生1M时钟,用于FFT IP核时钟;
③dds_ctrl控制模块,DDS IP核实现2Mhz和(2Mhz+1Khz)的sin频率信号,以及乘法ip核实现4Mhz和1Khz的sin频率信号混频处理;
④FIR IP实现低通滤波算法
⑤FFT IP核实现FFT的算法;
⑥通过算法实现取模运算后1024数据的峰值搜索,并计算出杂波频率,与理论值1K比对;
4、FFT工程设计中IP核配置
①DDS ip
步骤1:打开IP Catalog,点击Window下IP Catalog
步骤2:查找dds IP核 dds compiler,搜索输入
步骤3:dds IP核dds compiler配置——Configuration,修改名称,设置选择Phase Generator and SIN COS LUT,设置输入系统时钟50M,两路通道2M和2M+1K
步骤4:dds IP核dds compiler配置——Implementation,Output 选择Sine模式,对比Matlab中sin信号,相位输出不使能
步骤5:dds IP核dds compiler配置——Detailed Implementation,DATA Output 选择Chan ID Field,对应两路输出2M和2M+1K的sin信号
步骤6:dds IP核dds compiler配置——Output Frequencies,设置两路输出信号的频率2M和2M+1K
②乘法 ip(88)
步骤1:打开IP Catalog,点击Window下IP Catalog
步骤2:查找乘法 IP核 multiplier,搜索输入
步骤3:乘法 IP核 multiplier配置——Basic,修改名称,设置输入数据的位宽8
步骤4:乘法 IP核 multiplier配置——Output and Control,无需设置,只需要关注输出数据的最高位MSB和最低位LSB,方便其他模块使用乘法ip的输出数据
③fir IP核 FIR Compiler
步骤1:打开IP Catalog,点击Window下IP Catalog
步骤2:查找fir IP核 FIR Complier,搜索输入
步骤3:fir IP核——Filter Options,选择滤波系数,通过COE File直接导入(后面章节会说明如何使用Maltab生成滤波系数)
步骤4:fir IP核——Channal Specification,设置时钟频率和采样频率均为50M
步骤5:fir IP核——Implementation,设置Coefficient Type和Width与Matlab生成系数一致
步骤6:fir IP核——Interface,适配前端数据(来自dds ip核),需要设置Tready,不需要设置tlast
④fft IP核 Fast Fourier Transform
步骤1:打开IP Catalog,点击Window下IP Catalog
步骤2:查找fft IP核 Fast Fourier Transform,搜索输入
步骤3:fft IP核配置——Configuration,修改名称,设置通道,传输的数据65536,设置Target Clock Frequency,采样率1M,选择基4突发结构
步骤4:fft IP核配置——Implementation,数据格式选择定点数类型,放缩设置为块浮点模式, 输出 FFT 结果选择顺序输出
步骤5:fft IP核配置——Detailed Implementation
步骤6:fft IP核——Implementation Details
①输入给fft ip核的axi4_stream接口的计算数据,fft ip作为slaver,来自dds ctrl;CHAN_0_XN_IM_0(31:16)是复数的虚部,CHAN_0_XN_RE_0(15:0)是复数的实部;
FFT混频信号只使用实部的信号,低 16 位赋值为乘法器输出值, 高 16 位赋值为 0;
②输入给fft ip核的axi4_stream接口的配置数据,fft ip作为slaver,1-正变换,0-逆变换
代码里需要设置配置数据为1,快速傅里叶正变换;
③fft ip核输出的axi4_stream接口的结果数据,fft ip作为master
将fft ip输出的数据的实部和虚部进行平方(通过乘法核实现)再相加
即可得到FFT处理后的频谱图
⑤乘法 ip(1616)
步骤1:打开IP Catalog,点击Window下IP Catalog
步骤2:查找乘法 IP核 multiplier,搜索输入
步骤3:乘法 IP核 multiplier配置——Basic,修改名称,设置输入数据的位宽16
步骤4:乘法 IP核 multiplier配置——Output and Control,无需设置,只需要关注输出数据的最高位MSB和最低位LSB,方便其他模块使用乘法ip的输出数据
三、Matlab FIR滤波系数生成
1、选择app滤波器设计工具
2、根据自己的需求设计低通滤波器
3、生成xilinx.coe
四、仿真及结果验证
根据计算,仿真出最大值67,杂波频率(67*1000000)/65536=1022