Математический анализ звукового образца (как массив чисел)

Столкнулся с той же проблемой в устройствах MI и выяснил проблему, выполнив следующие шаги:

1) Перейдите к настройке

2) Нажмите «Дополнительные настройки»

3) Нажмите «Параметры разработчика»

4) Нажмите переключатель «Установить через USB», чтобы включить его

, и проблема будет решена.

11
задан Joel Coehoorn 18 April 2012 в 18:49
поделиться

7 ответов

FFT является, вероятно, лучшим ответом, но если Вы действительно хотите сделать это своим методом, попробуйте это:

Для нормализации сначала сделайте гистограмму для подсчета сколько случаев каждого значения от 0 до 255. Затем выведите X проценты значений от каждого конца с чем-то как:

for (i=lower=0;i< N*(X/100); lower++)
  i+=count[lower];
//repeat in other direction for upper

Теперь нормализуйте с

A[i] = 255*(A[i]-lower)/(upper-lower)-128

Выбросьте результаты вне-128.. 127 диапазонов.

Теперь можно считать нулевые пересечения. Для проверки Вас не дурачит шум, Вы могли бы хотеть отслеживать наклон по последним нескольким точкам и только считать пересечения, когда средний наклон идет правильным путем.

7
ответ дан 3 December 2019 в 06:49
поделиться

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

Между прочим, очень похожие проблемы спросили здесь, прежде - Вы могли искать те ответы также.

5
ответ дан 3 December 2019 в 06:49
поделиться

Используйте преобразование Фурье, это - намного больше шума, нечувствительного, чем подсчет нулевых пересечений

Править: @WaveyDavey

Я нашел, что библиотека F# сделала FFT: Отсюда

Как оказалось, лучшая бесплатная реализация, которую я нашел для пользователей F# до сих пор, является все еще фантастической библиотекой FFTW. Их сайт имеет предварительно скомпилированный Windows DLL. Я записал минимальную привязку, которая предоставляет ориентированный на многопотоковое исполнение доступ к FFTW от F#, и с гуру и с простыми интерфейсами. Производительность превосходна, 32-разрядный Windows XP Pro только до 35% медленнее, чем 64-разрядный Linux.

Теперь я уверен, что можно назвать lib F# из VB.net, C# и т.д., который должен быть в их документах

3
ответ дан 3 December 2019 в 06:49
поделиться

Если я понял хорошо из Вашего описания, что Вы имеете, сигнал, который является комбинацией синуса плюс константа плюс некоторые случайные незначительные сбои. Скажите, как

x[n] = A*sin(f*n + phi) + B + N[n]

где N [n] является шумом "незначительного сбоя", Вы хотите избавиться от.

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

y[n] = median3(x[n])

Медиана вычисляется так: Возьмите образцы x, который Вы хотите отфильтровать (x [n-1], x [n], x [n+1]), отсортировать их, и Ваш вывод является средним.

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

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

2
ответ дан 3 December 2019 в 06:49
поделиться

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

Используя Fityk, можно загрузить данные и соответствовать к a*sin(b*x-c) где 2*pi/b даст Вам частоту после установки.

Fityk может использоваться от gui, от командной строки для сценариев и имеет API C++, так мог быть включен в Ваши программы непосредственно.

1
ответ дан 3 December 2019 в 06:49
поделиться

Я погуглил для "основного fft". FFT Visual Basic Ваши крики вопроса, FFT, но быть осторожным, с помощью FFT, не понимая даже немного о DSP может привести результаты, которые Вы не понимаете или не знать, куда они происходят из.

0
ответ дан 3 December 2019 в 06:49
поделиться

получите Частотный анализатор по http://www.relisoft.com/Freeware/index.htm и выполните его и посмотрите на код.

0
ответ дан 3 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

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