- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚将electret microphone连接到Arduino,我想在1 kHz和4kHz的范围之间进行采样。
我知道这仅限于机器代码和ADC,所以我试图保持sketch简单。
是否可以在下面的草图中在这些频率之间进行采样?
const int analogPin = 0;
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
int mn = 1024;
int mx = 0;
for (int i = 0; i < 5; ++i) {
int val = analogRead(analogPin);
mn = min(mn, val);
mx = max(mx, val);
}
if (mx-mn >= 50) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
最佳答案
Arduino是一个原型平台,由许多硬件板和一个软件抽象层组成。对于这样的问题,考虑底层硬件的功能非常有用,因为它们提供了最终的限制。我假设您使用的是Arduino Uno / Nano,Due的情况则有所不同。
根据数据手册,每个ADC读数(超过第一个读数)都需要13个ADC时钟周期。 ADC时钟(不同于MCU)的时钟是通过将系统时钟除以至少2的某个因素得出的。因此,在16Mhz板上,这相当于每秒60万个采样。到目前为止,一切都很好。但是,这还不是故事的结局,您仍然需要读取数据。如果使用中断,即使您做的很简单,经验也表明您将损失大约100个时钟来进行中断处理。现在您的速度为每秒126K个样本。但这是理论上的最大值。
数据手册指出,要使ADC达到最高精度,需要50kHz-200kHz ADC时钟。在Arduino代码(在wiring.c
中)中,选择的除数为128:
sbi(ADCSRA, ADPS2);
sbi(ADCSRA, ADPS1);
sbi(ADCSRA, ADPS0);
readAnalog()
函数除了开始ADC转换并等待其完成之外还执行其他操作,因此它要差一些,但这并不会太糟。当然,这不涉及您的代码:您对
readAnalog()
结果进行的任何处理都会使捕获更多样本更加困难。但是,是的,要以4Khz的频率进行捕获,您需要确保代码花费的采样周期少于1.5k时钟/样本。请注意,如果您像在发布的代码中一样进行五个读数,则如果您的代码做得很少,则最大捕获率将为2kHz。
analogRead()
。实际上,麦克风的输出电压从正向负摆动,但是,除非您为麦克风提供电压偏移,否则ADC不会拾取负电压,而只能显示为零。
analogRead()
收集的所有幅度读数,然后可以在另一台计算机上对它们进行FFT:Arduino很可能不够快,无法对数据进行频率分析。
关于arduino - Arduino能否以1-4 kHz的微秒采样音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900330/
我想做fly应用喜欢this ,我知道我必须进行编码,使其产生超声波,使苍蝇远离一定距离。而且是人耳听不到的声音。 我对 iPhone 中的超声波一无所知。谁能指导我。 提前致谢。 最佳答案 下载超声
我正在学习实现 Goertzel 的算法来从录制的波形文件中检测 DTMF 音调。我从 here 中用 python 实现了一个.它支持以 8 kHz 和 16 kHz 采样的音频。我想扩展它以支持以
我正在用C编写一个小型应用程序,该应用程序从基于云的语音引擎接收mp3音频数据,并以16 khz采样率将其转换为pcm数据(wav格式)。我正在使用libmad解码mp3数据,但没有找到将其从24 k
我想用我的iPhone检测视频中的音频频率。该音调的频率应在17 kHz到20 kHz之间,我发现了一个sample,但是当我在Mac上的模拟器上尝试使用它时,它可以工作,当我将其放在iPhone上以
我尝试将 PCM 音频从 16kHz 转换为 8kHz,只是采样率,没有格式变化,流程看起来很简单,但我一直通过调用 AudioConverterFillComplexBuffermBuffers[0
我有一个 48 kHz PCM 流,并希望将其流式传输到 44.1 kHz 兼容播放器(Apple 的 AirPlay)。 有人知道这是否“有效,因为一些字节会丢失”,或者我是否必须在之前进行转换/下
我最近使用了jRecorder jQuery,但发现它以44 khz记录。我需要将创建的.wav文件转换为8或11 khz,或者找到一个要以44 khz录制的新插件。 有谁知道一个好的插件,或者知道如
我有一个wav文件,每个音频编辑器都告诉我这是一个48kHz,16位的wav文件。 但是,当我右键单击wav文件并打开Windows文件属性对话框时,看到“位速率:1152 kBit / s”。 “位
我刚刚连接了 electret microphone到 Arduino,我想在 1 kHz 的范围内进行采样和 4kHz。 我知道这仅限于机器代码和 ADC ,所以我试图保留 sketch简单。 是
我正在尝试使用 MPU-6000 加速度计和 Raspberry Pi Zero W 来记录挡风玻璃中的振动数据。我对 Python 还很陌生,所以请耐心等待。 我编写了一个 python2 脚本,用
我正在开发一个以 48 kHz 采样率运行的 VoIP 应用程序。由于它使用内部使用 48 kHz 的 Opus 作为其编解码器,并且大多数当前的 Android 硬件本身以 48 kHz 运行,因此
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我需要使用 Python 3 为一些生物声学实验捕获 192 kHz 音频。我有硬件、Sound Devices USBPre 2 声卡、具有高达 100 kHz 良好频率响应曲线的麦克风,并且我已启
开始之前:是的,我知道答案是 architecture dependent - 我只对大致数字感兴趣,就数量级而言。 linux内核对中断频率有上限吗? 背景:我想在 Linux 中连接相机模块。该模
我有这个脚本,用于将目录中的所有 wav 文件转换为 44100 hz 的 16 位。但是,它也会转换已经具有这些属性的文件。如何过滤文件以便只转换需要转换的文件? 我正在使用 ubuntu 开发 W
我正在使用带有 microSD 卡的 STM32F4 微 Controller 。我正在通过 DMA 捕获模拟数据。 我使用双缓冲区,一次获取 1280 (10*128 - 10 FFT) 个样本。当
我正在使用 RecorderJS 来录制来自用户的麦克风流。默认导出为 44.1 kHz、16 位的 WAV 文件。无论如何我可以将其降采样到 11kHz 或 16kHz 而不会听起来很奇怪吗? 无论
我尝试在 FFmpeg 中捕获 48 kHz 的音频,代码如下: AVInputFormat* ifmt = av_find_input_format("dshow"); CHECK_POI
我想将音频文件解码为原始 PCM 数据,以将其流式传输到本地网络中的播放设备。我使用新的 MediaExtractor和 MediaCodec API 级别 16 引入的类。该设备要求 PCM 数据为
最近新买了一个USB示波器,想测avr timer0的频率。有一个 12 MHz 晶体振荡器连接到 atmega,timer0 设置为没有预分频器的快速 PWM 模式。这是代码: #include
我是一名优秀的程序员,十分优秀!