标签 DSP 下的文章

概要

在本项目中,为了降低数字信号处理过程中的主控制器成本,我们不得不使用MCU(微控制器)来替代传统的FPGA与DSP。然而对于MCU而言,实时的数字信号处理是一项非常艰巨的任务。因为每执行一次运算都要重复取指、译码、执行等操作,这些操作累加起来将会消耗非常多的时间。但是只要思想不滑坡,方法总比困难多!

举一个最简单的例子,在STM32F103C8T6上,使用定时器来触发进入中断的最小间隔为3us(HAL库)。这就意味着如果需要在这样的中断里面更新DAC的数值,它的最大采样率就仅为333Ksps,远小于手册标称1Msps。但是好在STM32为我们提供了非常多方便的外设可供调用。在上面的例子中,我们可以使用DMA+DAC的架构从数组中直接更新DAC的取值,实测采样率一直到4Msps都可以提供较好的波形。

借助DMA我们实现了传统MCU架构中无法实现的高速信号搬移(外设->内存、内存->外设、内存->内存),但是信号的实时处理仍然是一个很头疼的问题。然而这个问题已经由ARM的工程师解决了,他们在CMSIS-DSP包中提供了非常多的快速的数学运算方法,包括基本数学运算、矩阵运算、滤波、DSP、统计运算等等。直接使用这些最聪明的工程师的成果,会帮助你实现最快的运算速度与最好的兼容性(所有的ARM类型处理器都可使用)。

在本文中,我们将会介绍一个产生信号并采集滤波的例子:

  • 调制波输出:使用STM32内置的DAC输出一个50Hz、100Hz与1KHz等幅度叠加的调制信号,使用DMA更新数据,采样率为100Ksps。
  • 调制波采集:使用内置ADC1对上述产生的数据通过DMA进行乒乓操作采集处理,并将其通过串口发送到电脑分析,采样率为5Ksps。
  • 降采样:数据采集完成后,对其进行5倍的降采样,使其采样率变为1Ksps。
  • FIR滤波:再对上述降采样的信号进行一次FIR滤波,滤除200Hz的信号,仅保留50Hz的信号。
  • FFT分析:在STM32上运行一个实时的FFT运算,离线分析降采样后的数据在频域表现如何。

- 阅读剩余部分 -

设计目标

在本文中,我们将在XO2-4000HC开发平台上,借助外部高速DAC实现:

  • DC~20MHz的正弦波,方波,三角波,锯齿波
  • 通过旋转编码器控制产生的信号频率与幅度(1 Vpp)
  • 波形的信息可以实时通过OLED显示屏查看

DDS发生器

DDS原理及实现

DDS全称为直接数字式频率合成计(Direct Digital Synthesizer),将需要输出的数据储存在ROM中,按照一定的频率去读取后通过DAC输出即可。一个完整的DDS模块应当包括:查找表、相位控制器、DAC、外部滤波器,后文将详细叙述。如果希望更加直观地了解到DDS的工作原理以及设计细节,可以访问ADI DDS仿真器,在该在线工具中你可以直观地看到每个周期的采样过程以及后置滤波器的原理。

DDS实现信号发生器需要以下参数:

  • 信号的采样率:根据奈奎斯特采样定理$f_s\ge2f_h$,理论上每个周期采样两个点即可恢复原始波形。但是请注意,以正弦波为例采样波形此时为三角波,这就对滤波器的设计提出了很高的要求。因为在实际应用中我们常常会在一周期采样多个点,本设计中采样率为120MHz,即一个周期采样6个点。
  • 相位控制字宽度:相位控制字决定了信号采样的增量间隔,理论上一个信号的最小分辨率$res=\frac{f_s}{2^n}$,在本设计中取28 bit以达到0.447Hz左右的频率分辨率。
  • 相位控制字增量:在上文中我们确定了频率的分辨率,将频率与分辨率相除即可得到单位增量。

ADI DDS仿真器

- 阅读剩余部分 -

在模拟通信系统中,基带信号通过对载波波形幅度,相位,频率的调制以达到将信号在载波上传输信息的目的。根据基带信号的类型可分为:模拟调制 & 数字调制。

调制原理

本文所述AM(Amplitude Modulation)调制,即是模拟信号对载波幅度进行调制,通过与载波信号相乘来进行频谱搬移。其中第一个公式为时域表达式,第二个公式为频域表达式。

$$ S_{AM}=(A_0+m(t))*cos(w_ct+\phi_c) $$

$$ S_{AM}(\omega)=\frac{A_0}{2}*[M(\omega+\omega_c)+M(\omega-\omega_c)] $$

在上文的公式中$m(t)$为基带信号(一般为低频信号),$A_0$为直流偏置,用来将基带信号叠加到正半轴,使得在调制后信号仍然保持着$m(t)$的包络。其中$cos(w_ct+\phi_c)$为载波信号,$\omega_c$为载波角频率。

在描述AM信号的调制深度时,常定义为$\frac{m(t)_{max}}{A_0}$,当调制深度大于1时为过调幅现象,此时因为存在相位突变,调制后的信号包络无法反映原始信号$m(t)$。

- 阅读剩余部分 -