目前在做GD32替代STM32作为主控的各种飞行器研究,欢迎感兴趣的朋友联系我。

FPGA实现脉冲信号MVT量化器

前言:采集脉冲信号,这个在嵌入式中相当常见的功能,很容易想到的方法有:定时器直接采PWM的脉宽、滤波后用ADC采能量(详见前文)。但是对于非常快速的尖脉冲信号,比如辐射粒子信号检测(能量511keV的粒子产生的脉宽时间为500ps左右),如果采用ADC方案则需要采样率达10G以上,这样的ADC价格极其昂贵而且还买不到!所以对于这样的信号,需要采用一种全新的思路,也就是接下来要讨论的MVT(多电压阈值Multi-Voltage Threshold)方法。

MVT Digitizer系统结构

system Architect

上图是从一篇做PET的论文中抽取的,除去后面的以太网通信部分,这就是一套完善的由FPGA实现的MVT Digitizer系统。

这个系统的核心组件是:

  1. LVDS Comparator:基于LVDS接收器的定阈值比较器
  2. TDC:基于加法器和传播延时设计的“时间数字转换器”
  3. Pack Module:对检测的阈值触发时间进行处理的算法逻辑实现

接下来,对这个系统的核心硬件部分依次进行原理分析。

阅读更多...

深刻理解神经网络计算原理

笔者初入深度学习先是使用TensorFlow后转PyTorch,但都是在框架上进行开发,只能理解各种网络结构的“头口”原理。在学习的中后期或者是要做落地的时候,就会困扰一个非常常见的问题——我们的网络到底需要多少的计算资源?我们暂且将计算资源在两方面考虑:显存和浮点计算次数。这就需要对网络计算过程的底层有透彻直接的认识,也就是本文的重点

很多厉害的大佬可以根据经验、直觉直接判断哪些网络可以在嵌入式平台上跑,但是笔者还是偏爱将过程量化

全连接网络

梯度下降

为了方便讨论,我们选取单隐藏层的全连接网络进行讨论。首先,声明该网络的输入为:

$$
x_0 = \begin{bmatrix}
x_0^{(1)} \\
x_0^{(2)} \\
\vdots \\
x_0^{(m_0)}
\end{bmatrix} \sim [m_0,1]
$$

本文中所有公式中~后的为矩阵、向量的维度。然而,在训练过程中,我们通常一次使用几个样本一起训练网络(mini-batch),那么一次输入网络的数据就是:

$$
X_0 = \begin{bmatrix}
x_{0,1} ,
x_{0,2} ,
\cdots ,
x_{0,N}
\end{bmatrix} \sim [m_0,N]
$$

阅读更多...

神经网络训练优化器及工具

前言:在上一篇ResNet实战博客中,笔者采用的都是最简单的激活函数和梯度下降训练算法,并且在训练到瓶颈期还需要手动停止训练并调整学习率。所以在本篇中我们将讨论训练优化算法和一些自动训练工具。

Basic:随机梯度下降

SGD:Stochastic gradient descent

这部分属于入门知识,可以看吴恩达老师的课程,讲得非常通俗易懂。

梯度下降

我们的模型(神经网络)本质上是一组不断调整参数的函数组合而成一个我们想要的复杂函数。而根据微积分和高维空间的知识我们知道,任何函数都存在导数(或Jacobian矩阵)并且都存在凹凸特性。而神经网络的训练就是基于这一点,通过人工设计一个目标损失函数,然后以最小化(或最大化)该函数为目标,不断计算输入数据在该损失上的梯度,并不断迭代寻找到函数最低点(上图)。我们将模型和目标损失函数表示为:

$$
\text{网络模型:}\hat{Y} = F(X)
\\
\text{损失函数:}L(\hat{Y},Y)|_{w,b}
$$

SGD训练参数过程:

$$
w := w-\alpha\cdot \frac{\partial L}{\partial w}
\\
b := b-\alpha\cdot \frac{\partial L}{\partial b}
$$

阅读更多...
  • Copyrights © 2022-2023 RY.J
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信