提高LTC2387-18演示板的频谱分辨率

描述

在第 1 部分中,我们设计并测试了一种低通 + 下采样结构,该结构将 LTC2387-18 高速逐次逼近寄存器 SAR) ADC 的 DC2290A-A d 增强电路的频谱分辨率从每箱 114Hz 提高到 0.596Hz。每个垃圾箱的平均噪音水平也降低了近12dB。

滤波器被实现为128字移位寄存器和加法器。随后,下采样器使用了FPGA中74%的可用逻辑门。这种方法允许用户根据需要对不同的抽头进行加权,但代价是复杂性。如果不需要对抽头进行加权,例如添加时间窗口,那么有一种方法可以大大减少每个样品的添加次数。

以下是指LTC2387-18,但适用于LTC2387系列(LTC2386和LTC2385)的所有成员以及DC2290A演示电路的其他变体,唯一的区别是采样速率和位数。

更简单的方法

实现此滤波器的一种更简单的方法是一次加载一个样本的 N 抽头寄存器,然后形成所有抽头的总和一次。当每个新样本到达时,它被添加到总数中,最早的抽头将从总数中减去。通过这种方式,我们避免了每次样品进入移位寄存器时对所有抽头求和。下面是 N = 128 的示例。

首先,FPGA对18位数据字进行反序列化。

该词与运行频率为15MHz的时钟一起传递到模块boxcar_128。

wire [17:0] dout, dout_f;
boxcar_128 box (
.clk(cic_clk),
.din(dout),
.dout(dout_f)
);

第一个变量是时钟;此时钟的上升沿出现在转换的反序列化数据可用之后。接下来的两个变量是 18 位数据字,第一个是滤波器输入,第二个是输出。下面是模块本身的代码。

module boxcar_128 (
clk,
din,
dout
);

input clk;
input din;
output dout;

wire [17:0] din;
reg [17:0] dout;
reg [2321:0] shift_reg;
reg [24:0] sum_reg;

initial
begin
shift_reg = 0;
sum_reg = 0;
end

//load the shift register & update sum
always @ (posedge clk)
begin
shift_reg = shift_reg << 18;
shift_reg[17:0] = din;
sum_reg = sum_reg + {{7{shift_reg[17]}},shift_reg[17:0]} - {{7{shift_reg[2321]}},shift_reg[2321:2304]};
end

//scale the output to 18 bits
always @ (negedge clk)
dout = {{7{sum_reg[24]}},sum_reg[24:7]};

终端模块

模块的核心仍然是shift_reg;这是一个可容纳 128 x 18 位字的移位寄存器。就像在第一个版本中一样,这些单词是数据输入 din,一个接一个地加载到移位寄存器中。在每个时钟上升沿,最新的数据字被加载到寄存器中,而最旧的数据字被丢弃。寄存器中128个位置的总和是滤波器的输出。然后将此输出按比例缩小 7 位以适合 18 位字,并作为 dout 传递回主模块。此时,这些样本的频谱只是ADC输出的低通滤波副本。再次注意,在这种情况下,每个样本只有一个加法和一个减法。在本博客的第 1 部分中,每个样本执行了 128 次添加,这大大增加了所需的逻辑单元数量。

下一步是缩减采样,这是通过将每 128 个过滤器样本传递到数据收集板来完成的。

结果比较

这种结构产生的噪声水平和分辨率与第1部分更复杂的规范实现相同,但仅使用FPGA中可用逻辑元件的3%。它要简单得多,因为每个样本时刻只执行一个加法和一个减法。此处描述的代码的Verilog和编程文件都可以在右侧面板上找到。

寄存器

65K 点 FFT,9.76KHz 音调,每箱噪声为 –151.3dBFS

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分