Меню
![Главная](https://www.lcard.ru/sites/default/files/Logo.jpg)
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Запись звука с АЦП платы L791Пытаюсь реализовать возможность записи звука с микрофона, подключенного в диф. режиме к плате L791. Записываю файл с параметрами NCh=1, Chn[0]=0x00. dKadr = 0, dFreq = 192. Конечный файл преобразую в wav с параметрами Sample Rate = 192000, Byte Per Sec = 32, Channels = 1. Микрофон с усилителем и фильтром.
|
|||
|
||||
|
Re: Запись звука с АЦП платы L791Извините там имелось в виду Bit Per Second = 32 |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Забыл уточнить. Пишу из буфера сразу в файл так, как это реализовано в примере из драйверов test.cpp. Операционная система Astra Linux 64 bit |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Konstantin, давайте разберёмся с аппаратной точки зрения. Ответьте на вопросы:
|
|||
|
||||
|
Re: Запись звука с АЦП платы L791Причины может быть примерно две: неправильное подключение сигнала или неправильное преобразование отсчетов.
А действительно сохраните сырой факл и полученный из него wav (только небольшой, пожалуйста), можно его выложить на какой-нибудь файлхостинг и прислать ссылку. |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Это 14-битный АЦП, т.е. 14 значащих бит. |
|||
|
||||
|
Re: Запись звука с АЦП платы L791кстати, один из простых способов получить похожее по описанию звучание - это перепутать знаковый/беззнаковый формат. |
|||
|
||||
|
Re: Запись звука с АЦП платы L791...при подаче чистого синуса можно и самостоятельно проконтролировать адекватность сырых данных, посмотрев в бинарном редакторе или, например, в Audacity (import raw, signed 16-bit pcm). |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Для одноканального файла можно, например, преобразовать в WAV программой sox
|
|||
|
||||
|
Re: Запись звука с АЦП платы L791Konstantin, в подобной составной сложной системе нужно пытаться проверить систему по частям, локализуя проблемы. Например, можно и на вход L-791 генератор правильно подключить, чтобы проверить эту часть системы... |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Давайте по порядку...
-> Александр Е:
Спасибо! Жду Ваших ответов! |
|||
|
||||
|
Re: Запись звука с АЦП платы L79132-битный формат информации от L-791 описан в п.
|
|||
|
||||
|
Re: Запись звука с АЦП платы L791Там старшую часть 32-битного слова нужно отбросить, чтобы выделить только данные АЦП. - Похоже, что в этом проблема и состоит... |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Знаковость WAV-PCM, насколько я знаю, такая: 8-bit unsigned, остальное signed.
|
|||
|
||||
|
Re: Запись звука с АЦП платы L791Мда... Читал п.5.3.9 дважды и как-то у меня наличие служебных данных в каждом отсчете с моей ошибкой не состыковалось |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Ну да, только, как я написал, можно еще подправить усиление по вкусу, потому что 14-битные отсчеты L791 в диапазоне [-8192, 8191] займут 1/4 диапазона (-12 dB). При желании их можно умножить на 2 или на 4. |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Александр, в руководстве (п. 5.3.9) значащие биты с 0 по 15 => 16 бит. Я не совсем понимаю, о каких 14 значащих битах идет речь. Поясните пожалуйста. |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Т.е. 32 битные отсчеты с 16 бит данными + 16 бит служебной информации. А 14 бит это при каких тогда условиях? Или я опять что-то не понял? |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Попробую объяснить. Для 16-битного целого со знаком диапазон представления чисел -32768...32767 -- это соответствует 16-ти значащим битам. Но у нас 14-битный АЦП, который использует диапазон -8192...8191 этого 16-битного целого, что теоретически соответствует 14-ти значащим битам. "Значащий" - это значит несущий информацию. Понятно? |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Т.е. Вы просто не используете весь диапазон 16 битного числа. Это я могу понять. Но тем не менее по факту это 16 бит данных. А глубина квантования высокая мне и не нужна, ибо за качеством не гонюсь... Спасибо за помощь!!! |
|||
|
||||
|
Re: Запись звука с АЦП платы L791"Т.е. Вы просто не используете весь диапазон 16 битного числа"
|
|||
|
||||
|
Re: Запись звука с АЦП платы L791Константин, вопрос терминологический Но Ваша звуковая подсистема будет считать эти отсчеты "по-настоящему" 16-битными, т.е. если для 14-битного знакового 8191 - это максимум диапазона, то для 16-битного это 1/4 его часть. Если же выравнивать по "старшему" краю (т.е. сдвинуть значащие биты [13:0] в биты [15:2] 16-битного отсчета, а младшие 2 бита, например, обнулить), то будет использоваться полный диапазон (т.е. максимальная громкость звука) без потери информации. -8192*4 = -32768 (0x8000), 8191*4 = 32764 (0x7FFC). Если для дальнейшей обработки абсолютный уровень сигнала безразличен, тогда совершенно все равно как выравнивать биты. |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Остаётся добавить, что старшие 2 незначащие биты [15:14] содержат знаковое расширение, т.е. нули для неотрицательных чисел и единицы для отрицательных, согласно принципу "дополнительного кода" представления отрицательных чисел, который используется в большинстве компьютерных форматов данных. См. http://ru.wikipedia.org/wiki/%C4%EE%EF% … 1%EB%E0%29 |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Сделал парсинг служебной информации из 32 бит в 16, как Вы писали выше. Результата особого это не дало, эффекты металлических нот остались for (long int i = 0; i < flen/4; i++)
flen - длина записанного файла,
А вот структура wav файла:
Посмотрите, пожалуйста, может я где ошибся... |
|||
|
||||
|
Re: Запись звука с АЦП платы L791Ну если заголовок как пишется в файл, а потом правильный data chunk, то в первом приближении как будто бы должно работать. Покажите пример входных и выходных данных, что ли. Или в виде файлов, или, например, hex dump небольшого файла. |