Поиск релевантных пиков в беспорядочных БПФ

#filtering #signal-processing #fft #max

#фильтрация #обработка сигналов #БПФ #макс

Вопрос:

У меня есть выходные данные БПФ, которые выглядят следующим образом:

беспорядочный БПФ

Максимальное значение — 523 Гц. Однако, будучи беспорядочными БПФ, есть много маленьких пиков, которые находятся прямо рядом с большими пиками. Однако они не имеют значения, в то время как показанные пики — нет. Имеют ли значение какие-либо алгоритмы, которые я могу использовать для извлечения максимумов этого БПФ; Т.Е. не просто случайные пики, возникающие вблизи «реальных» пиков? Возможно, есть какой-то фильтр, который я могу применить к этому выводу БПФ?

РЕДАКТИРОВАТЬ: Контекст этого заключается в том, что я пытаюсь взять звуковые сэмплы с одним нажатием (например, кто-то нажимает клавишу на пианино) и извлечь самые громкие фрагменты. На изображении ниже важны пики выше 2000 Гц, потому что они являются дискретными частями данного звука (который, оказывается, является своего рода колоколом). Однако пики, которые разбросаны примерно рядом с 523, кажутся просто артефактами, и я хочу их игнорировать.

Комментарии:

1. Добавлен контекст. Извините за это, я признаю, что это было расплывчато.

Ответ №1:

Если пик широкий, это может указывать на то, что пиковая частота модулирована (AM, FM или оба) или фактически представляет собой совокупность нескольких спектральных пиков, каждый из которых потенциально модулирован.

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

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

Ответ №2:

Попробуйте свернуть свой БПФ (обработав его как сигнал) с помощью прямоугольного импульса ( pulse = ones(1:20)/20; ). Это может избавить от некоторых из них. Ваши максимумы будут сдвинуты на 10 частотных интервалов вправо, чтобы учесть это. По сути, вы бы интегрировали свой сигнал. Аналогичные методы используются в алгоритме Пан-Томпкинса для идентификации сердечных сокращений.

Ответ №3:

Однажды я работал над похожей проблемой и решил использовать фильтры Савицкого-Голея для сглаживания спектральных данных. Я смог получить несколько значительных пиков, и это не слишком повлияло на общий спектр. Но у меня возникла проблема с тем, о чем вас предупреждает hotpaw2, я потерял важные характеристики вместе с потерей «беспорядка», поэтому я искренне рекомендую вам послушать его. Но, если вы думаете, что с этим у вас не возникнет проблем, я думаю, савицкий-Голей может помочь.

Ответ №4:

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

Для зашумленных данных временных рядов максимальная реконструкция будет способна очень эффективно отличать истинные пики от шума (без добавления каких-либо артефактов или других модификаций для подавления шума).

Max ent работает, «угадывая» БПФ для спектра временной области, а затем выполняя IFT и сравнивая результаты с «фактическими» данными временных рядов итеративно. Конечным результатом maxent является спектр в частотной области (подобный тому, который вы показываете выше).

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