我有一台产生大致正弦数据的仪器,但频率随时间略有变化。我正在使用MATLAB来构建一些代码来描述时间依赖性,但我遇到了一些问题。
我正在生成我的数据的理想化近似值, I(t)= sin(2 pi f(t)t),其中 f(t)变量但是目前测试为线性或二次。然后我实现滑动汉明窗口(宽度 w )以生成一组对应于数据点的傅里叶变换 F [I(t),t'] 在 I(t)中,每个 F [I(t),t'] 与高斯拟合,以更精确地确定峰位置。
我目前的MATLAB代码是:
Sub copyFromRecordset()
Set conn = New ADODB.Connection
Set wipData = New ADODB.Recordset
conn.ConnectionString = conStr
conn.Open
With wipData
.ActiveConnection = conn
.Source = "WipBin"
.LockType = adLockReadOnly
.CursorType = adOpenForwardOnly
.Open
End With
Worksheets.Add
Range("A2").copyFromRecordset wipData
wipData.Close
conn.Close
End Sub
我的思维过程是每个 F [I(t),t'] 中的峰值位置应该是窗口中心频率的近似值,用于生产它。但是,实验似乎并非如此。
我过去使用离散傅立叶分析来解决工程问题取得了一些成功,但我只完成了连续傅立叶变换的课程 - 所以可能会有一些明显缺失的东西。另外,这是我在StackExchange上的第一个问题,所以欢迎建设性的批评。
答案 0 :(得分:0)
事实证明,我的问题是对正弦函数数学的理解不足。我假设波的频率等于时间变量乘以的任何值(例如 sin(ft)中的 f )。然而,事实证明,频率实际上是由正弦函数的整个参数的导数定义的 - 相位的变化率。
对于常量 f ,两个定义相等,因为 d(ft)/ dt = f 。但是,比方说, f(t)= sin(t):
d(f(t)t)/ dt = d(sin(t)t)/ dt = t cos(t)+ sin(t)
频率随f(t)的变化而变化。将函数定义更改为以下问题解决了我的问题:
f = @(t) 100-30*(t-0.5).^2; %Frequency function (Hz)
G = cumsum(f(t))/fs; %Phase function (Hz)
I = sin(2*pi*G); %Sampling function