kreker 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Здравствуйте. Надо выделить частоты, характерные для движения человека, из записанного сигнала датчика движения, и определить порог для их детектирования оптимизированным алгоритмом Герцеля. Расскажите, пожалуйста, как это сделать? Запись сигнала, поданного на линейный вход звуковой карты, производилась через конденсатор 10 мкФ. Параметры записи: 48000 Гц, Моно, 32 бит float. По-умолчанию, искал частоты 5, 8 и 14 Гц, но на выходе всё время истина, даже при подстановке других частот. Возможно, что частоты немного другие или что-то не так с реализацией алгоритма (через DMA по таймеру c ADC передаётся 125 семплов в секунду (5 раз 25 семплов за раз), каждые 25 семплов производится проверка наличия частот), или сигнал сильно "загажен". #define ADCSAMPLES 25 #define ADC_SAMPLING_RATE 125 #define M_PI 3.14159265358979323846 uint16_t AdcSamplesArr[ADCSAMPLES]; bool goertzel(void) { int TARGET_FREQUENCYS[] = {5, 8, 14}; bool temp_var = false, flag_frq_exist[] = {true, true, true}; float coeff, Q0, Q1, Q2, result; for(int i = 0; i < 3; i++) { float prev_result = 0; coeff = 2 * cos(M_PI * 2 * (TARGET_FREQUENCYS[i] / ADC_SAMPLING_RATE)); Q0=0; Q1=0; Q2=0; for(int k = 0; k < ADCSAMPLES; k++) { Q0 = coeff * Q1 - Q2 + (float) AdcSamplesArr[k]; Q2 = Q1; Q1 = Q0; result = Q1 * Q1 + Q2 * Q2 - Q1 * Q2 * coeff; if(prev_result < result) { prev_result = result * 0.85; } else { flag_frq_exist[i] = false; } } } if((flag_frq_exist[0] == true) && (flag_frq_exist[1] == true) && (flag_frq_exist[2] == true)) { return temp_var = true; } else { return temp_var = false; } } Файлы с записью сигнала (*.wav файлы). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Для начала весь спектр посмотрите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Алгоритм не смотрел. Но! Насколько я помню, например при частоте выборок 8кГц и 400 выборках для анализа, ширина спектральной линии будет 20Гц. А у Вас частоты 5, 8 и 14 Гц. Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kreker 0 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Для начала весь спектр посмотрите. Каким макаром? Нашёл программу Audacity, но какие нужны настройки для построения спектра я не знаю. Да и экспорт только в текстовом виде. Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило. Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Каким макаром? Matlab. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 6 июня, 2016 Опубликовано 6 июня, 2016 · Жалоба Каким макаром? преобразование Фурье много делать умеет matlab, mathematica, excel в конце концов. да и руками сделать обычное небыстрое преобразование Фурье - на любом ЯП несколько строчек. Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение). какая разница откуда данные, чтобы иметь разрешение по частоте в 1Гц, длина выборки должна быть больше секунды. ну и искать 14Гц с датчика движения, не многовато ли? алкоголиков с похмелья по дрожжанию рук выделять из сигнала? да и то там не выше пары Гц будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 7 июня, 2016 Опубликовано 7 июня, 2016 (изменено) · Жалоба Каким макаром? У того же Sound Forge есть встроенная функция Menu->View->Spectrum Analysis. Чтобы не замарачиваться изучением Matlab/Exel/Mathematica Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение). Хорошо,понял. Но еще раз повторяю. У вас 125 семплов в секунду => частота семплирования 125 Гц + 25 семплов => ширина спектральной линии будет 5Гц, а между 5 и 8 всего 3Гц. Для 125Гц необходимо анализировать разом не менее 60 семплов. Но вообще 125Гц - это очень мало, не будет никакой точности. Увеличьте частоту и количество семплов до максимума. З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники. Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты? Изменено 7 июня, 2016 пользователем alexeyv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kreker 0 7 июня, 2016 Опубликовано 7 июня, 2016 · Жалоба З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники. Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты? Не уверен. Встроенная звуковуха: Realtek® ALC1200 8-Channel High Definition Audio CODEC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 7 июня, 2016 Опубликовано 7 июня, 2016 · Жалоба не надо там никакого Герцеля, сделайте самый простой ФНЧ с частотой среза в пару Гц и компаратор, с порогом (0.1 на данных картинках, где 1 = вся шкала по вертикали). слева на право: сигнал, профильтрованный сигнал, спектр, спектр профильтрованного сигнала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 7 июня, 2016 Опубликовано 7 июня, 2016 · Жалоба Нет, есть там кое-что в низкочастотной области. Отчет по файлам: Движение в метре от датчика: 6.8 Гц Движение вблизи датчика: 4.7 Гц Комбинация: 4.2 Гц, есть только во второй половине. В первой все забито шумом. Отдаление от датчика: 7 Гц (плохо видно, в шумах) Приближение и отдаление: 10 Гц широкая линия Приближение к датчику: 5.4 Гц Я не пытался определить точность результата. Попробуйте снять еще данные максимально уменьшив частоту дискретизации, но так, чтобы виндюки не включали еще свою передискретизацию. Они это очень любят, не сказав никому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 8 июня, 2016 Опубликовано 8 июня, 2016 · Жалоба Встроенная звуковуха: Realtek® ALC1200 8-Channel High Definition Audio CODEC. У ALC888 АЦП минимум 10 Гц. у ALC889 АЦП от 0Гц. Но у обоих стоит цифровой фильтр от 20 Гц (из datasheet: Integrated high-pass filter to cancel DC offset generated from digital microphone) По ALC1200 ничего не нашел, но пишут что это перелицованный ALC888 Нет, есть там кое-что в низкочастотной области. Отчет по файлам: Откуда, если там цифровой фильтр для устранения постоянной составляющей? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 8 июня, 2016 Опубликовано 8 июня, 2016 · Жалоба Откуда, если там цифровой фильтр для устранения постоянной составляющей? в даташите на ALC888 никакого HPF фильтра нет. а последовательная ёмкость если и режет низкие частоты, то не так круто. картинки спектров парой постов выше я же не в фотошопе нарисовал. хотя конечно для датчиков движения где самые интересные частоты меньше 1Гц аудио АЦП не самый лучший выбор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 8 июня, 2016 Опубликовано 8 июня, 2016 · Жалоба в даташите на ALC888 никакого HPF фильтра нет. Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт Большего описания нет т.к. этот фильтр не управляемый и идет совместно с аналоговым блоком (АЦП) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kreker 0 8 июня, 2016 Опубликовано 8 июня, 2016 · Жалоба Хотя, конечно, для датчиков движения, где самые интересные частоты меньше 1Гц, аудио АЦП - не самый лучший выбор. А чем тогда снимать сигнал? Попробуйте снять еще данные, максимально уменьшив частоту дискретизации, но так, чтобы виндюки не включали еще свою передискретизацию. Сделаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 8 июня, 2016 Опубликовано 8 июня, 2016 · Жалоба Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт мне даташит 1.0 попался, там нету. да и тут только в какой-то определённой ревизии ALC888-VC2-GR, а их там 5 штук разных. о чём спор, если на ALC1200 всё равно даташита нет. ну и будь у ТС в его звуковухе этот фильтр на 12Гц, никакого сигнала он бы не увидел вообще. (см картинку спектра) А чем тогда снимать сигнал? любым АЦП, который НЧ не режет. сделать-то что хотите? подключить датчик движения к звуковой карте? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться