Столкнулся с той же проблемой в устройствах MI и выяснил проблему, выполнив следующие шаги:
1) Перейдите к настройке
2) Нажмите «Дополнительные настройки»
3) Нажмите «Параметры разработчика»
4) Нажмите переключатель «Установить через USB», чтобы включить его
, и проблема будет решена.
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 диапазонов.
Теперь можно считать нулевые пересечения. Для проверки Вас не дурачит шум, Вы могли бы хотеть отслеживать наклон по последним нескольким точкам и только считать пересечения, когда средний наклон идет правильным путем.
Стандартный метод приняться за решение этой проблемы состоит в том, чтобы рассмотреть один блок данных, надо надеяться, по крайней мере дважды фактическая частота (берущий больше данных не плохо, таким образом, хорошо переоценить немного), затем возьмите FFT и угадайте, что частота соответствует наибольшему числу в получающемся спектре FFT.
Между прочим, очень похожие проблемы спросили здесь, прежде - Вы могли искать те ответы также.
Используйте преобразование Фурье, это - намного больше шума, нечувствительного, чем подсчет нулевых пересечений
Править: @WaveyDavey
Я нашел, что библиотека F# сделала FFT: Отсюда
Как оказалось, лучшая бесплатная реализация, которую я нашел для пользователей F# до сих пор, является все еще фантастической библиотекой FFTW. Их сайт имеет предварительно скомпилированный Windows DLL. Я записал минимальную привязку, которая предоставляет ориентированный на многопотоковое исполнение доступ к FFTW от F#, и с гуру и с простыми интерфейсами. Производительность превосходна, 32-разрядный Windows XP Pro только до 35% медленнее, чем 64-разрядный Linux.
Теперь я уверен, что можно назвать lib F# из VB.net, C# и т.д., который должен быть в их документах
Если я понял хорошо из Вашего описания, что Вы имеете, сигнал, который является комбинацией синуса плюс константа плюс некоторые случайные незначительные сбои. Скажите, как
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) периода.
Хотя я пошел бы с большинством и сказал бы, что походит на то, что Вы хотите, fft решение (алгоритм бпф довольно быстр), если fft не является ответом по любой причине, можно хотеть попытаться соответствовать синусоиде к данным с помощью подходящей программы и прочитывая подогнанную частоту.
Используя Fityk, можно загрузить данные и соответствовать к a*sin(b*x-c)
где 2*pi/b
даст Вам частоту после установки.
Fityk может использоваться от gui, от командной строки для сценариев и имеет API C++, так мог быть включен в Ваши программы непосредственно.
Я погуглил для "основного fft". FFT Visual Basic Ваши крики вопроса, FFT, но быть осторожным, с помощью FFT, не понимая даже немного о DSP может привести результаты, которые Вы не понимаете или не знать, куда они происходят из.
получите Частотный анализатор по http://www.relisoft.com/Freeware/index.htm и выполните его и посмотрите на код.