Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 正弦波频率拟合

该问题基于先前的类似问题。

我有以下等式和经过调整的(一些随机数据):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 。)



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 06:55


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.