Arduino Duemilanove의 최대 샘플링 속도는?


11

모두들!

나는 Arduino Duemilanove가 지금 여분의 주위에 매달려 있고 몇 가지 오디오 인터페이스 프로젝트를 시도 할 수 있다고 생각했습니다. 단일 아날로그 입력을 사용하고 칩에 간단한 알고리즘을 적용한 다음 LED에 연결된 몇 가지 디지털 출력을 사용하여보고 할 수있는 샘플링 주파수의 종류가 궁금합니다.

가능한 경우 ~ 44.1kHz로 샘플링하고 싶습니다.

참고로 가장 먼저 시도하고 싶은 것은 간단한 기타 튜너입니다.


죄송합니다. ATMega168 버전입니다.
Sketchy Fletchy

4
@Sketchy는 주석에 세부 사항을 추가하는 대신 필요한 경우 질문을 편집 할 수 있습니다.
클린트 로렌스

1
기타 튜너의 경우 주파수 추정에 대한 스택 오버 플로우에 대한 여러 가지 질문이 있습니다. stackoverflow.com/questions/65268/… 나는 그들 중 다수
endolith

답변:


15

나는 당신이 풀 해상도로 빨리 샘플링 할 수 있다고 생각하지 않습니다. ATMega168은 최대 해상도에서 15 ksps로만 샘플링 할 수 있습니다.

그렇게 말하면 작동하는 기타 튜너를 얻기 위해 적절한 샘플 속도를 얻을 수 있어야합니다. 44.1 kHz는 기타가 높은 E 현의 기본이고 기타가 약 330 Hz라는 점을 감안할 때 필요한 것보다 상당히 빠릅니다.


훌륭합니다-그것은 내 질문에 간결하게 대답합니다. 나는 168이 완전한 인간 오디오 스펙트럼 샘플링을 할 수 있다고 생각하지 않았지만, 적어도 660Hz의 샘플링 속도를 얻을 수 있다면 앨리어싱없이 높은 e 스트링을 식별 할 수 있어야합니다. 나는 안전과 감성을 위해 그것을 조금 위로 올릴 것입니다. 감사!
Sketchy Fletchy

전화 시스템은 8000Hz에서 샘플링합니다.
joeforker


4

구글은 'AVR 기타 튜너'를 위해 이미 몇 가지 프로젝트가 있으며 AVR의 속도에 너무 많은 문제없이 할 수있는 것처럼 보입니다.


3

아날로그 입력을 구형파로 바꾸는 아날로그 비교기 (AVR의 내부 입력기 또는 외부 opamp 입력기)를 사용하는 경우 훨씬 빠른 속도로 진동을 샘플링 할 수 있습니다. 이것이 진정한 오디오 샘플링은 아니지만 기타 튜너를 제작할 때는 모든 코드가 어쨌든 단위 시간당 제로 크로싱을 계산하기 때문에 필요한 모든 것입니다.


1
제 생각에는 기본을 선택하기 위해 실제로 FFT를 실행해야한다는 것입니다. 기타는 줄을 뜯을 때 모든 종류의 주파수를 생성하며, 제로 크로싱을 계산하면 구형파를 구성하기에 충분한 정보 만 제공되므로 FFT를 완전히 쓸모 없게 만듭니다.
wackyvorlon

단일 음표 기타 출력 (특히 전기)은 초기 트랜 션트를 지나면 사인파에 가깝습니다. 기본의 진폭 근처에 이상한 고조파가 없습니다. 모든 cheapie 디지털 기타 튜너는 제로 크로싱 타이밍을 수행하며 주파수 영역에서 아무것도하지 않습니다. 다음은 AVR 2323 (Arduino에 상대적으로 가까운) myplace.nu/avr/gtuner/index.htm 에 대한 기술의 한 예입니다. 여기 MIDI와 함께 Arduino를 사용하는 다른
예가 있습니다.

기타 튜너는 제로 크로싱을 계산하지 않는다고 생각하며, 이것은 좋은 방법이 아닙니다. 그것은 사인파에 가깝지 않으며, 사이클 당 많은 제로 크로싱이있을 수 있습니다 : flic.kr/p/7ns9nu
endolith

내가 본 튜너에는 입력 신호를 최대한 사인파로 변환하는 저역 통과 필터가있었습니다.
todbot

3

직렬로 제공되는 많은 ADC가 있으며 I2S는 I2C 기반 NXP의 표준입니다. 훨씬 더 빠른 속도에서도 아날로그를 쉽게 쉽게 가져올 수 있습니다. 이 링크는 오디오 용으로 설계된 NXP 부품으로 연결됩니다 : UDA1361TS

무료 샘플은 당신의 친구입니다 :)


1
매우 감사합니다! 간단한 튜너를 사용하는 데 필요한 것보다 조금 더 많을 것이지만 그 칩은 미래의 일부 프로젝트에 완벽하게 보입니다. 결국 이펙트 프로세싱을 실험 할 간단한 인라인 DSP 데크를 얻고 싶습니다. 감사!
Sketchy Fletchy 2009

1

첫째, 특정 응용 분야의 경우 기본 주파수를 조정 하고 고조파 부분 중 하나가 아니라고 가정 할 때 실제로 1kHz 정도의 샘플링 속도 만 있으면됩니다 .

어쨌든 가능한 최대 샘플링 속도와 관련하여 Arduino 매뉴얼 은 다음과 같이 말합니다.

아날로그 입력을 읽는 데 약 100 마이크로 초 (0.0001 초)가 걸리므로 최대 판독 속도는 초당 약 10,000 배입니다.

이것은 10kHz 샘플링 주파수가 최대임을 의미합니다. 하나. ADC 레지스터에 직접 액세스하여 더 높은 샘플링 속도를 얻을 수 있습니다 . 의 Arduino 실시간 음성 처리부 페이지는 예를 들어, 15 kHz의 두 개의 채널을 사용한다. 따라서 10kHz 최대 값은 내장 된 AnalogRead () 함수를 사용하는 동안에 만 오버 헤드가 많기 때문에 최대입니다.

ADC는 50kHz ~ 200kHz의 클록 속도로 최상의 작동을 위해 최적화되었습니다.

기본적으로 연속 근사 회로에는 최대 분해능을 얻기 위해 50kHz ~ 200kHz 사이의 입력 클록 주파수 [ADC 클록]이 필요합니다.

ADC 변환에는 13 클럭 사이클이 걸리므로 샘플링 속도는 4kHz ~ 15kHz입니다. AVR120 에 따르면 : AVR에서 ADC의 특성화 및 교정 :

최적의 성능을 위해서는 ADC 클록이 200kHz를 초과하지 않아야합니다. 그러나 최대 1MHz의 주파수는 ADC 해상도를 크게 낮추지 않습니다.

1MHz 이상의 주파수로 ADC를 작동시키는 것은 특징이 없습니다.

1MHz 클록 주파수 = 77kHz 샘플링 주파수이므로 실제 최대 값입니다.

포럼 스레드 Faster Analog Read? 이것에 대해 더 많은 것을 가지고 있습니다.


0

다른 사람들이 지적했듯이 온칩 컨버터는이 애플리케이션에서 작동하지만 실제로는 외부 ADC를 사용해야합니다. 이렇게하면 많은 문제가 발생하지 않으며 마이크로 클럭의 노이즈가 적고 내부 ADC를 사용하는 것보다 정확도가 높으면서도 훨씬 높은 데이터 속도로 SPI 또는 I2C를 통해 마이크로 샘플을 샘플링 할 수 있습니다. 더 높은 해상도 및 / 또는 더 높은 데이터 속도를 원한다면 LTC1867과 같은 것을 사용하면 최대 175kHz (샘플링 할 수는 있지만 원하는 속도로 빠르게 클럭 할 수 있음)로 샘플링 한 다음 24 비트 데이터를 읽을 수 있습니다. SPI를 통해 최대 20MHz에서. 실제 ADC가 무엇을 할 수 있는지 보십니까? :) 이러한 종류의 전원 (24 또는 32 비트 DSP)을 사용하면 오디오를 압축 및 저장하고, 필터링하고, 변조하고, 재생할 수 있습니다. 가능성은 무한합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.