都好!
我现在有一个Arduino Duemilanove闲逛,以为我可以尝试一些音频接口项目。我只是想知道我可以使用单个模拟输入并在芯片上应用一些简单的算法,然后使用与LED绑定的一些数字输出来报告哪种采样频率。
如果可能的话,我想以〜44.1 kHz的频率进行采样。
作为参考,我想尝试的第一件事是一个简单的吉他调音器。
都好!
我现在有一个Arduino Duemilanove闲逛,以为我可以尝试一些音频接口项目。我只是想知道我可以使用单个模拟输入并在芯片上应用一些简单的算法,然后使用与LED绑定的一些数字输出来报告哪种采样频率。
如果可能的话,我想以〜44.1 kHz的频率进行采样。
作为参考,我想尝试的第一件事是一个简单的吉他调音器。
Answers:
我认为您无法以全分辨率快速进行采样。ATMega168只能以15 ksps的全分辨率采样。
话虽如此,您应该能够获得合适的采样率,以获得运行良好的吉他调音器。鉴于吉他的高E弦的基本频率约为330 Hz,因此44.1 kHz最有可能比您所需的速度快一点。
如果使用模拟比较器(AVR中的内部比较器或外部运算放大器之一)将模拟输入变成方波,则可以以更高的速度采样振荡。尽管这不是真正的音频采样,但构建吉他调音器通常只是您所需要的,因为您的所有代码无论如何都会在单位时间内计数零交叉。
有许多串行ADC可用,I2S是恩智浦基于I2C的标准。它们使您可以轻松轻松地以更高的速度拉入模拟信号。该链接将带您进入专为音频设计的NXP零件: UDA1361TS
免费样品是您的朋友:)
首先,对于您的特定应用,实际上您只需要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?对此有更多了解。
正如其他人指出的那样,片上转换器将适用于该应用,但是您应该真正考虑使用外部ADC。与使用内部ADC相比,这将为您省去很多麻烦,并使您的微处理器可以通过SPI或I2C进行大量采样,获得更高的数据传输率,时钟噪声更低,精度更高。如果您想获得更高的分辨率和/或更高的数据速率,请使用LTC1867之类的东西,它可以使您以高达175kHz的频率采样(尽管您可以根据需要对其进行快速计时),然后读出24位数据在SPI上高达20MHz 看看真正的ADC可以做什么?:)使用这种功能(以及24位或32位DSP),您可以压缩和存储音频,对其进行滤波,调制,播放……无限可能。