Проанализируйте аудио с помощью Быстрого преобразования Фурье

Что касается запроса агрегирования, который вы опубликовали, я бы удостоверился, что у вас есть индекс на dt:

db.temperature.ensureIndex({'dt': 1 })

. Это будет гарантировать, что сортировка $ в начале агрегатный трубопровод максимально эффективен.

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

Однако, поскольку вы добавляете все больше и больше данных, проблема заключается в том, что запрос агрегации будет по-прежнему касаться всех документов. Это будет становиться все более дорогостоящим, поскольку вы масштабируетесь до миллионов или более документов. Одним из подходов для этого случая было бы добавить $ limit сразу после сортировки $, чтобы ограничить общее количество рассматриваемых документов. Это немного взломанно и неточно, но это поможет ограничить общее количество документов, к которым необходимо получить доступ.

107
задан A. Levy 1 September 2009 в 23:44
поделиться

2 ответа

Массив, который Вы показываете, является коэффициентами преобразования Фурье звукового сигнала. Эти коэффициенты могут использоваться для получения полосы частот аудио. FFT определяется для оцененных функций ввода комплекса, таким образом, коэффициенты, которые Вы вынимаете, будут мнимыми числами даже при том, что Ваш вход является всеми действительными значениями. Для получения количества энергии в каждой частоте необходимо вычислить величину коэффициента FFT для каждой частоты. Это не просто реальный компонент коэффициента, необходимо вычислить квадратный корень суммы квадрата ее реальных и мнимых компонентов. Таким образом, если Ваш коэффициент + b*j, то его величина является sqrt (a^2 + b^2).

, Как только Вы вычислили величину каждого коэффициента FFT, необходимо выяснить, какой звуковой частоте каждый коэффициент FFT принадлежит. N указывает, что FFT даст Вам полосу частот Вашего сигнала на равномерно распределенных частотах N, запускающихся в 0. Поскольку Ваша частота дискретизации является 44 100 образцами / секунда. и число очков в Вашем FFT 256, Ваше разнесение по частоте 44100 / 256 = 172 Гц (приблизительно)

, первый коэффициент в Вашем массиве будет 0 коэффициентами частоты. Это - в основном уровень средней мощности для всех частот. Остальная часть Ваших коэффициентов подсчитает от 0 в кратных числах 172 Гц, пока Вы не доберетесь до 128. В FFT только можно измерить частоты до половины точек выборки. Прочитайте эти ссылки на Теорема отсчетов Nyquist-шеннона Частоты Найквиста и , если Вы - обжора для наказания и должны знать, почему, но основной результат состоит в том, что Ваши нижние частоты будут дублируемыми или , исказил в блоках верхней частоты. Таким образом, частоты запустятся от 0, увеличение на 172 Гц для каждого коэффициента до коэффициента N/2, затем уменьшатся на 172 Гц до N - 1 коэффициент.

, Который должен быть достаточной информацией для получения Вас. Если Вы хотели бы намного больше доступного введения в FFTs, чем дано на Википедию, Вы могли попробовать Обработка цифровых сигналов Понимания: 2-й Ed. . Это было очень полезно для меня.

Так, чтобы был тем, что представляют те числа. Преобразование в процент высоты могло быть сделано путем масштабирования каждой величины частотного компонента суммой всех величин компонента. Хотя, который только дал бы Вам представление распределения частотности а не фактическую мощность для каждой частоты. Вы могли попытаться масштабироваться максимальной величиной, возможной для частотного компонента, но я не уверен, что это отобразилось бы очень хорошо. Самый быстрый способ найти осуществимый масштабный коэффициент состоял бы в том, чтобы экспериментировать на громких и мягких звуковых сигналах найти правильную установку.

Наконец, необходимо насчитывать эти два канала вместе, если Вы хотите показать полосу частот всего звукового сигнала в целом. Вы смешиваете аудио стерео в моно аудио и показываете объединенные частоты. Если Вы захотите два отдельных дисплея для правых и левых частот, то необходимо будет выполнить преобразование Фурье на каждом канале отдельно.

204
ответ дан Scott Stensland 24 November 2019 в 03:39
поделиться

то, что Вы имеете, является образцом, длина которого вовремя является 256/44100 = 0,00580499 секунды. Это означает, что Ваша разрешающая способность по частоте равняется 1 / 0.00580499 = 172 Гц. 256 значений, которые Вы получаете из Python, соответствуют частотам, в основном, от 86 Гц до 255*172+86 Гц = 43 946 Гц. Числа, которые Вы вынимаете, являются комплексными числами (следовательно "j" в конце каждого второго числа).

ОТРЕДАКТИРОВАННЫЙ: ЗАФИКСИРОВАННАЯ НЕПРАВИЛЬНАЯ ИНФОРМАЦИЯ

необходимо преобразовать комплексные числа в амплитуду путем вычисления sqrt (я <глоток> 2 + j <глоток> 2 ), где я и j - действительные и мнимые части, resp.

, Если Вы хотите иметь 32 панели, Вы должны насколько я понимаю, берут среднее число четырех последовательных амплитуд, добираясь 256 / 4 = 32 панели, как Вы хотите.

10
ответ дан SiHa 24 November 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: