Ответить за один раз вряд ли получится, поэтому в этом сообщении буду писать последовательно, не взыщите.
Предупреждаю, что учить теории никого не буду - её много в Интернете.
Как человек старой закалки, при анализе любого эксперимента, претендующего на научность, я обращаю внимание на условия тестирования и цели тестирования. Потому, пойду сразу этим путём.
Начну с простейшего: есть фундаментальное утверждение - теорема Котельникова (в ссылке выше - ограничена понятием частоты Найквиста). Из смысла этой теоремы есть одно важное следствие (точнее - это одно из условий в теореме): для воспроизведения сигнала из дискретных отсчётов необходимо, чтобы в сигнале отсутствовали частоты больше половины частоты дискретизации. В противном случае спектр "складывается" и появляются частоты, напоминающие интерференционные взаимодействия.
Если внимательно прочитать граничные условия теоремы Котельникова, то в ней речь идёт о спектральной мощности и её непрерывности. На практике часто подменяют мощность квадратом напряжения (предполагая, что импеданс нагрузки постоянен), а непрерывность - "достаточной продолжительностью" или "устоявшимся режимом". Как правило эти допущения дают адекватную точность.
Обратимся к эксперименту, приведённому по ссылке. Мои требования к эксперименту там не описаны, однако, имеется
ссылка на более глубокое объяснение того, откуда взялись выводы, в частности, о битовом "разрешении" АЦП. Особенно прошу обратить внимание на применение Codec Shield, которая используется как anti-aliasing filter для эксперимента. Расшифровывая это понятие, мы увидим, что это ФНЧ, который используется для выполнения условия теоремы Котельникова: подачи на АЦП только тех частот, которые не превышают половины частоты дискретизации. Конкретно:
For our application, we used
3.8kHz as the total bandwidth, as the
codec shield has a -60dB digital filter just past the
Nyquist frequency, which explains the sharp cut-off in the plots.
(выделено мной)
Как видим, при всей "экстремальности" тестирования частот дискретизации, исследуемые частоты ограничены 3800Гц. Там же можно посмотреть, что оцифровываемая частота = 1кГц, амплитудой 2В, чистый синус. Необходимость всех этих примечаний/ограничений я позже поясню.
Типичное преобразование аналогового звука в цифровое представление состоит из 3 (а, по большей части, 4-х) этапов:
1. анти-алиасинг: применение фильтра, пропускающего только частоты до частоты Найквиста (с определённой точностью);
2. дискретизация: выделение временных интервалов, внутри которых изменение функции представляется одним значением;
3. квантование: аппроксимация аналогового значения амплитуды цифровым кодом с определённой точностью;
(4.) кодирование: сохранение цифрового кода в определённом формате, позволяющем восстановить последовательность отсчётов и временные интервалы между ними.
Для "нашего" случая все 3 этапа являются подготовительными для проведения спектрального анализа.
Так вот, анти-алиасинг практически всегда проводится на аналоговом сигнале, поскольку после преобразования наложенные спектры разделить практически невозможно, для этого нет параметров. Имеющиеся "цифровые способы" либо предварительно "добывают" эти параметры, либо по сути своей представляют собой варианты оверсемплинга в предварительной стадии. Также имеются методы однобитового квантования, которые используют другие подходы к преобразованиям, но частоты там, увы, не подпадают под возможности микропроцессоров. Вывод из этой фразы: для получения адекватного входного сигнала для оцифровки необходима предварительная аналоговая часть. Как можно понять, она отсутствует как у Гайвера, так и в проектируемом варианте у
@kDn.
Анти-алиасинг серьёзно меняет картину того, что можно получить в экспериментах. В частности, по ссылке, приведённой выше, имеется график разрешения в битах в зависимости от применяемой частоты дискретизации. Для выбранной
@kDn частоты 38 киловыборок в секунду утверждается, что эффективное битовое разрешение составляет около 9,4 бит. Вспоминаем частоту анти-алиасинга (3,8кГц), читаем
здесь, понимаем, что разрешение напрямую зависит от полосы, которую оцифровываем ( Eq. 10, чтобы долго не искать). На полосе 19кГц это битовое разрешение будет уже 8,2 эффективных бита. С анти-алиасингом, надеюсь, всё. Если хотите немного больше почитать о дополнительных условиях (которые в эксперименте были проигнорированы, и которые скорректируют результаты теоретической формулы для практических применений) - добро пожаловать в раздел "CORRELATION BETWEEN QUANTIZATION NOISE AND INPUT SIGNAL YIELDS MISLEADING RESULTS" того же документа. Я потом буду ещё говорить о том, что тестирование на синусоидальных сигналах не даёт адекватной картины оцифровки реального сигнала, этот раздел - добавка к моим рассуждениям далее.
Теперь попытаюсь пояснить применение сигнала амплитудой 2В, а не 2,5В и как сделали "удачную аппроксимацию" результатов на эталонные измерения, которые проводились как раз на 2,5В сигнале. Смотрим в п. 32.8 datasheet на ATMega 328p, который и используется в Arduino Nano. На частоте 200кГц абсолютная ошибка преобразования (5 основных источников ошибок) составляет 2 LSB, на частоте 1МГц - 4 LSB. Думаю, на частоте 500кГц, которая выбрана для оцифровки с частотой 38кГц, эту ошибку можно считать 3 LSB, что при Vref=4V составляет в районе 31мВ. Т.е., за счёт 0,5В запаса из расчётов просто убрали нелинейный и шумящий участок преобразования, заменив его рассуждениями, что раз на 2В будут такие результаты, то уж full-scale будут в 5/4 раз лучше по отношению сигнал/шум. Как видно, это не совсем так, хоть и, признаю, для этой стадии преобразования и назначения данная цифра имеет лишь научное значение. Однако, запомним, что теоретический предел динамического диапазона для 500кГц - это 20*log
10(2
(10-3))=42дБ по напряжению.
Перейду к свойствам самого сигнала. Я уже упоминал "пик-фактор" музыкального сигнала (используйте поиск, можете почитать довольно удачное изложение на русском языке
здесь). Возвращаясь к спектральному анализу: гармоника "отображает" именно мощность сигнала, которая определяется значением RMS. Для синусоидального сигнала соотношение простое: амплитуда = RMS * корень(2). Т.е., максимальное "эффективное разрешение", которое можно получить с помощью тестового синусоидального сигнала примерно в 1,4 раза меньше теоретического. Для музыкального сигнала всё гораздо сложнее. В зависимости от жанра пик-фактор может изменяться от 2 до 15 и более. Это важно потому, что амплитуда сигнала, подаваемого на АЦП не должна превышать максимального входного значения для конкретного устройства (в нашем случае, допустим, 5В), в то же время FFT будет давать гармоники, суммарная мощность которых соответствует RMS, то есть в 2-15 раз меньше. Возьмём хотя бы значение 5 в качестве пик фактора, это снизит наш динамический диапазон 42дБ на 14дБ (до 28дБ)! Мы можем игнорировать перегрузку по входу, но это будет давать широкий шлейф шумовых гармоник довольно большого уровня. В каком-то смысле, учитывая, что мы делаем не прецизионный инструмент, этот факт можно игнорировать до определённого предела, но рок и классика будут визуализироваться с серьёзными ошибками.
@technotrasher уже нашёл один из способов держать пик-фактор в узде - применение компрессоров, но это, как ни крути - снова аналоговая предобработка. С эффективными компрессорами пик-фактор можно снизить до 5-7дБ, т.о., динамический диапазон можно сохранить на уровне 35дБ.
Продолжаю описывать разницу в тестировании на "чистом синусе" и музыкальном сигнале. Синус можно сделать таким, чтобы его амплитуда симметрично умещалась между 0 и максимальным входным напряжением АЦП. А если взять 2 синуса с разной частотой? Тогда мощность придётся перераспределять между ними. А если подать музыкальный сигнал, который имеет практически непрерывное заполнение спектра гармониками? Тогда можно потерять гармоники либо в полосе, которая имеет небольшой вес в общем музыкальном спектре (см. спектральную плотность музыкального сигнала, например,
здесь), либо в низкой части динамического диапазона (любое исследование по динамическому диапазону музыкальных произведений). Да, есть возможность включить АРУ, можно сделать это аналоговым способом или с помощью управления референсом (в ограниченном масштабе, так как по datasheet минимальное значение референса для 328p, при котором сохраняется глубина по битам - 1В). В принципе, вариант низкой амплитуды гармоник можно лечить цифровым способом, но, судя по Вашим упоминаниям о достаточности двух-трёх отсчётов - как это делать Вы не знаете. И это приводит нас к последнему: ограниченность ресурсов для цифровой обработки. Т.е. полученный результат будет, в общем-то, в основном амплитудным демодулятором, полосовое декодирование будет осуществляться только на бумаге.
В общем и целом я делаю вывод, что сами Вы не разобрались в целях и результатах приведённого материала, не понимаете как его использовать и что Вам пытаются донести по теме. Но это - Ваша проблема. Аналоговые фильтры решают все эти проблемы безусловно, без недоговорённостей и натяжек.