2011-01-22 8 views
0

Я разрабатываю приложение для осциллографа в C# .NET. Я рисую различные виды волн (синус, квадрат и т. Д.) С помощью управления zedgraph. Я получаю значения от осциллографа и хранятся в буфере размером 1024 (байтовый массив) и должны вычислять такие параметры, как период времени, частота, время нарастания, время падения и т. Д. Во время выполнения. для этой цели мне нужно извлечь только один цикл всего сигнала. Еще одна проблема заключается в том, что значения не всегда растут или падают непрерывно средние значения хранятся в буфере, подобном этому [0,0,0,1,1,2, 3,4,5,5,6,6,6,5,5,4,3,2,1,1,0,0,0 ..........]. сигналы непрерывно поступают от машины. не уверен, что волны всегда колеблются вокруг нуля. С благодарностью С уважением Nileshрасчет частоты для сигнала в C# .net

ответ

2

Вы можете оценить частоту число a способами. Наверное, самый легкий, если у вас есть математическая библиотека, - это вычисление БПФ и принятие самой низкой частоты.

В качестве альтернативы вы можете проверить пересечения нуля (вокруг среднего значения). Чем быстрее он колеблется примерно на 0, тем выше его частота. Точно так же экстремумы рассказывают вам много о частоте (подумайте о синусоиде, чьи экстремумы и нули чередуются и равномерно распределены).

Существует также преобразование, называемое преобразованием периода, но я не помню его слишком много. Я видел это в книге о музыке для поиска темпа песни.

http://www.cs.berkeley.edu/~vazirani/s09quantum/notes/lecture4.pdf

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

+0

«вычислить FFT и принять самую низкую частоту» ничего не значит. Как вы определяете низкую частоту? –

+0

А? Самая низкая частота сигнала с дискретным дискретным спектром хорошо определена и легко получается. – AbstractDissonance

0

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

alt text

Для графа 1, первая впадина 2, первый гребень 12. Выясните время, принимая между этими точками, и у вас есть половина длины волны.

Для графа два, тот же принцип применяется, можно вычислить длину волны (и, следовательно, период) для каждого участка графа

Смежные вопросы