реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Алгоритм Герцеля, Поиск частот в записанном сигнале
kreker
сообщение Jun 6 2016, 05:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 20-09-14
Пользователь №: 82 877



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

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

Запись сигнала, поданного на линейный вход звуковой карты, производилась через конденсатор 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 файлы).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 6 2016, 05:24
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Для начала весь спектр посмотрите.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jun 6 2016, 07:15
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Алгоритм не смотрел. Но!
Насколько я помню, например при частоте выборок 8кГц и 400 выборках для анализа, ширина спектральной линии будет 20Гц. А у Вас частоты 5, 8 и 14 Гц. Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило.
Go to the top of the page
 
+Quote Post
kreker
сообщение Jun 6 2016, 12:19
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 20-09-14
Пользователь №: 82 877



Цитата(ViKo @ Jun 6 2016, 10:24) *
Для начала весь спектр посмотрите.

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


Цитата(alexeyv @ Jun 6 2016, 12:15) *
Следовательно на 48кГц, чтобы различить 5 и 8 Гц необходимое количество выборок ~24кило.

Этим алгоритмом будет анализироваться сигнал, подаваемый на АЦП, а не записанные файлы; они (файлы) должны помочь определить частоты и порог их детектирования (см. первое сообщение).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 6 2016, 12:36
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(kreker @ Jun 6 2016, 15:19) *
Каким макаром?

Matlab.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 6 2016, 13:06
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(kreker @ Jun 6 2016, 18:19) *
Каким макаром?

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

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

какая разница откуда данные, чтобы иметь разрешение по частоте в 1Гц, длина выборки должна быть больше секунды.
ну и искать 14Гц с датчика движения, не многовато ли? алкоголиков с похмелья по дрожжанию рук выделять из сигнала? да и то там не выше пары Гц будет.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jun 7 2016, 05:07
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



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

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

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

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

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

З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники.
Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты?

Сообщение отредактировал alexeyv - Jun 7 2016, 05:12
Go to the top of the page
 
+Quote Post
kreker
сообщение Jun 7 2016, 07:14
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 20-09-14
Пользователь №: 82 877



Цитата(alexeyv @ Jun 7 2016, 10:07) *
З.Ы. Посмотрел файлы - нет там ни 5 ни 8 ни 14 Гц. Только какая-то ~2кГц и ее гармоники.
Вы уверены что ваша звуковая карта на ПК пропускает такие низкие частоты?

Не уверен.
Встроенная звуковуха: Realtek® ALC1200 8-Channel High Definition Audio CODEC.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 7 2016, 09:51
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



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

слева на право: сигнал, профильтрованный сигнал, спектр, спектр профильтрованного сигнала.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jun 7 2016, 10:25
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Нет, есть там кое-что в низкочастотной области. Отчет по файлам:
Движение в метре от датчика: 6.8 Гц
Движение вблизи датчика: 4.7 Гц
Комбинация: 4.2 Гц, есть только во второй половине. В первой все забито шумом.
Отдаление от датчика: 7 Гц (плохо видно, в шумах)
Приближение и отдаление: 10 Гц широкая линия
Приближение к датчику: 5.4 Гц

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

Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jun 8 2016, 04:42
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



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

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

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

Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 8 2016, 07:27
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(alexeyv @ Jun 8 2016, 10:42) *
Откуда, если там цифровой фильтр для устранения постоянной составляющей?

в даташите на ALC888 никакого HPF фильтра нет.
а последовательная ёмкость если и режет низкие частоты, то не так круто.
картинки спектров парой постов выше я же не в фотошопе нарисовал.
хотя конечно для датчиков движения где самые интересные частоты меньше 1Гц аудио АЦП не самый лучший выбор.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jun 8 2016, 09:08
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



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

Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт
Большего описания нет т.к. этот фильтр не управляемый и идет совместно с аналоговым блоком (АЦП)


Go to the top of the page
 
+Quote Post
kreker
сообщение Jun 8 2016, 09:25
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 20-09-14
Пользователь №: 82 877



Цитата(_pv @ Jun 8 2016, 12:27) *
Хотя, конечно, для датчиков движения, где самые интересные частоты меньше 1Гц, аудио АЦП - не самый лучший выбор.

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

Цитата(Alex11 @ Jun 7 2016, 15:25) *
Попробуйте снять еще данные, максимально уменьшив частоту дискретизации, но так, чтобы виндюки не включали еще свою передискретизацию.

Сделаю.
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 8 2016, 10:05
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(alexeyv @ Jun 8 2016, 15:08) *
Версия даташита Rev.1.4. 07 April 2008. Раздел 2.2. Самый первый пункт

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

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

любым АЦП, который НЧ не режет.
сделать-то что хотите? подключить датчик движения к звуковой карте?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016