本帖最后由 wdhd 于 2016-9-21 11:14 编辑
原地板贴子中的结果不是倒数笫2个错了, 而是漏检了,
你读出地板程序中的Ind值(笫52行后加Ind=Ind),
Ind =9 25 41 58 1 74 17 33 9
这是信号在N=1024,Fs=50*128时的apfft频谱图, 对照原信号,出错的频率为Ind=1, 即等效直流份量(N=1024,Fs=50*128时的apfft频谱图中的), 也就是说, 信号中的等效直流分量也作为一个峰值被检出了,
我用日志<自动搜索峰值的 apfft/apfft 和 fft/apfft 校正程序>中的程序和另一个自动搜索峰值程序分析你的信号,都没有这个问题.对比程序是多了这二个语句.
下图a为不加去直流语句的频谱,下图b为加去直流语句的频谱.从图b可见,有一直流份量峰值.
这二个语句本耒是为了去掉直流分量不彻底遗留下的, 去掉上面二个语句以后等效直流峰值就没有了,搜索语句就将最小的那个频率成分峰值搜索出耒了.所以对原始信号作fft前不要任意作予处理, 如s1=s1-ones(size(s1)).*mean(s1) 语句在离散和截断情况下, 不一定能彻底去直流.
[img=28,30][/img]
还有一个办法是全部地板程序不改动(保留上二语句),将第37句
for i=1:9
改为 for i=1:10;
则多搜索一个峰值, 这样虽直流份量占了一个峰值, 搜索出第10个峰值即原漏检的那个
事实上,我们分析一个信号並不知它有几个峰值, 一个实用的自动搜索峰值校正程序应将大於某一阈值的峰值全部搜索出来校正,供使用者分析判断
|