Перейти к содержанию
    

Здравствуйте.

 

Надо выделить частоты, характерные для движения человека, из записанного сигнала датчика движения, и определить порог для их детектирования оптимизированным алгоритмом Герцеля.

Расскажите, пожалуйста, как это сделать?

 

Запись сигнала, поданного на линейный вход звуковой карты, производилась через конденсатор 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 файлы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Алгоритм не смотрел. Но!

Насколько я помню, например при частоте выборок 8кГц и 400 выборках для анализа, ширина спектральной линии будет 20Гц. А у Вас частоты 5, 8 и 14 Гц. Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала весь спектр посмотрите.

Каким макаром?

Нашёл программу Audacity, но какие нужны настройки для построения спектра я не знаю. Да и экспорт только в текстовом виде.

post-82877-1465215510_thumb.png

 

Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило.

Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каким макаром?

преобразование Фурье много делать умеет matlab, mathematica, excel в конце концов. да и руками сделать обычное небыстрое преобразование Фурье - на любом ЯП несколько строчек.

 

Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение).

какая разница откуда данные, чтобы иметь разрешение по частоте в 1Гц, длина выборки должна быть больше секунды.

ну и искать 14Гц с датчика движения, не многовато ли? алкоголиков с похмелья по дрожжанию рук выделять из сигнала? да и то там не выше пары Гц будет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каким макаром?

У того же Sound Forge есть встроенная функция Menu->View->Spectrum Analysis. Чтобы не замарачиваться изучением Matlab/Exel/Mathematica

 

Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение).

Хорошо,понял. Но еще раз повторяю.

У вас 125 семплов в секунду => частота семплирования 125 Гц + 25 семплов => ширина спектральной линии будет 5Гц, а между 5 и 8 всего 3Гц.

Для 125Гц необходимо анализировать разом не менее 60 семплов.

 

Но вообще 125Гц - это очень мало, не будет никакой точности. Увеличьте частоту и количество семплов до максимума.

 

З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники.

Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты?

Изменено пользователем alexeyv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники.

Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты?

Не уверен.

Встроенная звуковуха: Realtek® ALC1200 8-Channel High Definition Audio CODEC.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не надо там никакого Герцеля, сделайте самый простой ФНЧ с частотой среза в пару Гц и компаратор, с порогом (0.1 на данных картинках, где 1 = вся шкала по вертикали).

post-3954-1465292719_thumb.png

слева на право: сигнал, профильтрованный сигнал, спектр, спектр профильтрованного сигнала.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, есть там кое-что в низкочастотной области. Отчет по файлам:

Движение в метре от датчика: 6.8 Гц

Движение вблизи датчика: 4.7 Гц

Комбинация: 4.2 Гц, есть только во второй половине. В первой все забито шумом.

Отдаление от датчика: 7 Гц (плохо видно, в шумах)

Приближение и отдаление: 10 Гц широкая линия

Приближение к датчику: 5.4 Гц

 

Я не пытался определить точность результата. Попробуйте снять еще данные максимально уменьшив частоту дискретизации, но так, чтобы виндюки не включали еще свою передискретизацию. Они это очень любят, не сказав никому.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Встроенная звуковуха: 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

 

Нет, есть там кое-что в низкочастотной области. Отчет по файлам:

Откуда, если там цифровой фильтр для устранения постоянной составляющей?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда, если там цифровой фильтр для устранения постоянной составляющей?

в даташите на ALC888 никакого HPF фильтра нет.

а последовательная ёмкость если и режет низкие частоты, то не так круто.

картинки спектров парой постов выше я же не в фотошопе нарисовал.

хотя конечно для датчиков движения где самые интересные частоты меньше 1Гц аудио АЦП не самый лучший выбор.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в даташите на ALC888 никакого HPF фильтра нет.

Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт

Большего описания нет т.к. этот фильтр не управляемый и идет совместно с аналоговым блоком (АЦП)

 

alc888_HPF.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя, конечно, для датчиков движения, где самые интересные частоты меньше 1Гц, аудио АЦП - не самый лучший выбор.

А чем тогда снимать сигнал?

 

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

Сделаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт

мне даташит 1.0 попался, там нету.

да и тут только в какой-то определённой ревизии ALC888-VC2-GR, а их там 5 штук разных.

о чём спор, если на ALC1200 всё равно даташита нет. ну и будь у ТС в его звуковухе этот фильтр на 12Гц, никакого сигнала он бы не увидел вообще. (см картинку спектра)

 

А чем тогда снимать сигнал?

любым АЦП, который НЧ не режет.

сделать-то что хотите? подключить датчик движения к звуковой карте?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...