我是靠谱客的博主 爱笑柜子,最近开发中收集的这篇文章主要介绍时域信号补零是否能提高FFT分辨率?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在设计中,当采样率为192KHZ时。需要对被采样信号频率分辨率达到1HZ,按照FFT运算后,采样点数需要达到192K个才能有1HZ的精度,但FFT运算的数据量最好的是2的次方。例外,FFT计算时会有数据上限要求、以及数据量过大会增加计算时间,不利于系统设计。那么如果采取补零、以及过采样的方法是否可以提高系统分辨率呢?下面采用MATLAB进行补零效果的验证,后期再进行FPGA实际采样。

fs=48000;        %采样率
n1=0:1:47999;     %1秒钟采集48000个点
y1=sin(2*pi*5760*n1/fs);    %生成5760HZ信号
s1=sin(2*pi*5759*n1/fs);    %生成5759HZ信号
figure(1);              
subplot(4,1,1);
plot(n1,y1);
title('原始时域信号');
subplot(4,1,2);
plot(abs(fft(y1)));
title('原始频域信号');

n2=0:1:1499;                 %只取1500个有效数据
y2=sin(2*pi*5760*n2/fs);
s2=sin(2*pi*5759*n2/fs);    
subplot(4,1,3);
plot(n2,y2);
title('截取时域信号');

subplot(4,1,4);
plot(abs(fft(y2)));
title('截取频域信号');

n3=0:1:46499;               %补46500个零
y3=n3-n3;
figure(2);
subplot(4,1,1);
plot(n3,y3);
title('补零时域信号');

y4=[y2,y3];
s4=[s2,y3];
subplot(4,1,2);
plot(n1,y4);
title('截取后补零时域信号');

subplot(4,1,3);
plot(abs(fft(y4))); 
title('截取后补零频域信号');

subplot(4,1,4);
plot(abs(fft(s4))); 


 

 

程序所做的功能主要为对5760分别做48K有效数据、1500有效数据+46500个零FFT运算。以及与5759HZ的1500有效数据+46500个零FFT,作对比。两组实验表明,补零操作会增加FFT的频率分辨率。例外值得一提的是减少有效数据的个数为n,再将数量增加到48K、若被采样信号的频率超过了n表示的范围f_max=fs/N*(n-1)=48k/48k*(n-1)时,仍然能测出准确频率。至于书籍上所说不能提高分标率,个人观点是补零后的信号并不能真是反应原始信号,这个时候再谈分辨率就没有意义了。

最后

以上就是爱笑柜子为你收集整理的时域信号补零是否能提高FFT分辨率?的全部内容,希望文章能够帮你解决时域信号补零是否能提高FFT分辨率?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部