Некоторые вопросы обработки сигналов / БПФ - PullRequest
5 голосов
/ 22 июля 2011

Мне нужна помощь, чтобы подтвердить некоторые основные шаги DSP. Я работаю над внедрением некоторого программного обеспечения для обработки сигналов датчика акселерометра смартфона, но раньше не работал в DSP.

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

Мои конкретные вопросы:

  1. Из потока реального времени я собираю окно из 256 выборок с перекрытием 50%, как я прочитал в литературе. То есть я добавляю 128 сэмплов за раз, чтобы заполнить окно с 256 сэмплами. Это правильный подход?

  2. На первом рисунке ниже показано одно такое окно с 256 выборками. На втором рисунке показано окно примера после того, как я применил оконную функцию Hann / Hamming . Я читал, что применение оконной функции - это типичный подход, поэтому я пошел дальше и сделал это. Должен ли я делать это?

  3. В третьем окне показан спектр мощности (?) С выхода библиотеки FFT. Я действительно собираю кусочки, которые я прочитал. Правильно ли я понимаю, что спектр увеличивается до 1/2 частоты дискретизации (в данном случае 16 Гц, поскольку моя частота дискретизации составляет 32 Гц), и значение каждой точки спектра - спектр [i] = sqrt (реальный [ я] ^ 2 + мнимая [я] ^ 2)? Это правильно?

  4. Предполагая, что то, что я сделал в вопросе 3, верно, правильно ли я понимаю, что на третьем рисунке показаны основные частоты около 3,25 Гц и 8,25 Гц? Из сбора данных я знаю, что я работал на частоте около 3 Гц, поэтому всплеск на частоте 3,25 Гц кажется правильным. Таким образом, должен быть некоторый шум, другие факторы, вызывающие (ошибочный) всплеск на 8,25 Гц. Существуют ли какие-либо фильтры или другие методы, которые я могу использовать, чтобы сгладить этот и другие всплески? Если нет, есть ли способ определить «настоящие» всплески по ошибочным всплескам?

enter image description here

Ответы [ 3 ]

1 голос
/ 24 июля 2011
  1. Принятие решения о размере выборки и перекрытии всегда является компромиссом между точностью частоты и своевременностью: чем больше выборка, тем больше бункеров FFT и, следовательно, абсолютной точности, но это занимает больше времени.Я предполагаю, что вы хотите регулярно обновлять частоту, которую вы обнаруживаете, и абсолютная точность не является слишком важной: так что FFT на 256 сэмплов кажется довольно хорошим выбором.Перекрытие даст более высокое разрешение для тех же данных, но за счет обработки: опять же, 50% кажется нормальным.

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

  3. Совершенно верно: спектр мощности - это квадратный корень из суммы квадратов комплексных значений.Ваше предположение о частоте Найквиста верно: ваша шкала поднимется до 16 Гц.Я предполагаю, что вы используете настоящий алгоритм БПФ, который возвращает 128 комплексных значений (БПФ вернет 256 значений обратно, но, поскольку вы даете ему реальный сигнал, половина будет точным зеркальным отображением другого), поэтому каждая ячейкаимеет ширину 16/128 Гц.Также обычно показывать спектр мощности в логарифмическом масштабе, но это не имеет значения, если вы просто обнаруживаете пики.

  4. Пик 8 Гц действительно есть: я предполагаю, что телефонв кармане движущегося человека находится система более 1-го порядка, поэтому у вас будут другие частотные компоненты, но вы сможете обнаружить первичную.Вы можете отфильтровать его, но это бессмысленно, если вы берете БПФ: просто игнорируйте эти корзины, если вы уверены, что они ошибочны.

Вы, кажется,ладитьЕдинственное предложение, которое я хотел бы сделать, - разработать более длительную эвристику для результатов: посмотреть на последовательные результаты и отклонить краткосрочные обнаруженные сигналы.Найдите основной компонент и посмотрите, сможете ли вы отследить его, когда он перемещается.

0 голосов
/ 25 марта 2016

Некоторое понимание вопроса 4 (от изучения сигналов акселерометра людей, бегущих в течение месяцев моей жизни):

Проводите ли вы этот анализ по одному каналу оси акселерометра или объединяете их для создания величиныускорения?Если вас интересует общая величина ускорения сигнала, то вам следует объединить xyz, например mag_acc = sqrt ((x - 0g_offset) ^ 2 + (y - 0g_offset) ^ 2 + (z - 0g_offset) ^ 2).Этот сигнал должен быть на 1g, когда устройство все еще.Если вы смотрите только на одну ось, то вы получите компоненты от доминирующего движения при движении, а также от ориентации телефона, влияющей на ваш сигнал (потому что влияние гравитации будет переходить вокруг).Таким образом, если ориентация телефона меняется, когда вы бежите от того, как вы его держите, это может внести значительный вклад в сигнал, но величина не будет отражать изменения ориентации в такой степени.Бегущий человек должен иметь действительно чистую доминирующую частоту с частотой шага людей.

0 голосов
/ 22 июля 2011

Чтобы ответить на несколько ваших вопросов:

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

Да, самые сильные частоты около 3 и 8 Гц. Я не думаю, что всплеск 8 Гц является ошибочным. С таким коротким набором данных вы почти наверняка не сможете контролировать точные частоты вашего сигнала.

...