一、整体架构
工程代码实现互相关计算,用于计算两个信号(参考信号和单通道信号)的互相关函数,并支持数据延迟调整功能。
S_IDLE → 空闲,等待启动信号
↓ i_corr_start
S_STORE → 存储阶段:将输入数据写入 RAM1/RAM2(2048点)
↓ 存满2048点
S_ACC_PRE → 累加预处理:准备计算能量
↓
S_CALC_ENERGY → 计算能量:分别计算 ref 和 single 的信号能量(∑x²)
↘ 等待12拍(流水线延迟)
S_CALC_SQRT → 开方计算:√(energy_a × energy_b),用于归一化分母
↓
S_LAG_CYCLE → 滞后循环初始化:设置读写地址
↓
S_LAG_PRE → 滞后预处理:判断地址是否越界
↓
S_LAG_ACC → 滞后累加:计算当前 lag 的互相关值(∑x[n]·y[n+lag])
↘ 等待12拍(乘法器+累加流水线)
S_LAG_NEXT → 下一个滞后量:lag = lag + 1
↘ 如果 lag ≤ max_lag,回到 S_LAG_CYCLE
S_CALC_FINISH → 计算完成:置位 o_done
↓
S_DELAY_PRE → 延迟模式预处理(i_delay_start触发)
↓
S_DELAY_CTRL → 延迟输出模式:直接从RAM读取延迟后的数据输出
↓ 读完2048点
S_FINISH → 结束
通过独立控制两个RAM的读取地址,实现了灵活的延迟调整功能,满足您一组0延迟、另一组36个数据延迟的需求。
工作原理
通过独立控制两个RAM的读取起始地址,可以实现不同的延迟量
如果i_ref_delay=0,则参考数据0延迟输出
如果i_single_delay=36,则信号数据36个数据延迟后
输出两路数据按各自的延迟参数从RAM中读取,实现对齐
三、FPGA与Matlab仿真
Matlab仿真
生成用于FPGA仿真的定点数据,同时计算互相关延迟量,并通过移动延迟量保证信号同步。
FPGA仿真
互相关峰值
仿真验证结果为-34,与Matlab仿真结果一致。
移相前的信号,相位不一致
移相后的信号,相位一致
四、源码
1、百度网盘链接
请前往购买:https://mp.weixin.qq.com/s/938eIcm9ecmt7icqnfpWZA
阅读全文
363