Проблемы с регулярным одновременным преобразованием двойного АЦП с передачей DMA

Робка
Вт 24 ноября 2015 г., 17:06


РЕДАКТИРОВАТЬ: Я наконец решил это, пожалуйста, посмотрите http: // www.STM32duino.com/viewtopic.PHP ... 8474#P8474 Для получения дополнительной информации



Я в конце :? Я читал документы АЦП и DMA не менее 5 раз каждый. Посмотрел пример regsimul_dualmode от ST (и это было достаточно весело, поскольку он использует совершенно другие соглашения, чем библиотеки Arduino/Maple, но в конце я понимаю, что он делает)... И я все еще не могу заставить это работать... Помогите, пожалуйста.

Заявление о проблеме: на Maple Mini, используя STM32Duino, преобразуйте 4 аналоговые каналы (подключенные к контактам D3-D6, I.эн. In8-5, соответственно) и перенести данные в памяти с использованием DMA (мне нужно быстрое и предсказуемое время).

В основном мне нужно было бы объединить «двойной одновременный режим» с «непрерывным сканированием», чтобы снять ~ 2000 образцов с каждого канала. Но я боюсь, что это может быть невозможно, и единственное упоминание, которое я нашел, здесь (хотя нет ответа) https: // my.ул.com/public/ste2ecommuniti ... х?Tags = ADC

Приведенный ниже код устанавливает последовательность для каждого АЦП: в длине последовательности SQR1 составляет 1 (i.эн. 2 преобразования), и я установил регистры SQR2, чтобы ADC1 преобразовал IN8, в то время как ADC2 преобразуется в 7, затем ADC1 преобразует IN6, в то время как ADC2 преобразуется в 5. Я устанавливаю регулярные (не введенные) SW -триггеры.

После установки регистров ADC1 и ADC2 и канала DMA1 1, в теоретической установке ADC1->регс->CR2 | = ADC_CR2_SWSTART; Должен начать преобразование для Master ADC1 и Slave ADC2 и параллельно запустить DMA (один 32 -битный передачу DMA для каждого преобразования: в двойном режиме регистр ADC1 SR содержит как значения для ADC1, так и ADC2).

Однако я заметил, что когда ADC_CR2_Cont включена, ADC непрерывно сканирует, и DMA продолжает отправлять данные в мой буфер. Это означает, что порядок нечетных и даже каналов в буфере может быть выключен. В основном, когда включена adc_cr2_cont, АЦП продолжает сканировать все время, и что вызывает передачи DMA в случайном порядке.

Если я не использую adc_cr2_cont, я могу последовательно последовательно ограниченное количество каналов (и даже если я повторяю последовательность, я все еще могу делать только 16 конверсий на ADC Max (используя SQR1-3). Или я могу непрерывно конвертировать 2 канала (один на ADC1, один на ADC2)...

Но, кажется, нет возможности выполнять сканирование и двойное одновременное одновременно... Я что -то упускаю? Любое предложение? Если это не сработает, я могу использовать два кленовых мини -синхронизированных для захвата 4 каналов, но это затрудняет кодирование всего (один как мастер, один как раб, с конверсией одновременно и передает данные)

Вот мой неработающий код (если вы расстроены оператором Delay (), вы увидите проблему)
#include #include #define LED_PIN PC13 RTClock rtclock (RTCSEL_LSE); // initialise void setup() { Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.println("Serial Active..."); } void loop() { if(Serial) Serial.println("Temp mon startup"); delay(1000); }

Rogerclark
Вт 24 ноября 2015 г., 21:43
Похоже на вопрос, чтобы опубликовать собственный форум STMS.
Однако я бы не упомянул, что вы используете Arduino IDE и т. Д., Поскольку у меня сложилось впечатление, что им нравится только люди, использующие свой CMSIS / HAL

Но вы могли бы опубликовать вопрос с той же технической детализацией, что и выше, и посмотреть, смогут ли они сказать вам, способно ли это сделать.

Другой вариант - использовать внешнее переключение или внешние АДК, или оба, я.e Используйте один очень быстрый внешний ADC и аналоговый мультиплексор или вход Mulichannel

эн. MCP3208

(Если и это большое, если что -то вроде MCP3208 может быть предварительно запрограммировано для цикла через 4 входа и просто получает данные через SPI DMA)

Mrburnette
Вт 24 ноября 2015 г., 22:31
Rogerclark написал: <...>
(Если и это большое, если что -то вроде MCP3208 может быть предварительно запрограммировано для цикла через 4 входа и просто получает данные через SPI DMA)

Rogerclark
Вт 24 ноября 2015 г., 22:39
Луча.

Хороший момент.

PSOC почти наверняка является лучшим устройством для этого приложения

(Пс. Все еще не досталось использовать мой, хотя, поскольку у меня есть 3 из них, я мог бы разобраться с ними, если бы я набил, не включив модуль загрузчика ;-)

Робка
Вт 24 ноября 2015 г., 22:59
Сначала я опубликую его на еще несколько форумов, но у ST One, кажется, довольно плохой послужной список ответов (и спасибо за использование их кода, я действительно посмотрел на то, что у них есть, так что это было бы легко Чтобы создать эквивалент

Я также только что увидел, что F303 на самом деле имеет 4 АЦП (и они могут быть запрограммированы на 10/10/8/6 битов). Я все еще ускоряюсь в семье STM32, у кого -нибудь есть хорошая плата F303, чтобы предложить? Было бы это хорошей отправной точкой? http: // www.Ньюарк.com/stmicroelectronic ... Scovery+F3

Я бы хотел, если бы что -то подобное было на самом деле произведено: http: // superburbia.блог.сопутствующий.Великобритания/2014/0 ... 3-horm.HTML. Я знаю, что мог бы построить свой собственный, используя это http: // ebrombaugh.Studionebula.com/embe ... индекс.HTML, Но построить такую ​​маленькую доску SMD не так просто

Любые другие «дешевые» платы F303, которые работают с STM32Duino? (Я предполагаю, что приведенный выше комплект Eval работает)

Спасибо за предложение PSOC, я посмотрю на это. Единственная обеспокоенность в том, что это еще одна платформа для изучения, в то время как с F303 я могу продолжать использовать тот же набор навыков, и есть много досок STM32, становятся все дешевле и дешевле и легче найти. Я предполагаю, что PSOC не будет работать в ближайшее время с STM32DUINO...

Rogerclark
Вторник 24 ноября 2015 г. 11:10
Наша поддержка на F3 очень слабая.

Все, что я делал, это усыновил чужую версию F3 Libmaple, однако у меня вообще не было времени попробовать, и она не поддерживалась и не обновлена, как это было в F103

Если серия F4 обладает теми же возможностями, что и F303, то я бы порекомендовал вам посмотреть на F4 вместо этого.
У нас есть разумная поддержка F4 (но не так хорошо, как F103)

Вы можете получить доски F407 по разумной цене http: // www.aliexpress.com/item/5pcs-lot ... EB201560_7

И я думаю, что вы можете стать еще меньше и дешевле (я уверен, что кто -то опубликовал ссылку некоторое время назад, но я не могу вспомнить, что это было со ссылкой на)

КСТАТИ. Эти маленькие доски F303 выглядят красиво, но я обнаружил, что паячка MCU сложно даже на F103 (я испортил несколько досок, пытающихся), пытаясь)

Робка
Вт 24 ноября 2015 г., 11:51 вечера
Спасибо за вашу готовность помочь.

К сожалению, я не могу найти чип F4 с 4 АЦП... 3 настолько высок, насколько я могу найти (чего нельзя сказать, что его не существует, просто я не могу его найти :))

РЕДАКТИРОВАТЬ: Я только что обнаружил, что семейство F3 разработано с учетом обработки сигналов, поэтому у него гораздо более быстро... F4, как правило, не хватает в отделении ADC

Учитывая то, что вы говорите о поддержке F3 и F4, я думаю, что я либо посмотрю в PSOC, либо перейду к своему плану резервного копирования (используйте 2 F103 в качестве мастер -раба).Я все еще могу получить F303, чтобы сыграть с ним, в следующий раз, когда мне понадобится что -то от Mouser или Newark, 10 долларов.88 не так много денег (главным недостатком этой доски является то, что многие булавки связаны с периферийными устройствами, такими как акселерометры и т. Д.)

Mrburnette
Вторник 24 ноября 2015 г. 11:52
Робка написал: <...>
Единственная обеспокоенность в том, что это еще одна платформа для изучения, в то время как с F303 я могу продолжать использовать тот же набор навыков, и есть много досок STM32, становятся все дешевле и дешевле и легче найти. Я предполагаю, что PSOC не будет работать в ближайшее время с STM32DUINO...

Робка
Ср 25 ноября 2015 г. 12:11
Mrburnette написал:
PSOC - это GNU, а бесплатное использование компилятора по умолчанию связано с распределением GNU. Вы также можете приобрести Keil, версия Limitrd Eval можно загрузить бесплатно.

PSOC не похож ни на один из UC, который вы использовали, если вы не в Verilog. Программное обеспечение Drag-N-Drop Designer имеет конфиденциальную программу VHDL для настройки переключенной сети Fabric Snd Pins ввод-вывод ввода/вывода... Почти любой пакет PIN -код может быть назначен независимо. UC - ARM M0+, работающий при 48 МГц.

PSOC никогда не станет правлением Arduino под ардуиноидом. Прототип PS0C 4200 составляет 4 доллара США. Плата Pionerr 4200 за 20 долларов США создала аппаратную отладку в код C-Source, с переменными представлением, точками останова и т. Д.

Ах, я старый и на пенсии, я живу, чтобы выучить YAP (еще одна платформа.)

Луча

Rogerclark
Ср 25 ноября 2015 г. 12:21
Рэй - эксперт...

Но Cypress PSOC 4200 составляет 48 МГц вместо 72 МГц на STM32

На самом деле, если вы хотите остаться с чем -то вроде STM32, но это не достаточно быстро, доски GD32 быстрее и та же цена.
Предполагается, что GD32 запускается на скорости 108 МГц и имеют ноль флэш -память состояния ожидания, что делает их быстрее даже при 72 МГц


96 МГц - это самое быстрое, что вы можете запустить GD32, все еще иметь USB и быть в пределах их спецификации, однако, если это просто для хобби, то я использую свой GD32 на 120 МГц, который является еще одним множественным, который поддерживает USB, и он работает штраф под обычной операцией терминатуры в комнате.
Я на самом деле измерил температуру с помощью ИК -термометра, и чипы действительно получают несколько градусов, когда настройка при 120 МГц по сравнению с 72 МГц, но на самом деле ничего не касается меня.
И если бы это действительно было проблемой, вы всегда могли бы придерживаться одного из тех маленьких радиаторов, которые они используют для чипсов водителя шаговых.

Робка
Ср 25 ноября 2015 г. 12:32
Мое беспокойство (быстрое сканирование документации PSOC) заключается в том, что PSOC 4200, похоже, имеет единый АЦП, последовательно сканирующие каналы. Что я могу сделать так же легко (и так же быстро, для моих целей) с F103. Поскольку F103 использует четко определенное время преобразования и DMA, каждый образец слегка изменяется по времени, но форма волны может быть интерполирована и скрещена так же легко на F103, как PSOC. Если это так, то использование PSOC, похоже, не добавляет большой ценности, особенно учитывая, что я могу получить F103 с 64 -километровым ОЗУ, следовательно, быстрее (и имею лучшую интерполяцию благодаря завариванию)

С F103 я также могу найти способ использовать параллельный режим и какой -то быстрый код для заполнения буфера (необходимо немного обдумывать его)... С F303 я могу сделать 4 конверсии одновременно, не требуя интерполяции.

Rogerclark
Ср 25 ноября 2015 г. 12:41
С STM32 вы можете выполнять параллельные операции с несколькими работающими каналами DMA, а также вашим кодом, работающим одновременно с практически без потерь в производительности.

КСТАТИ.
Я знаю, что вы не используете SPI, но сведу
С текущим кодом SPI DMA он «блокирует» и не возвращается до тех пор, пока передача не будет завершена, однако мы могли бы добавить некоторые новые варианты функции dmatransfer (), один из которых может иметь обратный вызов завершения.

Даже наша текущая «блокировка» DMA SPI намного быстрее, чем заставить процессор ARM для продвижения данных в подсистему SPI

Ахулл
Ср 25 ноября 2015 г. 1:36
У нас есть некоторые масштаб на задействованные цифры.

Мы установили, что сигнал находится в аудио -домене, поэтому <20 кГц, ADC STM32F103 способен к быстрому переоценке 2 МГц, как показано на свиньи-о-о-сроке (так что примерно в 100 раз быстрее, чем нужно для аудио).

Какую дискретию нам нужна, чтобы дать нам задержку временем?

Какое расстояние между микросознаниями и какое разрешение нам нужна от нашего сигнала (я.эн. насколько точным должен быть наш результат).

Который Режим преобразования АЦП STM32 наиболее подходит для нашего приложения, я бы предложил двойной регулярный одновременный режим, но я открыт для других предложений.

ZMEMW16
Ср 25 ноября 2015 г., 2:26
Как вы спрашиваете о цифрах...

это должно быть двойным? одновременный?

Как быстро он мог сделать последовательные преобразования 4 -каналов, ADC1, ADC2, ADC3, ADC4 ? (и DMA?)

Что будет вызвать разницу в фазировании в показаниях в терминах расчетов (расстояния)?

Чем вы ожидаете точности расстояния?

Что такое 4 м/5 м со скоростью звука? MS US NS

Действительно большая стена :-)
Стивен

Ахулл
Ср 25 ноября 2015 г. 10:24
ZMEMW16 написал:Как вы спрашиваете о цифрах...

это должно быть двойным? одновременный?

Робка
Ср 25 ноября 2015 г. 14:58
Прежде всего, позвольте мне поделиться хорошими новостями. Я наконец понял это, спасибо за ваши сообщения. STM32F103 может фактически выполнять «регулярное одновременное двойное преобразование с передачей DMA». Потребовалось довольно много времени, чтобы выяснить. Читайте дальше, если вам нравится загадочный роман... И, как любой загадочный роман, однажды объяснил все это имеет смысл. я’МНЯЕТ время, чтобы полностью объяснить это, потому что, насколько я знаю’S Нет объяснения ни одного из этого ни в ST Docs, ни в Интернете (по крайней мере, не разбивая каждый шаг)

Оказывается, что использование как непрерывного преобразования, так и DMA создает несколько сложных условий времени, которые необходимо выполнить. Это не имеет значения при использовании, как в O-Scope, так как вы сканируете только один канал на ADC. При сканировании более одного канала на АЦП, время имеет значение.

В тот момент, когда вы включите АЦП в непрерывном режиме (любой двойной режим), АЦП продолжает работать и написание конвертированного значения для ADC1 и ADC2 в DR Register of ADC1. В конце каждого преобразования он устанавливает бит EOC в регистрации SR, и это, в свою очередь, говорит DMA прочитать содержимое Register ADC1->регс->DR и перенести его в память. В случае O-Scope АЦП всегда работает и отбирает выборки, и когда DMA включен в функцию TabsAmples (), он начинает передавать сразу же. Поскольку DR всегда содержит одинаковые 2 канала (один для ADC1, один для AC2), он работает.

Когда у вас есть последовательность каналов, которые будут отобраны, если вы используете тот же подход, передача DMA начинается, как только вы включите DMA. Проблема в том, что АЦП всегда работает, и вы не знаете, какие каналы находятся в реестре DR в то время. Если, как и я, у вас есть 4 канала (IN8 и IN6 на ADC1, IN7 и IN5 на ADC2), вы можете запустить передачу памяти либо, когда есть IN8 и IN7, или когда есть IN6 и IN5. Что’S, что со мной происходило.

Хитрость состоит в том, чтобы убедиться, что АЦП не работает, включите DMA, затем запустите ADC только при необходимости. Передача DMA будет терпеливо ждать до тех пор, пока ADC не начнется, затем после первого EOC начнет перенос из правого набора каналов (In8 и In7 в моем случае).

Оказывается, однако, это’S Thrinky установить ADC в непрерывном режиме и убедиться, что ADC не работает (вероятно, из -за библиотек клена, которые уже включили ADC).

Делать что -то вроде:

ADC1->регс->Cr2 = (adc_cr2_adon | adc_cr2_cont | adc_cr2_dma | adc_cr2_extsel | adc_cr2_exttrig);

Оказывается плохой идеей, пока

ADC1->регс->Cr2 = (adc_cr2_cont | adc_cr2_dma | adc_cr2_extsel | adc_cr2_exttrig);
ADC1->регс->CR2 | = adc_cr2_adon;

Работает нормально. Там’S загадочная нота в справочном руководстве, 11.12.3. Это говорит “Если какой -либо другой бит в этом регистре, кроме Adon, изменяется одновременно, то преобразование не запускается. Это необходимо предотвратить ошибочное преобразование”. Что ж, оказывается, что изменение куча битов вместе при изменении adc_cr2_adon делает’T заканчивайте преобразование (и это было настоящим головоломке в течение самого долгого времени). Когда я включил adc_cr2_cont, ADC уже была включена, и даже если бит ADC_CR2_SWSTART не был установлен, начал работать. Когда позже я подумал, что начинаю конверсию с помощью adc_cr2_swstart, не имеет значения (так как она уже работала), и это’S, почему передача DMA начал происходить случайным образом (казалось бы, случайно, теперь я могу сказать).

Таким образом, хитрость заключается в том, чтобы установить регистр CR2, в то время как явно отключив АЦП. Это все останавливает. Затем включите Just ADC_CR2_Cont. На этом этапе АЦП “вооруженный” и ждать adc_cr2_swstart фактически начать непрерывное преобразование.

Итак, предполагая, что регистры ADC1 и ADC2 устанавливаются в коде вашего инициации, правильный порядок для начала нового преобразования:
  • Отключить АЦП и установить регистр CR2 ​​по мере необходимости
    Включить АЦП
    Установите DMA
    (Делайте все, что вам нужно сделать, чтобы решить, когда конверсия готова к запуску, триггером или иным образом)
    Установите ADC_CR2_SWSTART, чтобы наконец начать преобразование
В моем случае это’S Критическое, чтобы начать преобразование всех 4 каналов как можно ближе к триггеру, потому что для пересечения корреляции различных звуковых волн начальный наклон довольно критичен (и, вероятно, самая сильная часть звукового импульса для импульсивных звуков). Это может быть критическим для осциллографа, чтобы захватить один высокоскоростный сигнал (но, опять же, вы можете запустить довольно много инструкций по рук в процессоре, работающем на 72 МГц, возможно, я слишком волнуюсь)

Здесь’S Рабочий код:
// Enable debug prints to serial monitor #define MY_DEBUG //#define MY_DEBUG_HWSERIAL Serial // = Serial0 / Rx0 & Tx0 to programming & debug // Enable RS485 transport layer #define MY_RS485 // Define this to enables DE-pin management on defined pin #define MY_RS485_DE_PIN 11 // Set RS485 baud rate to use #define MY_RS485_BAUD_RATE 38400 // Enable this if RS485 is connected to a hardware serial port #define MY_RS485_HWSERIAL Serial1 // Enable serial gateway #define MY_GATEWAY_SERIAL #define MY_SERIALDEVICE Serial // Rx* & Tx* to Gateway

Робка
Ср 25 ноября 2015 г. 15:38
Ахулл написал: Если несколько других глаз могут проверить мои фигуры и предположить, что они складываются, мы сможем увидеть, как попытаться это реализовать.

Робка
Ср 25 ноября 2015 г., 17:09
Роджер, из любопытства, ты знаешь, зачем мне нужна эта линия:

#включать <Libmaple/DMA.час>

В моем коде, чтобы убедиться, что я смогу должным образом получить доступ к регистрам DMA, но мне не нужен эквивалент для АЦП? Я неправильно настроил свою среду Arduino? Я использовал перечисленные здесь шаги установки https: // github.com/rogerclarkmelbourne/ ... занижаем

Не настоящая проблема, просто любопытно, чтобы лучше понять, как работают библиотеки STM32Duino

Rogerclark
Ср 25 ноября 2015 г., 21:11
@ROBCA

Libmaple является ядром, а не библиотекой.

Мы никогда не меняли имя, которое было унаследовано от кода, написанного Leaflabs для их кленовых и кленовых мини -продуктов.

вам нужно будет включить DMA.H Если вы хотите использовать какие -либо из встроенных функций DMA, но это звучит так, как то, что вам нужно для достижения

Робка
Ср 25 ноября 2015 г., 23:51
Извините, я неправильно написан, я имел в виду «ядро», а не библиотека... Спасибо за исправление терминологии.

Мой вопрос все еще стоит, хотя: если я хочу использовать прямой доступ для реестра для DMA, мне нужно добавить Libmaple \ dma.час. Я использую прямой доступ в реестр DMA (потому что, как вы говорите более гибкий). Итак, я использую такие вещи, как DMA1->регс->CCR1

Но я также использую такие вещи, как ADC1->регс->CR2, и это работает без каких -либо... Я думаю, мне просто любопытно понять, почему работают ADC1 и ADC1, а DMA1 требует включения. Честно говоря, не так важно, просто любопытно :)

Ахулл
Чт 26 ноября 2015 г. 12:44
Я думаю, я вижу * как * АБД.H не нужно включать... #define DEFINE_HWSERIAL(name, n) \ HardwareSerial name(USART##n, \ BOARD_USART##n##_TX_PIN, \ BOARD_USART##n##_RX_PIN) #define DEFINE_HWSERIAL_UART(name, n) \ HardwareSerial name(UART##n, \ BOARD_USART##n##_TX_PIN, \ BOARD_USART##n##_RX_PIN) /* Roger clark. Changed class inheritance from Print to Stream. * Also added new functions for peek() and availableForWrite() * Note. AvailableForWrite is only a stub function in the cpp */ class HardwareSerial : public Stream { public: HardwareSerial(struct usart_dev *usart_device, uint8 tx_pin, uint8 rx_pin); /* Set up/tear down */ void begin(uint32 baud); void begin(uint32 baud,uint8_t config); void end();

Rogerclark
Чт 26 ноября 2015 г. 12:50
Робка написал:Мой вопрос все еще стоит, хотя: если я хочу использовать прямой доступ для реестра для DMA, мне нужно добавить Libmaple \ dma.час

Робка
Чт 26 ноября 2015 г., 16:04
@Roger: я использую DMA.H и прямой доступ реестра DMA...

Вопрос (пожалуйста, посмотрите на пост Энди перед вашим) заключается в том, почему ADC.H автоматически включена, но DMA.H не. Это проблема конфигурации?

Я имею в виду, можно легко решить, мне просто интересно, стоит ли это решить

Робка
Чт 26 ноября 2015 г., 17:01
У меня есть новая версия моего кода, которая выставляет все микрофоны для нескольких циклов, вычисляет средний «уровень шума» и определяет значения, которые будут использоваться для триггеров.

Код триггера работает, и за ним следует очень быстрая петля выборки, которая идеально способна захватить типы волновой формы, которая мне нужна для анализа TDOA. Я вижу сюжеты моих образцов с Gnuplot :)

Однако я сталкиваюсь с проблемой, и я думаю, что это связано с тем, как взаимодействуют усилители АЦП и MIC. Я надеюсь, что кто -то здесь сможет пролить немного света.

Чтобы начать, у меня есть эти дешевые модули http: // www.eBay.com/itm/3-3V-3-5V-max98 ... 1742472725, и они используют усилитель MAX9812 https: // таблицы данных.Максимунтегрирован.ком/ ... X9813L.PDF. Схема в значительной степени является эталонной схемой (плюс LDO XC6206 для питания MAX9812 с 3.3 В). Обратите внимание, что MAX9812 - это фиксированный усилитель усиления, который я хочу избежать проблем с AGC

Согласно таблице данных, выходной импеданс равен 0.5 Ом, и это должно хорошо работать для ADC F103.

Но я вижу очень странное поведение с этим усилителем (но не только с электрическим микрофоном): среднее значение отобранного выбора составляет около 2000 (из 4096, имеет смысл) имеет смысл). Но когда у меня есть триггер, вы увидите, что начальный образец был намного ниже (около 1250), а затем он возвращается к 2000 году. См. Прилагаемое изображение.
Adcdrift.png
ADCDRIFT.PNG (42.53 киб) просмотрено 682 раз

ZMEMW16
Чт 26 ноября 2015 г., 19:11
На самом деле эта память появилась пару дней назад, когда я начал читать или, может быть, потому что я был.
Долгое время назад мне пришлось написать программное обеспечение для автоматического тестового оборудования для 16 входного аналогового мультиплексора.
Неиспользуемые каналы должны были быть в MV, но не 300 мВ; Это около 5% от сигнала входного теста.
Оказалось, что входные фильтрационные конденсаторы действовали как потенциальный разделитель.

Стивен

Rogerclark
Чт 26 ноября 2015 г. 20:06
@ROBCA

Ах.

Я понимаю, что ты имеешь в виду.

Можете ли вы попробовать отредактировать файл, который включает в себя ADC.h и добавьте включение для DMA.H и дайте мне знать, если это вызывает какие -либо проблемы с сборкой.

Если это сработает, дайте мне знать, и я обновлю ядро

Ахулл
Пт 27 ноября 2015 г. 12:36
Робка написал:... Моя теория заключается в том, что конденсатор на выходе MAX9812 странно взаимодействует с АЦП. Чтобы проверить мою теорию, я выставил резистор 1K между GND и MIC модуль, а другой между VCC и Out. Это на самом деле, кажется, стабилизирует выход, и АЦП больше не дрейфовал, как вы можете увидеть здесь.
...
Когда я хочу также проверить (но у меня не было времени получить паяльное железо) - это то, что произойдет, если я обхожу (короткий заглум.

У вас есть еще какие -либо предложения о том, как решить странный дрейф, который я вижу?

Rogerclark
Пт 27 ноября 2015 г. 12:56 утра
Вам нужен этот конденсатор между выходом MAX9812 и STM32?

Он либо там, чтобы обеспечить изоляцию, либо удалить смещение постоянного тока, но вам может быть лучше с сетью разделителей резисторов, если проблема является напряжением питания на MAX9812 (при условии, что это не 3.3 В)

Из памяти я думал, что входной импеданс STM32 был где -то в диапазоне 50K. Что ж, я вспоминаю техническую записку, в которой говорится, что при попытке прочитать внешние входные данные с импедансом более 50 тысяч. Что, вероятно, означает, что входной импеданс составляет более 50 тысяч, но не в диапазоне MEG OHM.

КСТАТИ.
Я думаю, что для такого рода работы с областью применения практически важны.

Mrburnette
Пт 27 ноября 2015 г. 12:59
Rogerclark написал: <...>
КСТАТИ.
Я думаю, что для такого рода работы с областью применения практически важны.

Rogerclark
Пт 27 ноября 2015 г. 1:11
К сожалению, моя область более 5 лет назад, и у него нет FFT :-(

Иногда я ищу обновление, но я могу подумать о лучших вещах, чтобы потратить 2 тысячи долларов на ;-)

Martinayotte
Пт 27 ноября 2015 г. 1:17
На французском языке мы говорим: «Кордонье Мал Чауссе !"(Google переводил его как" плохо лишайный штук ")
У меня также проблемы, моя аналоговая область довольно старая, более 25 лет, и ограничена 10 МГц.

Ахулл
Пт 27 ноября 2015 г. 1:33
Что ж, у меня есть доступ к лучшей сфере масштабов на работе, но тот, который у меня есть дома, который я использую больше всего, стоил двадцать фунтов с помощью eBay (и не работал).

Для снесения и ремонта картин, перейдите по ссылке.

https: // plus.Google.com/u/0/photos/1110 ... 2229320338

Это Metrix OX -803B 40 МГц - Итак, старый добрый аналоговый прицел. Кроме того, у меня, конечно, есть свиньи, но он очень ограничен в своих способностях, и еще один аналог HP 100 МГц, который является 99% функциональным и ожидающим дальнейшего «медицинского вмешательства», когда у меня есть свободное время.

Рядом с парой мультиметра я думаю, что хороший осциллограф, вероятно, один из самых важных инструментов для.

Mrburnette
Пт 27 ноября 2015 г. 1:37
Rogerclark написал:К сожалению, моя область более 5 лет назад, и у него нет FFT :-(

Иногда я ищу обновление, но я могу подумать о лучших вещах, чтобы потратить 2 тысячи долларов на ;-)

ZMEMW16
Пт 27 ноября 2015 г. 1:44
@Ray
Это дразнит; упоминать р&п : D

Я никогда не понимал БПФ, что это дало бы мне в этой ситуации?

Стивен

Rogerclark
Пт 27 ноября 2015 г., 2:14
Mrburnette написал:Rogerclark написал:К сожалению, моя область более 5 лет назад, и у него нет FFT :-(

Иногда я ищу обновление, но я могу подумать о лучших вещах, чтобы потратить 2 тысячи долларов на ;-)

Martinayotte
Пт 27 ноября 2015 г., 2:19
Должен ли я начать мечтать о Сантаклаусе ?
Я хотел бы иметь одну из этих сферов Rigol.

Rogerclark
Пт 27 ноября 2015 г., 2:24
Мой старый DS1102D довольно приятный (хотя он выглядит немного устаревшим)

Я собирался написать, что я не использую 75% функций...

Поэтому я запустил его и нажал кнопку математики, и ... Это делает FFT !!

:ржу не могу: :ржу не могу: :ржу не могу:

Rogerclark
Пт 27 ноября 2015 г., 2:27
ZMEMW16 написал:@Ray

Я никогда не понимал БПФ, что это дало бы мне в этой ситуации?

Стивен

Робка
Пт 27 ноября 2015 г. 9:45
Спасибо за все вклад (это весело). Я провожу половину своего времени в Великобритании, наполовину в США (в настоящее время в Великобритании). У меня есть двойная следовая прицела с двойным трассировкой в ​​США, и я могу одолжить там гораздо лучшие инструменты. В Великобритании у меня есть только очень низкая (20 МГц) USB -пример, не достаточно хорош для этого. Поэтому дальнейший анализ должен будет ждать несколько недель

Я попытался покрыть конденсатор: усилитель микрофона включен из 3.3V подача Maple Mini, и есть LDO с падением ~ 250 мВ (которую я удалю, так как он не нужен и без необходимости уменьшает диапазон), поэтому безопасно обходить его. Как и ожидалось, напряжения немного ниже: сеть резисторов, которую я использовал, прежде чем заставил конденсатор «плавать» ровно в половине VCC (~ 1.65V), в то время как выход усилителя, когда сигнал нет, является половиной напряжения усилителя, я.эн. ~ 1.5 В. В любом случае преобразование стабильное и приемлем. Таким образом, у меня есть приличная отправная точка, чтобы добиться кодирования прогресса, и я могу завершить дизайн HW позже.

Хороший момент в создании фильтра RC с добавлением сети резисторов, мне придется выяснить, какие значения работают лучше. Я также нашел это http: // электроника.Stackexchange.com/Qu ... Приход-2-5В И есть упоминание использования 100 тыс. Резисторов для аналогичного случая (в этом случае они используют 5V, но ничего не изменится с 3.3 В). Но 100 тыс. Может быть слишком высоким для F103, который хочет видеть низкий импеданс на его входе.

Пожалуйста, сохраните предложения/идеи :)

Ахулл
Пт 27 ноября 2015 г. 10:48
Понимание анализа Фурье.. http: // chackaday.com/2014/11/18/гармоник ... -Компьютер/ : D Если это не переключает "аааааааааааааааааааааааааааааааа.. Вот как это работает »в вашей голове, ничего не будет. : Twisted:

Ахулл
Пт 27 ноября 2015 г. 13:37
Rogerclark написал:ZMEMW16 написал:@Ray

Я никогда не понимал БПФ, что это дало бы мне в этой ситуации?

Стивен

Mrburnette
Пт 27 ноября 2015 г. 15:05
Rogerclark написал:Мой старый DS1102D довольно приятный (хотя он выглядит немного устаревшим)

Я собирался написать, что я не использую 75% функций...

Поэтому я запустил его и нажал кнопку математики, и ... Это делает FFT !!

:ржу не могу: :ржу не могу: :ржу не могу:

Робка
Пт 27 ноября 2015 г. 15:58
Rogerclark написал:@ROBCA

Ах.

Я понимаю, что ты имеешь в виду.

Можете ли вы попробовать отредактировать файл, который включает в себя ADC.h и добавьте включение для DMA.H и дайте мне знать, если это вызывает какие -либо проблемы с сборкой.

Если это сработает, дайте мне знать, и я обновлю ядро

ZMEMW16
Пт 27 ноября 2015 г., 17:33
@ahull
никогда не практиковался как мех : D

Я испытал желание ответить кому -то с «как на показе водопада сонар»
Подсказка была в комментарии «Сигнал 60 Гц и пропеллеровое лезвие 25 Гц»

Кошка только что сидела на моем столе для ноутбука, ее вздымается снаружи, и она хочет выйти на улицу!
Я думал, что она собирается присесть, покрывая мышь.

Стивен

Ахулл
Пт 27 ноября 2015 г., 23:42
Робка написал: Я провел некоторые тесты и критическое место, где АЦП.H определяется, но DMA.h не является stm32f1 \ cores \ maple \ wirish_types.H (спасибо Энди за то, что предложил, как это изучить).

Робка
Сб 28 ноября 2015 г. 12:06
Ахулл написал:Робка написал: Я провел некоторые тесты и критическое место, где АЦП.H определяется, но DMA.h не является stm32f1 \ cores \ maple \ wirish_types.H (спасибо Энди за то, что предложил, как это изучить).

Робка
Пн 30 ноября 2015 г., 16:13
Быстрое обновление:
  • 4 канала работает надежно на каждой скорости отбора проб
  • Мне удалось написать достаточно быстрый код триггера для 4 -каналов, запускающегося и быстрого отбора проб всех 4 каналов после отбора проб
  • Как и ожидалось, Ram очень плотный. Таким образом, вместо реализации более быстрого алгоритма перекрестной корреляции на основе FFT я использую простой общий алгоритм корреляции поперечной. В основном петли и умножения, не требуя дополнительного массива. Я могу пересекать корреляцию 4 каналов из 2048 образцов за ~ 3 секунд. Медленно, но не убийца для меня. Алгоритмы на основе FFT (например, GCC PHAT) будут работать намного быстрее и обеспечат лучшую корреляцию в присутствии шума или с низкими сигналами объема, но потребует 4x памяти или около того. Даже на процессорах с большим количеством оперативной памяти мне нужно было временно хранить вещи в Flash (или SD -карта). Поскольку было бы неплохо хранить все образцы на SD-карте (для постобработки с лучшими инструментами), добавление SD-карты-мой следующий шаг
Что подводит меня к следующему вопросу. Является https: // github.com/Victorpv/sdfat Лучшая библиотека SD для SD для STM32Duino? Я посмотрел на несколько более старых постов, и было много о неработающих библиотеках, но не было настоящего «окончательного» ответа на работающего. Было бы неплохо, если бы в существующие можно было бы добавить «официальную» библиотеку SD -карт

Менее релевантный вопрос: Очевидно, что дешевые амплифицированные микрофоны eBay имеют серьезные ограничения для захвата звука (но отлично подходят для дешевого прототипа). Кто -нибудь знает о микрофоне/предусилителе, который можно использовать для этого проекта? Я знаю, что есть много высококачественных микрофонов, но все они стоят значительно выше 50 долларов, что значительно выше ценой для этого эксперимента. Я постараюсь заменить дрянной капсулы электрической http: // www.jlielectronics.com/products/jli%252d61a.HTML, Клон хорошо известного Panasonic WM-61A, теперь устаревший), поскольку усилитель, используемый дешевым модулями eBay, на самом деле довольно хорош

Ахулл
Пн 30 ноября 2015 г., 22:48
Робка написал: Менее релевантный вопрос: Очевидно, что дешевые амплифицированные микрофоны eBay имеют серьезные ограничения для захвата звука (но отлично подходят для дешевого прототипа). Кто -нибудь знает о микрофоне/предусилителе, который можно использовать для этого проекта? Я знаю, что есть много высококачественных микрофонов, но все они стоят значительно выше 50 долларов, что значительно выше ценой для этого эксперимента. Я постараюсь заменить дрянной капсулы электрической http: // www.jlielectronics.com/products/jli%252d61a.HTML, Клон хорошо известного Panasonic WM-61A, теперь устаревший), поскольку усилитель, используемый дешевым модулями eBay, на самом деле довольно хорош

Робка
Пн 30 ноября 2015 г., 23:15
Я посмотрел на несколько участков «строителей микрофона», и они в основном рекомендовали Panasonic до 2013 года, а затем клон после этого (для экономичных микрофонов... Некоторые из этих людей, кажется, знают, что делать, и тратят кучу времени, создавая микрофон, фантомную силу и т. Д., Поэтому я предполагаю, что они проверили реальную жизнь капсулы). Тот факт, что это <3 доллара также делает его очень интересным для меня :)

Мне в основном нужна капсула с низким шумом. Пока все капсулы получают одинаковые частоты, мой код работает. Я пытаюсь построить довольно общий двигатель местоположения, но большинство звуков, которые хорошо работают, имеют тенденцию быть импульсивными по своей природе: выстрелы, хлопки, стук и т. Д. Я запускаю на основе уровня, а не частоте (было бы невозможно сделать это достаточно быстро и при этом захватывать образцы). Я продолжаю выборку 4 канала для одного цикла, и любой канал достигает или ниже уровней триггеров, он начинает преобразование 4CH с 2048 образцами на канал.

Редактировать: капсулы eBay такие же, как и в модулях. Дешевый, низкокачественный китайский мусор. Замена их не будет иметь значения. Я уверен, что есть высококачественные китайские капсулы, но мы не найдем их на eBay

Затем я пересекаю корреляцию и выплевываю образцы и значения корреляции (который образец наиболее вероятно запустит ту же форму волны, что и канал триггера). Прямо сейчас я просто настраиваю их с помощью Gnuplot:
adc4ch.png
ADC4CH.PNG (38.86 киб) просмотрено 779 раз

Rogerclark
Вт. 01 декабря 2015 г. 1:05 утра
Re: SD lib

Есть ветка об этом некоторое время назад, @stevestrong

Он заставил SD работать намного лучше

Так что ищи его публикации

Кроме того, вам следует обновить, чтобы использовать ветвь разработки репо, так как у него есть исправления Стива


Ваше здоровье

Роджер

Робка
Вт. 01 декабря 2015 г. 8:59 утра
Спасибо, Роджер

Если я скачиваю https: // github.com/rogerclarkmelbourne/ ... владелец.молния Я вижу, что файлы от 21 ноября. Есть ли более новый филиал разработки? Поток, на который вы направили меня, была примерно в конце октября, поэтому файлы 21 ноября должны быть обновлены, правильно?

РЕДАКТИРОВАТЬ: Я также только что заметил ниже на этой странице https: // github.com/rogerclarkmelbourne/ ... /Библиотеки
Последняя SDFAT, модифицированная версия из https: // github.com/Victorpv/sdfat Кажется, работает нормально. Если вам нужна лучшая производительность для больших переводов, может использовать режим DMA, но для этого требуется последняя библиотека SPI от https: // github.com/vicopropv/arduino_stm ... Спутники/SPI . Не нуждается в обновленных файлах SPI, если вы не используете режим DMA. DMA может быть включен или отключить редактирование SDSPISTM32F1.CPP, прочитайте файл, чтобы узнать, что изменить. Эта информация все еще верна? Если нет, может быть, стоит обновить страницу

Робка
Вторник 01 декабря 2015 г. 9:35 утра
Ахулл написал:Чтобы сохранить ОЗУ и ускорить ваши расчеты, не могли бы вы масштабировать ваши образцы до 8 бит с помощью какого -то алгоритма сжатия динамического диапазона, и все же получить надежные результаты? Как вы думаете, сколько образцов вам действительно нужно будет провести анализ?

Ахулл
Вт. 01 декабря 2015 г. 10:15 утра
Робка написал:Я посмотрел на несколько участков «строителей микрофона», и они в основном рекомендовали Panasonic до 2013 года, а затем клон после этого (для экономичных микрофонов... Некоторые из этих людей, кажется, знают, что делать, и тратят кучу времени, создавая микрофон, фантомную силу и т. Д., Поэтому я предполагаю, что они проверили реальную жизнь капсулы). Тот факт, что это <3 доллара также делает его очень интересным для меня :)

Мне в основном нужна капсула с низким шумом. Пока все капсулы получают одинаковые частоты, мой код работает. Я пытаюсь построить довольно общий двигатель местоположения, но большинство звуков, которые хорошо работают, имеют тенденцию быть импульсивными по своей природе: выстрелы, хлопки, стук и т. Д. Я запускаю на основе уровня, а не частоте (было бы невозможно сделать это достаточно быстро и при этом захватывать образцы). Я продолжаю выборку 4 канала для одного цикла, и любой канал достигает или ниже уровней триггеров, он начинает преобразование 4CH с 2048 образцами на канал.

Редактировать: капсулы eBay такие же, как и в модулях. Дешевый, низкокачественный китайский мусор. Замена их не будет иметь значения. Я уверен, что есть высококачественные китайские капсулы, но мы не найдем их на eBay

Затем я пересекаю корреляцию и выплюнул образцы и значения корреляции (который образец наиболее вероятный начинает ту же форму волны, что и канал триггера). Прямо сейчас я просто настраиваю их с помощью Gnuplot:
ADC4CH.Пнн

ZMEMW16
Вторник 01 декабря 2015 г. 13:05
@ahull
<редактировать> Для набора данных тестирования, </редактировать>
Разве вам не нужен просто один записанный вход, остальные 3 сигнала могут быть получены с расстояний разделения
Для «микрофов», может быть, в качестве шума, может быть, чак.

Я сделал что -то подобное с указанной пользователем функцией в драйвере устройства ядра при работе, датчики уровня показывают вариации при такси.

Стивен

Робка
Вторник 01 декабря 2015 г. 13:37
Энди, вот файл с реальными данными (такой же, как и график, который я поделился раньше), CH0 был каналом триггера. Как я уже сказал, это имеет тенденцию сгибать все образцы вместе, поэтому было бы легко предположить, что вы можете сократить финал... Но в реальной жизни, даже если 2 канала могут быть очень близко (если звук сосредоточен на этих двух), два других будут изменены гораздо позже (легко имитировать, добавляя шум для первых 1024 образцов для CH2 и CH3, и, например, смещение образцов на так много)

Спасибо за вашу помощь

Стивестронг
Вт 02 февраля 2016 г., 8:15 вечера
@ROBCA
Извините за то, что публиковал так поздно, но я просто прочитал этот пост, и хотя я делюсь с вами некоторой информацией.
Мы (мой друг и я) также работаем над чем-то подобным, до 8 каналов преобразуются квази мгновенно (через образцы и удержание) через регулярные промежутки времени, данные таймером и хранятся на SD-карте в смежных 512-байтовых блоках, несколько секунд длинная выборка.
Скорость хранения в основном ограничена задержкой записи карты, мы используем карты класса 10, способные до 80 Мбит / с, но все еще очень ограничивает.
Таким образом, чем выше номер канала, тем меньше частота выборки для того же количества данных.
В качестве альтернативы, чтобы иметь возможность хранить больше данных, мы подумали, что для реализации своего рода дельта -сжатия: для блока 512 байтов хранится только первые образцы для каждого канала в полном 12 -битном разрешении, для следующих образцов только дельта на дельта Предыдущий образец должен храниться. В зависимости от частоты отбора проб эти Deltas можно хранить в 8 или 4 -битных полках, экономя ~ 55% или 70% пространства хранения данных.
Проблема: на аналоговых входах очень высокий шум, когда данные хранятся на карте! Мы не могли избавиться от этого, независимо от того, насколько интенсивно отфильтровал шум (+-40LSB !!!) все еще там. Также попытались сделать дифференциальное значение из полезных образцов, без решения, потому что оказалось, что шум не всегда распределен равномерно.
Вот почему наша следующая идея состоит в том, чтобы разделить выборку и хранилище SD во времени, чтобы использовать один STM32 только в качестве преобразователя, который отправляет полученные данные (после отбора проб) через SPI во второй STM32, ответственный за хранение/обработку данных. И это тот момент, когда я заблокирован в настоящее время, Slave SPI не хочет работать.
Любые мысли/комментарии по этому поводу?
Для вашего интереса, вот наш проект:
https: // github.com/stevstrong/audio-sample
Мои репо также содержат текущие версии SDFAT и STM32, которые я использую.
Существует также папка с именем «Инструменты», я закодировал веб-графический интерфейс мониторинга сигнала и приложение на основе обработки для сброса данных через UART с до 500KBAUDS.
Стив

Ахулл
Пт, 05 февраля 2016 г., 22:06
Шум вполне может быть связан с дизайном некоторых из этих дешевых досок. Много развязывающих конденсаторов и, если возможно, может помочь отдельная аналоговая почва.

Стивестронг
Пт, 05 февраля 2016 г., 22:52
Я пробовал конденсаторы, разделенные VCC-A, ничего не помогло.
Земля не может отделиться, на этих дешевых досках невозможно.
Я видел на оригинальном Maple Mini Leaflabs.
Клоны Baite и все другие китайские доски имеют один общий источник питания для аналоговых и цифровых, поэтому кажется безнадежным.
Вот почему мы попробовали разделенные доски, которые, кажется, подтверждают нашу стратегию.
Тем временем, рабский SPI начал работать.

Rogerclark
Сб 06 февраля 2016 г. 1:21
Стив

У меня есть Maple Studio Studio, который, кажется, хорошо сделан.

https: // www.Itead.CC/ITEADMAPLE.HTML

Похоже, они хорошо разработали доску, но я не уверен в отдельных аналоговых основаниях. Вы можете взглянуть на схему и подтвердить, выглядит ли она лучше, чем Baite Maple Mini

Схема: ftp: // imall.Iteadstudio.com/im120411012 ... Dmaple.PDF

В 5 долларов.80 его конкурентоспособная цена. Это просто позор, что они используют STM32F103RBT, а не STM32F103RET, ad у RET имеет ЦАП и т. Д., При незначительной стоимости.

Стивестронг
Солнце 07 февраля 2016 г., 8:11 вечера
NOP, у них также есть только один общий VDD.
Это было бы оптимально:
https: // github.com/leaflabs/maplemini/b ... Лемини.PDF
Разделенные территории (от феррита) и второй A-VDD.

Rogerclark
Пн, 08 февраля 2016 г. 12:52 утра
ХОРОШО

Жаль, что они этого не сделали, так как они, кажется, столкнулись с большими проблемами в другом месте на доске E.глин. С источником питания гораздо сложнее, чем на Maple Mini и т. Д

МРН
Чт 5 мая 2016 г., 22:00
@ROBCA: комментарий к Оценка DOA:
В случае периодического обнаружения сигнала можно получить 2D -представление,
Если одно измерение - частота (высота), другой - DOA (направление прибытия),
и цвета (интенсивность) представляют вероятность того, что источник присутствует в данной FREQ и DOA.
Эта 2D-плана по позиции чрезвычайно надежна против непериодического шума.

Изображение

Подробнее здесь:
https: // SignalProcessingIdeas.WordPress ... OPI-PLANE/

Если вам интересно, я реализован в октаве.
МРН.

Робка
Чт 5 мая 2016 г., 23:18
Спасибо за предложение, это действительно интересно...

Но будет ли это работать с одним ударным звуком (как выстрел)? В этих случаях нет частоты

Я полностью реализовал алгоритм расположения звука, кстати. Работает довольно хорошо: 4 микрофона, использует гиперболическое местоположение (сильно модифицированная версия алгоритма мультилатерации, определенного в нем ++: https: // sourceforge.net/projects/itpp/). Самая медленная часть - это перекрестная корреляция образца (я использую общий алгоритм корреляции поперечной корреляции, оптимизированный для моей стратегии отбора проб) . В зависимости от точности, которую я хочу достичь, я могу получить место в течение 1 и 3 секунд после захвата звука.

Я мог бы ускорить перекрестную корреляцию, используя FFT, но устройства, которые я использую, просто не хватает памяти, чтобы сделать это. И даже использование устройства с большим количеством памяти может недостаточно улучшить корреляцию, чтобы оправдать усилия: F1, использующий целочисленную математику

К сожалению, «жизнь произошла» до того, как я закончил проект и очистил его для публикации... Надеюсь опубликовать это в ближайшее время, хотя

МРН
Сб, 7 мая 2016 г., 19:12
Но будет ли это работать с одним ударный звук (как выстрел)? В этих случаях нет частоты Я проверил запись, которую вы опубликовали несколько месяцев назад, она кажется действительно непериодической :)
К сожалению, метод даст вам почти тот же результат, что и оценка на основе межреляции.
В декомпозиции будет присутствовать одна вертикальная линия, что будет распределена по всему диапазону частот.

Относительно скорости кросс-корреляция: Как только вы примерно узнаете о DOA источника, вы можете уменьшить расчет кросс-корреляции только для тех кандидатов в срок (DOA-кандидаты), которые близки к положению источника из предыдущей оценки.

Пример: существует сильный пик при 50 градусах, указывающий на источник, затем с следующего кадра достаточно, чтобы вычислить межкорреляцию для этих значений, которые находятся близко к 50 градусам (давайте сканируем с 30 градусов до 60 дюймов) вместо сканирования всего (0-180) пространства DEGS для данной пары микрофона. В случае перемещения источников, конечно, необходимо обновить эти значения.

удачи!
М.

Робка
Пн, 09 мая 2016 г., 12:36 утра
Я на самом деле не использую DOA (как под углом), но TDOA (разница во времени прибытия). Крестная корреляция для этих 4 сигналов не будет очень поможет, зная угол, поскольку сигнал все еще может достигать микрофонов в очень разные времена. Я имею в виду, это может помочь, но я не уверен, что это компенсирует время, которое потребуется, чтобы запустить другой алгоритм, прежде чем попытаться перекрестная корреляция

Поскольку по указанной вами ссылке не было кода или примера, действительно трудно сказать, сколько времени (и сколько памяти) это потребует... Если у вас есть больше информации, мне было бы интересно

МРН
Пн 16 мая 2016 г., 10:34
http: // www.Codesend.com/view/a7900c5871 ... 39412ED08/
Основной код выше.
Создаст GitHub Страница с таблицами Lokup (текстовый файл 150 КБ), аудио-образцы и т. Д.

Робка
Пн 16 мая 2016 г., 15:20
Спасибо.

Вы действительно используете функцию xcorr () в своем алгоритме? Если так, то это единственная медленная часть в моем коде :). Мне пришлось реализовать быструю версию XCorr для моих наборов данных, и мне удалось сократить время для расчета перекрестной корреляции до ~ 15% от более общего алгоритма для того же набора данных (принимая некоторые ограничения, которые в моем случае являются не значит)

За пределами XCORR мой алгоритм работает только в нескольких MSEC и не использует никакой дополнительной памяти. Просто чтобы дать представление о доступной оперативной памяти менее 20 КБ, я использую 16 КБ для данных образцов, поэтому осталось только пару КБ для дополнительных переменных. Там нет места для таблицы поиска или многое другое

Если бы у нас было много памяти, было бы проще реализовать перекрестную корреляцию на основе БПК, используя МПФ на основе целочисленного плана со таблицами поиска. Но в F103 просто нет места для какого -либо таблицы поиска (да, я мог бы использовать устройство с большей памятью, что я и планирую сделать в будущем)

Во всяком случае: слабая часть моего кода - эффективно внедрять xCorr ()

МРН
Пн 16 мая 2016 г., 18:17
Да, до разложения PO-Pi действительно есть XCORR FNCT :)
Вот ссылка на GitHub, должны быть все файлы, которые вам нужно будет запустить демо-декорацию.
Существует основная процедура «popi_demo», написанная и протестированная в октаве.
Затем звуковые образцы, таблицы поиска, в формате TXT, и есть даже функция xcorr, которую я использовал, от Пола Кинцл.

https: // github.com/m-r-n/popi-toolbox

Меня было бы интересно в алгоритме кросс-корреляции, который вы использовали, так как мне понадобится скоро, когда переписать это разложение для встроенной платформы.
С уважением, мр.

Ахулл
Пн 16 мая 2016 г., 22:18
Просто подумал, что попаду в мою, вероятно, бесполезную стоимость таппы. Конечно, таблицы поиска обычно статичны, и поэтому их лучше хранить во время вспышки, а не RAM (я.эн. объявлен как константы, а не переменные).. или я упустил суть.

Робка
Вторник 17 мая 2016 г., 3:29
Энди: Да, таблица поиска может быть сохранена статически, вы правы. Но если вам нужно выполнить математическую математику (я не очень хорош в чтении кода октавы, поэтому я не уверен), может быть медленно получить все эти данные.

В любом случае, этот код мне не помогает :) Это для периодической частоты и предназначено для того, чтобы помочь найти динамик в комнате (2D -пространство), используя 2 микрофона. Мой код работает над ударными звуками, с 4 -м микрофонами, в полном 3D и в зависимости от размера массива микрофона, может работать от всего от нескольких см до многих километров (при условии, что звук достаточно громкий, чтобы быть четко услышанным над шумовым порогом ). Мы заинтересованы в совершенно разных проблемах

Вот мой код. Я храню все свои образцы как 16 -битные целые числа в «чередованном массиве» (я.эн. Sample1_ch1, Sample1_ch2, ​​Sample1_ch3, sample1_ch4, sample2_ch1, sample2_ch2, ​​sample2_ch3, sample2_ch4 и т. Д.). Поэтому мне нужно пересечь свой массив с шагом 4.

Функция GCC () является модифицированной общей перекрестной корреляцией. Из моих 4 образцов один идентифицируется как «триггерный канал» (первый микрофон, который получает сигнал), и я всегда скрещиваю канал триггера с 3 другими образцами. Таким образом, я могу сократить корреляционное сканирование до половины пространства (потому что я никогда не буду в случае, когда канал триггера будет иметь отрицательное значение корреляции). Я также сканирую только 1/3 сигнала, потому что мой триггерный сигнал является ударным, и только первый 1/3 образца содержит значительную информацию для перекрестной корреляции.

Не уверен, насколько актуальна эта оптимизация в вашем случае... В противном случае вам придется использовать общий алгоритм корреляции Cross (вот версия, но это действительно довольно расточительная версия http: // www.провести.FM/Vessuge/Pusmes_2010_03/Column2/)

/** * @brief Timer interrupt number. * * Not all timers support all of these values. All timers support * TIMER_UPDATE_INTERRUPT. "General purpose" timers can be a special * nuisance in this regard, as they individually support different * subsets of the available interupts. Consult your target's reference * manual for the details. */ typedef enum timer_interrupt_id { TIMER_UPDATE_INTERRUPT, /**< Update interrupt. */ TIMER_CC1_INTERRUPT, /**< Capture/compare 1 interrupt. */ TIMER_CC2_INTERRUPT, /**< Capture/compare 2 interrupt. */ TIMER_CC3_INTERRUPT, /**< Capture/compare 3 interrupt. */ TIMER_CC4_INTERRUPT, /**< Capture/compare 4 interrupt. */ TIMER_COM_INTERRUPT, /**< COM interrupt. */ TIMER_TRG_INTERRUPT, /**< Trigger interrupt. */ TIMER_BREAK_INTERRUPT, /**< Break interrupt. */ } timer_interrupt_id;

МРН
Чт 19 мая 2016 г. 18:39
привет!
Спасибо за подсказку (хранение таблиц поиска), детали и код!

- относительно Различия между двумя методами:
Хотя код оценки DOA-зависимого от PITE использует только 2 микрофона, триангуляция двух пар микрофонов, вы можете получить аналогичное представление, как и в случае метода TDOA. Шаг - это всего лишь одно дополнительное измерение (как параметр), и да, он избыточно (бесполезен) в случае вашей проблемы. Причина: для ударных звуков в разложении не было бы значительной точки зрения, указывающей на одну частоту при одном значении TDOA (или DOA), но вертикальная линия, распространяющаяся по всему диапазону частот. Конечно, при правильном значении DOA (TDOA).

- относительно Октавский код: Есть три шага:
- парная межреляция кадров микро-сигнала (результат: вектор сорта),
- Расчет продукта DOT между вектором поперечного корреляции (сорта) и 3 таблицы поиска (popilut_l, popilut_0, popilut_r), результат: 3 матрицы
- и, наконец, суммируя три точки-продуктовых матриц, результат: одна отдельная матрица (сетка) с таким же разрешением.
Примечание: есть изображение PNG, демонстрирующее это в репозитории.

- относительно Поиск таблиц:
Идея хранить их с исполняемыми звуками великолепно, однако, я также понятия не имею, как быстро расчет точечных продуктов векторов, хранящихся в оперативной памяти, и матриц, хранящихся во флэш-. нужно попробовать :)
- Таблицы поиска могут быть повторно рассчитаны для любого микрофальто-дистанции (как вы говорите) и для любого диапазона шага (на тот случай, если один день вы решите проанализировать периодические сигналы).

ваше здоровье!

Ахулл
Чт 19 мая 2016 г., 20:13
МРН написал:привет!
- относительно Поиск таблиц:
Идея хранить их с исполняемыми звуками великолепно, однако, я также понятия не имею, как быстро расчет точечных продуктов векторов, хранящихся в оперативной памяти, и матриц, хранящихся во флэш-. должен попробовать :)
- Таблицы поиска могут быть повторно рассчитаны для любого микрофальто-дистанции (как вы говорите) и для любого диапазона шага (на тот случай, если один день вы решите проанализировать периодические сигналы).

ваше здоровье!

Робка
Пт 20 мая 2016 г., 19:04
МРН написал: - и, наконец, суммируя три точки-продуктовых матриц, результат: одна отдельная матрица (сетка) с таким же разрешением.

Пито
Чт 13 июля 2017 г. 14:57
@ROBCA - я играю с приведенным выше кодом, который вы сделали для Simult 2 ADC, 2 канала каждый.. (Итак, 4 значения).
Я пытался с одновременными 2 АЦП, но по 1 каналу на каждый АЦП (так что 2 значения на выборку).
Я сделал следующие изменения: #define SWODEBUG #ifdef SWODEBUG SWO_Channel SWO; #define SWO_ErrLog(...) SWO.printf(__VA_ARGS__); #else /* Not DEBUG */ #define SWO_ErrLog(...) #endif

Стивестронг
Чт 13 июля 2017 г. 15:35
Вот простой пример, буферные данные отправляются по SPI, но вместо этого вы можете сделать DSP или другие вещи.
https: // github.com/stevstrong/audio-sam ... _Раб.Ино

ZMEMW16
Чт 13 июля 2017 г., 19:31
С извинениями перед Агатой С, но почему они не спросили @ahull :?:

Ахулл
Пт 14 июля 2017 г. 8:51 утра
[ZMEMW16 - Чт 13 июля 2017 г., 19:31] - С извинениями перед Агатой С, но почему они не спросили @ahull :?:
Не спрашивай его, он ничего не знает ;)


RTC потерял время