Arduino Duemilanove的最大采样率?


11

都好!

我现在有一个Arduino Duemilanove闲逛,以为我可以尝试一些音频接口项目。我只是想知道我可以使用单个模拟输入并在芯片上应用一些简单的算法,然后使用与LED绑定的一些数字输出来报告哪种采样频率。

如果可能的话,我想以〜44.1 kHz的频率进行采样。

作为参考,我想尝试的第一件事是一个简单的吉他调音器。


糟糕-这是ATMega168版本。
Sketchy Fletchy,2009年

4
@Sketchy,您可以编辑是否需要的问题,而不必在评论中添加细节。
克林特·劳伦斯

1
对于吉他调音器,关于频率估计,stackoverflow有很多问题。 stackoverflow.com/questions/65268/…我已经回答了一堆,并在此处发布了一些方法的示例代码:gist.github.com/255291
endolith 2010年

Answers:


15

我认为您无法以全分辨率快速进行采样。ATMega168只能以15 ksps的全分辨率采样。

话虽如此,您应该能够获得合适的采样率,以获得运行良好的吉他调音器。鉴于吉他的高E弦的基本频率约为330 Hz,因此44.1 kHz最有可能比您所需的速度快一点。


出色-可以轻松回答我的问题。我不认为168能够进行完整的人类音频频谱采样,但是如果我能获得至少660 Hz的采样率,我应该能够识别出高e字符串而不会出现混叠。为了安全和敏感性,我会稍微提高一点。谢谢!
Sketchy Fletchy,2009年

电话系统以8000 Hz采样。
joeforker


4

Google推出了“ AVR吉他调音器”,已经有几个项目可以做到这一点,而且他们似乎能够在不影响AVR速度的情况下做到这一点。


3

如果使用模拟比较器(AVR中的内部比较器或外部运算放大器之一)将模拟输入变成方波,则可以以更高的速度采样振荡。尽管这不是真正的音频采样,但构建吉他调音器通常只是您所需要的,因为您的所有代码无论如何都会在单位时间内计数零交叉。


1
我认为,我的担心是您确实需要运行FFT来挑选基本原理。拨弦时吉他会产生各种频率,对零交叉点进行计数只会给您足够的信息来构成方波,从而使FFT完全没有用。
wackyvorlon

一旦您经过初始瞬变,单音吉他输出(尤其是电声)就近似为正弦波。在基波幅度附近没有谐波谐波。所有便宜的数字吉他调音器仅执行过零定时,而在频域中则不执行任何操作。这是AVR 2323(相对于Arduino而言)myplace.nu/avr/gtuner/index.htm上的一种技术示例, 这是另一种使用MIDI的Arduino的youtube.com/watch?v=oGKE1vmAWCA
todbot

我不认为吉他调音师算过零,这当然不是一个好方法。它甚至不接近正弦波,每个周期可能有很多零交叉点: flic.kr/p/7ns9nu
endolith 10-4-27

我见过的调谐器有一个低通滤波器,可将输入信号尽可能地转换成正弦波。
todbot

3

有许多串行ADC可用,I2S是恩智浦基于I2C的标准。它们使您可以轻松轻松地以更高的速度拉入模拟信号。该链接将带您进入专为音频设计的NXP零件: UDA1361TS

免费样品是您的朋友:)


1
非常感谢!这将远远超过我需要的简单调谐器,但该芯片对于我的某些未来项目而言似乎是完美的。我最终希望获得一个简单的嵌入式DSP平台来进行效果处理实验。谢谢!
Sketchy Fletchy,2009年

1

首先,对于您的特定应用,实际上您只需要1 kHz左右的采样率即可,前提是您要调整基频而不是非谐波分量之一

无论如何,关于最大可能的采样率,Arduino手册说:

读取模拟输入大约需要100微秒(0.0001 s),因此最大读取速率约为每秒10,000次。

这意味着最大采样频率为10 kHz。 然而。 您可以通过直接访问ADC寄存器来获得更高的采样率。例如,“ Arduino实时音频处理”页面使用两个15 kHz的通道。因此,最大10 kHz仅在使用内置AnalogRead()函数时才会使用,因为它有很多开销。

该ADC经过优化,可在50 kHz至200 kHz的时钟速度下实现最佳工作:

默认情况下,逐次逼近电路需要50 kHz到200 kHz之间的输入时钟频率[ADC时钟]以获得最大分辨率。

由于ADC转换需要13个时钟周期,因此采样率为4 kHz至15 kHz。根据AVR120:AVR上ADC的表征和校准

为了获得最佳性能,ADC时钟不应超过200 kHz。但是,高达1 MHz的频率不会显着降低ADC分辨率。

没有说明以高于1 MHz的频率运行ADC。

1 MHz时钟频率= 77 kHz采样频率,因此这是实际的最大值。

论坛主题Faster Analog Read?对此有更多了解。


0

正如其他人指出的那样,片上转换器将适用于该应用,但是您应该真正考虑使用外部ADC。与使用内部ADC相比,这将为您省去很多麻烦,并使您的微处理器可以通过SPI或I2C进行大量采样,获得更高的数据传输率,时钟噪声更低,精度更高。如果您想获得更高的分辨率和/或更高的数据速率,请使用LTC1867之类的东西,它可以使您以高达175kHz的频率采样(尽管您可以根据需要对其进行快速计时),然后读出24位数据在SPI上高达20MHz 看看真正的ADC可以做什么?:)使用这种功能(以及24位或32位DSP),您可以压缩和存储音频,对其进行滤波,调制,播放……无限可能。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.