Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
该问题基于先前的类似问题。
我有以下等式和经过调整的(一些随机数据):0.44 * sin(N * 2 * PI / 30) 我正在尝试使用FFT从生成的数据中获取频率。但是频率最终接近但不等于频率(这使波比预期的大一点) FFT的最大频率为7hz,但是预期的频率为(30 / 2PI)4.77hz。 我已经包括了FFT和绘制值的图表。 ![]() 我使用的代码是: [sampleFFTValues sFreq] = positiveFFT(sampledata, 1); sampleFFTValues = abs(sampleFFTValues); [v sFFTV]= max(sampleFFTValues) 正FFT可以在这里找到 。基本上,它使FFT图居中并切断负信号。 我的问题是,如何才能使FFT更加精确,而不必仅针对频率求最小二乘? 回答: 我认为FFT对于(准)周期信号的精细分辨率频率测量不是很好-见下文。 每个离散FFT都在非整数bin频率上扩展(即在与特定FFT的频率步长不完全对应的任何频率上);这些“中间”频率将在最接近的整数档周围涂抹/散布。这种扩展的形状(“扩展功能”)取决于用于FFT的窗口功能。这种扩展功能(用于简化和概括事物)要么非常狭窄但非常参差不齐(非常高的峰/非常低的山谷),或者更宽泛但不那么参差不齐。从理论上讲,您可以对正弦波进行非常精细的频率扫描,并为每个正弦波计算FFT,然后可以通过保存所有FFT的输出以及产生该输出的频率来“校准”函数的形状和行为,然后将要测量的信号的FFT输出与先前保存的结果进行比较,然后找到“最近”的频率,从而找到更精确的频率。 很大的努力。 但是,如果仅需要测量单个信号的频率,则不要这样做。 而是尝试测量波长。这可以很简单,例如测量零交叉点之间的距离(可能需要多个周期才能获得更高的精度-哎呀,如果有那么多的话就测量1000个周期),然后将采样率除以该频率即可得出频率。更简单,更快,更精确。 例如:仅使用最粗略的方法测量一个周期的长度,即可获得48000 Hz的采样率,4.77 Hz的信号,分辨率约为0.0005 Hz。 (如果使用n个周期,则频率分辨率也将乘以n 。) 更多&回答... |
![]() |
![]() |