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

 
 
> Алгоритм Герцеля, Поиск частот в записанном сигнале
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

Сообщений в этой теме
- kreker   Алгоритм Герцеля   Jun 6 2016, 05:09
- - ViKo   Для начала весь спектр посмотрите.   Jun 6 2016, 05:24
|- - kreker   Цитата(ViKo @ Jun 6 2016, 10:24) Для нача...   Jun 6 2016, 12:19
|- - ViKo   Цитата(kreker @ Jun 6 2016, 15:19) Каким ...   Jun 6 2016, 12:36
|- - _pv   Цитата(kreker @ Jun 6 2016, 18:19) Каким ...   Jun 6 2016, 13:06
- - alexeyv   Алгоритм не смотрел. Но! Насколько я помню, на...   Jun 6 2016, 07:15
- - alexeyv   ЦитатаКаким макаром? У того же Sound Forge есть в...   Jun 7 2016, 05:07
|- - kreker   Цитата(alexeyv @ Jun 7 2016, 10:07) З.Ы. ...   Jun 7 2016, 07:14
- - _pv   не надо там никакого Герцеля, сделайте самый прост...   Jun 7 2016, 09:51
- - Alex11   Нет, есть там кое-что в низкочастотной области. От...   Jun 7 2016, 10:25
- - alexeyv   ЦитатаВстроенная звуковуха: Realtek® ALC1200 8-Cha...   Jun 8 2016, 04:42
|- - _pv   Цитата(alexeyv @ Jun 8 2016, 10:42) Откуд...   Jun 8 2016, 07:27
|- - kreker   Цитата(_pv @ Jun 8 2016, 12:27) Хотя, кон...   Jun 8 2016, 09:25
- - alexeyv   Цитатав даташите на ALC888 никакого HPF фильтра не...   Jun 8 2016, 09:08
|- - _pv   Цитата(alexeyv @ Jun 8 2016, 15:08) Верси...   Jun 8 2016, 10:05
- - TSerg   Перенести спектр сигнала в полосу пропускания звук...   Jun 8 2016, 19:51
|- - kreker   Цитата(_pv @ Jun 8 2016, 15:05) сделать-т...   Jun 8 2016, 23:49
- - _pv   с алгоритмом бодяга потому что нет там в сигнале н...   Jun 9 2016, 08:05


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

 


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


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