计算c#.net中信号的频率

时间:2011-01-22 06:11:22

标签: c# math fft frequency wave

我正在开发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 ..........]。信号不断从机器接收。 不确定波浪总是在零附近振荡。 谢谢 问候 尼勒什

2 个答案:

答案 0 :(得分:2)

您可以通过多种方式估算频率。如果你有一个数学库,最简单的可能是计算FFT并采用最低频率。

或者,您可以检查过零点(在平均值附近)。它振荡的速度越快,频率就越高。类似地,极值告诉你很多关于频率的事情(想想一个正极和零点交替并均匀分布的正弦曲线)。

还有一种称为周期变换的变换,但我不记得太多了。我在一本关于音乐的书中看到了它,因为它找到了一首歌的节奏。

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

另一种方法可能是使用自动关联,当它很大时,意味着该功能与自身“同步”(假设它不会将形状改变为快速)。并且应该很容易计算这些最大值之间的距离。

答案 1 :(得分:0)

您可以找出波峰和波谷之间的时间段,这将为您提供特定波浪波长的一半。

alt text

对于图1,第一个槽是2,第一个波峰是12.找出这些点之间的时间,你有一半的波长。

对于图表2,同样的原则适用,您可以计算图表每个部分的波长(以及周期)