为了实现高精度的FFT分析,抑制频谱泄露,并准确测量基波频率(1kHz-100kHz)及其1-5次谐波(最高500kHz),采样点数为4096,采用动态调整采样率确保整周期采样。以下是优化方案:
核心原理
通过动态设置采样率
f
s
f
s
,确保4096个采样点内包含基波频率
f
0
f
0
的整数个周期(M),使基波和谐波能量集中在单个FFT bin上,消除频谱泄露,无需加窗。
动态采样率计算
对每个基波频率
f
0
f
0
:
计算最小采样率
f
s
,
min
f
s,min
:
f
s
,
min
=
max
(
1.25
MHz
,
12.5
×
f
0
)
f
s,min
=max(1.25MHz,12.5×f
0
)
1.25
MHz
1.25MHz:满足奈奎斯特准则(最高谐波500kHz的2.5倍)。
12.5
×
f
0
12.5×f
0
:确保采样率 > 5次谐波频率的2.5倍(抗混叠)。
计算整数周期数
M
M:
M
=
⌊
4096
×
f
0
f
s
,
min
⌋
M=⌊
f
s,min
4096×f
0
⌋
M
≥
1
M≥1(实际计算中
M
M 最小为3,无风险)。
确定实际采样率
f
s
f
s
:
f
s
=
4096
×
f
0
M
f
s
=
M
4096×f
0
保证
f
s
≥
f
s
,
min
f
s
≥f
s,min
且采样点数为整数周期。
工作流程
粗测(估计 ( f_0 \)):
用固定采样率
f
s
1
=
2.5
MHz
f
s1
=2.5MHz 采集4096点。
执行FFT,在频谱中寻找最大幅值对应的频率作为基波估计值
f
0
,
est
f
0,est
。
Bin 索引
k
max
=
arg
max
k
∣
X
[
k
]
∣
(
k
∈
[
1
,
2048
]
)
Bin 索引 k
max
=arg
k
max
∣X[k]∣(k∈[1,2048])
f
0
,
est
=
k
max
×
2.5
MHz
4096
f
0,est
=k
max
×
4096
2.5MHz
精测(动态采样率):
用
f
0
,
est
f
0,est
计算
M
M 和
f
s
f
s
:
f
s
=
4096
×
f
0
,
est
M
,
M
=
⌊
4096
×
f
0
,
est
max
(
1.25
e
6
,
12.5
×
f
0
,
est
)
⌋
f
s
=
M
4096×f
0,est
,M=⌊
max(1.25e6,12.5×f
0,est
)
4096×f
0,est
⌋
以
f
s
f
s
采样4096点。
执行FFT,基波应位于Bin
M
M(频率
f
0
=
M
×
f
s
4096
f
0
=M×
4096
f
s
),谐波位于
n
×
M
n×M(
n
=
2
,
3
,
4
,
5
n=2,3,4,5)。
插值修正(可选):
若
f
0
,
est
f
0,est
有误差,基波可能不在Bin
M
M 中心。在Bin
M
M 附近
[
M
−
2
,
M
+
2
]
[M−2,M+2] 内:
找到最大幅值Bin
k
0
k
0
。
用三点幅值插值计算精确频率偏移
δ
δ:
δ
=
∣
X
[
k
0
+
1
]
∣
−
∣
X
[
k
0
−
1
]
∣
∣
X
[
k
0
−
1
]
∣
+
∣
X
[
k
0
]
∣
+
∣
X
[
k
0
+
1
]
∣
δ=
∣X[k
0
−1]∣+∣X[k
0
]∣+∣X[k
0
+1]∣
∣X[k
0
+1]∣−∣X[k
0
−1]∣
真实基波频率:
f
0
,
true
=
(
k
0
+
δ
)
×
f
s
4096
f
0,true
=(k
0
+δ)×
4096
f
s
谐波频率:
f
n
=
n
×
f
0
,
true
f
n
=n×f
0,true
(
n
=
2
,
3
,
4
,
5
n=2,3,4,5)。
关键优势
频谱泄露抑制:
动态
f
s
f
s
确保整周期采样,基波和谐波能量集中于单一Bin,无旁瓣。
抗混叠保障:
f
s
≥
1.25
MHz
f
s
≥1.25MHz 避免500kHz谐波混叠。
精度最大化:
粗测提供初始估计,精测消除泄露,插值进一步修正误差。
计算效率:
仅需两次FFT(粗测+精测),实时性好。
实现注意事项
定时器配置:使用可编程定时器(如STM32的TIM)动态调整ADC触发频率。
ADC性能:确保ADC支持
f
s
≥
1.25
MHz
f
s
≥1.25MHz(如STM32H7的ADC可达3.6MHz)。
信号稳定性:适用于稳态信号(频率变化慢于测量周期)。
抗噪处理:在FFT前可加均值滤波,但避免窗口函数。
示例计算
设粗测得
f
0
,
est
=
50
kHz
f
0,est
=50kHz:
f
s
,
min
=
max
(
1.25
e
6
,
12.5
×
50
e
3
)
=
max
(
1.25
e
6
,
625
e
3
)
=
1.25
e
6
f
s,min
=max(1.25e6,12.5×50e3)=max(1.25e6,625e3)=1.25e6
M
=
⌊
4096
×
50
e
3
1.25
e
6
⌋
=
⌊
163.84
⌋
=
163
M=⌊
1.25e6
4096×50e3
⌋=⌊163.84⌋=163
f
s
=
4096
×
50
e
3
163
≈
1.256
MHz
f
s
=
163
4096×50e3
≈1.256MHz
精测后,基波位于Bin 163,谐波位于Bins 326、489、652、815。
此方案在整周期采样和动态速率调整下,FFT频率分辨率达最高精度,显著优于固定采样率或加窗方法。
我的最高采样率不要超过2M 然后根据你上面生成的方案给我生成完整代码
最新发布