ad采样频率_涨知识!模拟信号采样与AD转换详解

本文深入解析Nyquist采样定理的基本原理及其应用,探讨模数转换过程中涉及的关键步骤和技术细节,包括采样率的选择、采样保持操作、量化噪声的影响等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 、著名的Nyquist采样定理

尽管大家都知道,但还是提一提。大牛奥本海姆的《信号与系统》中是这样描述的:

Let x(t) be a band-limited signal with X(jw) = 0 for |w|> wM. Then x(t) is uniquely determined by its samples x(nT),n=1,±1,±2,...,ifws> 2wMwhere ws= 2 pi/T.

Given these samples, we can reconstruct x(t) by generating a periodic impluse train in which successive impluse have amplitudes that are successive sample values. This impluse train is then processed through an ideal lowpass filter with gain T and cutoff frequency greater than wMand less than ws-wM. The resulting output signal will exactly equal x(t).

来捋一捋,几个点:

带宽有限(band-limited) 采样频率大于2倍信号最高频率后可以无失真的恢复出原始信号。

实际中,信号往往是无线带宽的,如何保证带宽有限?所以,我们在模拟信号输入端要加一个低通滤波器,使信号变成带宽有限,再使用2.5~3倍的最高信号频率进行采样。关于此我们下面将模拟数字转换过程将会看到。

虽说是不能小于等于2倍,但选2倍是不是很好呢,理论上,选择的采样频率越高,越能无失真的恢复原信号,但采样频率越高,对后端数字系统的处理速度和存储要求也就越高,因此要选择一个折中的值。

如果后端数字信号处理中的窗口选择过窄,采样率太高,在一个窗口内很难容纳甚至信号的一个周期,这从某方面使得信号无法辨识。

比如,数字信号处 理的窗口大小为1024个点,采样率为50KHz,则窗口最多容纳1024*(1/50KHz)=20.48ms的信号长度,若信号的一个周期为 30ms>20.48ms,这就使得数字信号的处理窗口没法容纳一个周期信号,解决的办法就是在满足要求的前提下使用减小采样率或增加窗口长度。

2、 模数转换

记得有一次参加中科院计算所的实习笔试,里面就有这么一道题:模拟信号转换到数字信号要经历哪两个步骤?还好,早有准备,立刻填上了采样和量化。我们下面就来详细分析下这两个过程,但在分析之前,我们先给出一张整个过程的流图,您可以先想想为什么需要各模块。

7077e3e2bd9357eabf59211c06fbdc18.png

程控放大器

我们实际中的模拟信号都是通过传感器采集进来的,做过单片机的人应该熟知DS18B20温度传感器,不好意思,那是数字传感器,也就是说人家做传感器的时候把AD转换也放到传感器里面了。

但这并不是普遍的情况,因为温度量是模拟信号中最容易测量的量了,而大多数的传感器并没有集成AD转换过 程,如大多数的加速度传感器、震动传感器、声音传感器、电子罗盘,甚至有的GPS(别懵了,GPS也算是一种传感器哦)等,都是模拟输出的。

而且由于物理 制作的原因,传感器返回的电信号非常微小,一般在几mV(如果是电流,也一般在几mA),这么微弱的信号,如果经过导线或电缆传输很容易就湮灭在噪声中。因此,我们常常见到模拟传感器的输出线都会使用套上一层塑胶的线,叫屏蔽线(如图)。

0d38660d9685dc39a9825b0868694c48.png

屏蔽线只能保证在信号传输到系统之前受到的干扰最小,但信号仍要经过处理才能为数字系统使用。在模拟信号(尤其是高频信号)的输入端首先要使用 低噪声放大器对信号进行放大,这个放大器有特殊的要求,一定是低噪声,我们已经知道,模拟信号信号已经非常微弱。

如果放大器还存在一定的噪声,在噪声叠加 之后放大出来的信号可能已经不再是原信号了。既然说到低噪声,那么低噪声是如何衡量的呢?这可以通过放大器噪声系数(NF)来定。

7162f47edb1ea18e1c901ad56aef36a4.png

噪声系数定义为放大器输入信号与输出信号的信噪比。其物理含义是:信号通过放大器之后,由于放大器产生噪声,使信噪比变坏;信噪比下降的倍数就是噪声系数。噪声系数通常用dB表示。

3fa10bedb7af3f1323b3e3720e1a21d1.png

实际中除了考虑低噪声系数外,还要考虑放大器的带宽和频率范围以及最重要的放大增益。由于输入信号的强度可能时变,采用程序可控(程控)的放大增益保证信号能达到满度而又不会出现饱和(实际中要做到这一点还是很难的)。

低通滤波器

在Nyquist采样定理中已经提过,要满足采样定理必须要求信号带宽有限,使用大于2倍的最高信号频率采样才能保证信号的不混叠。低通滤波器的一个考虑就是使信号带宽有限,以便于后期的信号采样,这个低通滤波器是硬件实现的。

另一方面,实际情况中我们也只会对某个频频段的信号感兴趣,低通滤波器的另一个考虑就是滤波得到感兴趣的信号。比如,测量汽车声音信号,其频率大部分在5KHz以下,我们则可以设置低通滤波器的截止频率在7KHz左右。

程控的实现方法就是使用模拟通道选择芯片(如74VHC4051等)。

NOTES:

在采样之前的所有电路实现方案叫信号调理电路。这样,我们就可以根据这个词到处Google/Baidu文献了。

采样及采样保持

采样貌似有一套完整的理论,就是《数字信号处理》书中的一堆公式推导,我们这里当然不会那么去说。其实采样最核心的问题就是采样率选择的问题。

根据实际,选择频率分辨率df 选择做DFT得点数N,因为DFT时域点数和变换后频域点数相同,则采样率可确定,Fs=N*df Fs是否满足Nyquist的采样定理?是,OK,否则增加点数N,重新计算2。

我们希望df越小越好,但实际上,df越小,N越大,计算量和存储量随之增大。一般取N为为2的整数次幂,不足则在尾端补0。

这里给出我的一个选择Fs的方案流程图,仅供参考。

889db5396d5079f63c938c9ed25d39d0.png

采样后还有一个重要的操作是采样保持(S/H)操作,采样脉冲采样后无法立刻量化,这个过程要等待很短的一个时间,硬件上一般0.几个us,等待量化器的量化。

注意,在量化之前,所有的信号都是模拟信号,模拟信号就有很多干扰的问题需要考虑,这里只是从总体上给出我对整个过程的理解。更多细化的方案还需要根据实际信号进行研究。

量化

我们可以先直观的看一下量化的过程:

6527045666493f116fe9b843264b0b59.gif

量化有个关键的参数,叫量化位数,在所有的AD转换芯片(如AD7606)上都能看到这个关键的参数,常见的有8bit,10bit,12bits,16bit和24bit。

5c9a8de7159d6bcf9b2d8f890f443737.png

如上图,以AD7606为例,AD7606是16bit的AD芯片,量化位数指用16bit来表示连续信号的幅值。因此,考虑AD的测量范围(AD7606有两种:±5V和±10V),则AD分辨率是

±5V: (5V-(-5V)) / (2^16) = 152 uV

±10V: (10V-(-10V)) / (2^16) = 305 uV

量化位数越高,AD分辨率越高,习惯上,AD分辨率用常用LSB标示。

因此,AD7606中对于某个输入模拟电压值,因为存在正负电压,若以0V为中间电压值,范围为±5V时AD转换电压可计算为

bf581a8da6cb2999d374124f3f4acbd4.png

AD7606若使用内部参考电压,Vref=2.5V。哦对了,这又出现个参考电压。参考电压与AD量化的实现方式有关,从速度上分串行和并行,串行包括逐次逼近型,并行方式包括并行比较式,如下图(左:串行,右:并行)。AD7606是使用逐次逼近型的方式。

678260315d07482005dd48776011d2f9.png

afe69baf629b40631b082c409a29bc88.png

AD转换芯片另外两个重要参数是转换时间(转换速率)。并行AD的转换速率比串行的要高。但并行比较的方式中电阻的精度对量化有影响。

接着,我们还将介绍一个重要的概念:量化噪声。量化噪声对应量化信噪比。

SNRq= (6.02N + 4.77) dB其中N为量化位数,且不去管这个公式是怎么得到的(详细推导可参考文献[2]),对于

N=12, SNRq≈ 70dB

N=16, SNRq≈ 94dB

从中可以看出:每增加1bit量化位数,SNRq将提高6.02dB,在设计过程中,如果对方有信噪比的要求,则在ADC选型时就要选择合适位数的ADC芯片。

明显的,并不是量化位数越高越好,量化位数的提高将对成本、转换速度、存储空间与数据吞吐量等众多方面提出更高的要求。同时,我们尽量提高量化噪声的前提是信号的SNR已经比较低了,如果信号的SNR比量化噪声还高,努力提高量化噪声将是舍本求末的做法。

免责声明:本文系网络转载,版权归原作者所有。如有问题,请联系我们,谢谢!

<think>我们正在讨论在STM32平台上使用DSP库实现FIR滤波器时,如何选择合适的采样频率和截止频率。首先,我们需要明确几个关键概念: 1. **采样频率(Sampling Rate)**:指每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(Hz)。根据奈奎斯特采样定理,采样频率必须至少是信号最高频率的两倍,才能无失真地恢复原始信号。因此,采样频率的选择取决于待处理信号的最高频率成分。2.**截止频率(CutoffFrequency)**:对于FIR滤波器,截止频率通常指滤波器通带阻带之间的边界频率。在数字滤波器中,截止频率通常以归一化频率表示,即实际频率采样频率的一半(奈奎斯特频率)的比值,范围在0到1之间(其中1对应奈奎斯特频率)。 ###选择采样频率的考虑因素:- **信号带宽**:确定需要处理的信号的最高频率分量($f_{max}$),则采样频率$f_s$应满足$f_s\geq2\times f_{max}$。实际应用中,通常选择$f_s >2.5\timesf_{max}$以提供一定的过渡带。- **硬件限制**:STM32的ADC模块和定时器触发能力决定了实际可实现的采样频率。需要查阅具体型号的数据手册,了解ADC的最大采样率(例如,STM32F4系列ADC最高可达2.4MSPS)。 -**系统资源**:采样频率越高,单位时间内需要处理的数据量越大,对处理器的计算能力和内存需求也越高。因此,在满足信号无失真的前提下,不宜选择过高的采样频率。###选择截止频率的考虑因素: -**归一化截止频率**:在FIR滤波器设计中,截止频率通常以归一化频率表示。设实际截止频率为$f_c$,则归一化截止频率为:$$ f_{norm} =\frac{2\times f_c}{f_s} $$其中$f_s$为采样频率。例如,若采样频率为10kHz,截止频率为2kHz,则归一化截止频率为0.4。 -**滤波器类型**:低通、高通、带通或带阻滤波器,其截止频率的设定方式不同。低通滤波器只需一个截止频率(通带截止频率),而带通滤波器需要两个截止频率(下截止频率和上截止频率)。- **滤波器性能要求**:包括通带波纹、阻带衰减、过渡带宽度等。这些要求会影响滤波器的阶数(抽头数),进而影响计算量。###具体实施步骤(使用STM32DSP库):1.**确定信号特性**:分析待处理信号的频率范围,确定最高频率$f_{max}$。 2. **选择采样频率**:根据$f_{max}$和硬件能力确定$f_s$,并确保满足$f_s>2 \times f_{max}$。3.**确定滤波器类型和截止频率**:根据应用需求(如去除高频噪声)设定截止频率$f_c$,并计算归一化截止频率$f_{norm}$。4.**设计FIR滤波器系数**:-可以使用MATLAB的FDATool、Python的scipy.signal或在线工具生成FIR滤波器系数。-注意:STM32 DSP库要求滤波器系数以Q格式(定点数)表示,通常为Q15或Q31。5. **配置STM32的ADC和定时器**:设置定时器触发ADC采样采样率等于$f_s$。 6. **调用DSP库函数**:使用`arm_fir_init_f32`或`arm_fir_init_q15`初始化滤波器,然后在ADC中断或DMA传输完成中断中调用`arm_fir_f32`或`arm_fir_q15`进行滤波计算。 ###注意事项: -**实时性**:FIR滤波器的计算量滤波器阶数(抽头数)和采样频率成正比。需要确保在采样间隔内完成所有计算,否则会导致数据丢失。可以通过优化算法(如使用循环缓冲区)、降低阶数或降低采样频率来满足实时性要求。- **量化误差**:使用定点数(Q15/Q31)时,需注意系数量化和计算过程中的精度损失。 ###示例参数选择: 假设我们需要处理一个最高频率为1kHz的音频信号,设计一个低通FIR滤波器,截止频率为1.2kHz。1.选择采样频率:$f_s =5\text{kHz}$(满足$f_s>2 \times1\text{kHz}$,且留有一定余量)。 2.归一化截止频率:$f_{norm}= \frac{2 \times1200}{5000}=0.48$。 3.使用MATLAB设计一个FIR滤波器(如Hamming窗),阶数选择32(根据过渡带和衰减要求确定)。4.将滤波器系数转换为Q15格式(乘以32767并取整),并存储在STM32的数组中。5.配置ADC和定时器,以5kHz的速率采样。6.在DMA中断中调用`arm_fir_q15`进行滤波处理。 ###性能优化建议: -若计算量过大,可考虑降低滤波器阶数或使用多速率信号处理(先降采样)。-利用STM32的DSP指令(如SIMD)加速滤波计算。§§相关问题§§1.如何将浮点FIR滤波器系数转换为STM32 DSP库支持的Q15格式?2.在STM32上实现FIR滤波器时,如何优化计算速度以满足实时性要求? 3. FIR滤波器阶数如何影响滤波效果和计算量? 4.如何利用STM32的DMA和双缓冲区实现高效的数据采集和滤波?</think>### 在STM32上实现FIR滤波的采样频率截止频率选择指南 #### 一、核心概念解析 1. **采样频率($f_s$)** - 根据奈奎斯特采样定理:$f_s \geq 2 \times f_{max}$ ($f_{max}$为信号最高频率分量) - 实际工程中建议:$f_s \geq 2.5 \times f_{max}$ (预留抗混叠裕量)[^1] - STM32硬件限制: - ADC最大采样率需查数据手册(如STM32F4为2.4 MSPS) - 定时器触发频率需匹配$f_s$ 2. **截止频率($f_c$)** - 归一化频率计算: $$ f_{norm} = \frac{2 \times f_c}{f_s} $$ (DSP库要求输入归一化值,范围0.0~1.0) - 设计原则: - 低通滤波:$f_c > f_{signal}$ 且 $f_c < f_{noise}$ - 通带波纹通常<1dB,阻带衰减>40dB #### 二、选择步骤公式 1. **信号分析阶段** ```mermaid graph TD A[确定信号最高频率 f_max] --> B[计算最小采样频率 f_s_min=2.5*f_max] B --> C[结合ADC性能选择实际f_s] C --> D[确定目标截止频率 f_c] D --> E[计算归一化截止频率 f_norm=2*f_c/f_s] ``` 2. **关键参数关系** | 参数 | 影响 | 约束条件 | |---|---|---| | 滤波器阶数N | 计算量时延 | $N \propto \frac{f_s}{\Delta f}$ | | 过渡带$\Delta f$ | 滤波锐度 | $\Delta f = \frac{k \cdot f_s}{N}$ | (k为窗函数系数,汉明窗k≈3.3) #### 三、STM32 DSP库实现要点 1. **系数生成示例(MATLAB)** ```matlab fs = 10e3; % 采样频率10kHz fc = 2e3; % 截止频率2kHz norm_fc = 2*fc/fs; % 归一化频率0.4 h = fir1(31, norm_fc); % 32阶汉明窗滤波器 ``` 2. **STM32代码适配** ```c #include "arm_math.h" #define NUM_TAPS 32 // 滤波器阶数 float32_t firCoeffs[NUM_TAPS] = { /* Q15格式系数 */ }; float32_t stateBuffer[NUM_TAPS + BLOCK_SIZE - 1]; void init_fir() { arm_fir_instance_f32 firInst; arm_fir_init_f32(&firInst, NUM_TAPS, firCoeffs, stateBuffer, BLOCK_SIZE); } ``` #### 四、工程实践建议 1. **采样频率选择** - 典型场景参考: | 应用场景 | 推荐$f_s$范围 | 说明 | |---|---|---| | 音频处理 | 8-48 kHz | 满足20kHz人耳上限 | | 工业振动 | 1-10 kHz | 机械振动通常<500Hz | | 心电监测 | 250-1k Hz | 心电信号<150Hz | - 抗混叠措施: - 必须配置硬件抗混叠滤波器(RC电路) - ADC采样时钟需稳定(使用定时器触发) 2. **截止频率优化** - 过渡带设计: $$ \Delta f = f_{stop} - f_{pass} $$ 建议$\Delta f$ ≥ 10% $f_s$(避免阶数过高) - 实时性验证公式: $$ T_{process} \leq \frac{1}{f_s} $$ (单次滤波耗时需小于采样间隔) 3. **资源平衡技巧** - 当$f_s$过高时: - 降低滤波器阶数(牺牲过渡带性能) - 启用CMSIS-DSP的SIMD指令加速 - 当要求锐截止时: - 使用多级滤波(降低单级阶数) - 选择更优窗函数(如凯塞窗) #### 五、常见错误规避 1. **归一化频率错误** - 错误做法:直接输入$f_c$值 - 正确做法:必须计算$f_{norm} = 2f_c/f_s$ 2. **实时性不足** - 检查点: - 使用DWT计数器测量`arm_fir_f32()`执行时间 - 确保满足:$T_{process} < \frac{1}{f_s}$ 3. **频率混淆** - 必须满足:$f_s > 2f_{max}$ - 实测方法:输入$f_s/2$信号应被完全衰减 > **案例**:在电机控制中监测1kHz振动信号: > - 选择$f_s = 5\text{kHz}$(满足$2.5\times f_{max}$) > - 设置$f_c = 1.2\text{kHz}$(归一化值$0.48$) > - 32阶FIR滤波后信噪比提升32dB[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值