基于Matlab的滑动窗FFT算法实现

这篇具有很好参考价值的文章主要介绍了基于Matlab的滑动窗FFT算法实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

1.1 滑动窗FFT算法推导

1.2 滑动窗FFT算法实现 

1.3 结论


前言:

作为一个在研狗,开源一个工程信息学小作业,是关于滑动窗FFT算法的推导和实现的,实现借助Matlab2018a实现。


1.1 滑动窗FFT算法推导

滑动窗fft算法,matlab,算法,信号处理表示输入序列段滑动窗fft算法,matlab,算法,信号处理的N点FFT,由FFT的定义可以得到:

滑动窗fft算法,matlab,算法,信号处理

 以及:

滑动窗fft算法,matlab,算法,信号处理

  将P=n+1带入公式(2),可以将公式写成:

滑动窗fft算法,matlab,算法,信号处理

 将和式展开,和式标号加以改变,可以得到:

滑动窗fft算法,matlab,算法,信号处理

 将指数因子展开得到:

 滑动窗fft算法,matlab,算法,信号处理

注意到指数项滑动窗fft算法,matlab,算法,信号处理的周期性并用滑动窗fft算法,matlab,算法,信号处理代替和式,可以简化表达式并推出FFT的计算形式:

滑动窗fft算法,matlab,算法,信号处理  

公式(6)表明:第k+1次采样的FFT等于先前的FFT和最新样值与最早样值之差(也就是迸入窗口前沿的样值与离开后沿的样值之差)的相移和。

因此,如果知道k时输入序列的变换,就可以推导出下一序列的变换(k+1时),而不用计算另外的FFT。只需N次复数乘法和N次复数加法,就可以从滑动窗fft算法,matlab,算法,信号处理计算滑动窗fft算法,matlab,算法,信号处理。相比之下,重新计算FFT需要滑动窗fft算法,matlab,算法,信号处理次乘法运算和滑动窗fft算法,matlab,算法,信号处理次加法运算。滑动FFT的另一个优点是它不需要位反转,这与许多FFT算法不同。


1.2 滑动窗FFT算法实现 

在本代码中首先利用Matlab产生一个xx=cos(100*pi*t)+sin(60*pi*t)的原始信号并绘制其原始图像;然后对原始信号直接进行256点的FFT算法得到其频谱图并进行绘制;最后对原始信号进行256点的SFFT算法得到该算法的实现过程的gif图。实现代码如下:

clear;clc;close all 
nn=256;
sf1=256;
t=0:1/sf1:255/sf1;
%% FFT分析
xx=cos(100*pi*t)+sin(60*pi*t); %获取数据
figure(1)
plot(t,xx) %绘制原始信号
xlabel('时间'),title('原始信号')
y=fft(xx, nn);               %计算FFT
figure(2)
plot(abs(y))                 %绘图
xlim([0 255]) % 调整坐标范围
xlabel('点数'),title('FFT分析256点')
 
%% SFFT实现,生成gif图
%空矩阵的作用是作为SFFT的初值
x1=zeros(1,nn); %建立空矩阵,
y1=zeros(1,nn); %建立空矩阵
k=0:1:nn-1;     %用于计算u矩阵
u=exp(1i*2*pi*k/nn);
pic_num=1;
for t1=0:1/sf1:255/sf1
    a=cos(100*pi*t1)+sin(60*pi*t1);     %新数据输入
    x1(length(x1)+1)=a;                 %开辟一个空间将新数据加入队列尾
    b=x1(1);                            %从队列头取出一个数据
    x1(1)=[];                           %删除存放上面取出的数据空间
    for i1=1:nn                         %计算SFFT,循环次数等于N=256
       y1(i1)= u(i1)*(y1(i1)-b+x1(nn)); %计算k=0,1,2...N-1的频域值
    end
    figure(3)
    plot(k, abs(y1));                   %绘图
    xlim([0 255])                       % 调整坐标范围
xlabel('点数'),title('SFFT分析256点')
    drawnow;                            %生成gif代码,输出在此m文件目录下面
    F=getframe(gcf);
    I=frame2im(F);
    [I,map]=rgb2ind(I,256);
    if pic_num == 1       imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.1);
    else    imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.1);
    end
    pic_num = pic_num + 1;
end

生成的原始信号图如图3.1所示,生成的256点FFT频谱图如图3.2所示,生成的256点SFFT的Gif图如图3.3所示,SFFT最后生成的256点频谱图如图3.4所示,最后发现前后两种算法生成的256点频谱图一致,验证了SFFT算法的正确性。

滑动窗fft算法,matlab,算法,信号处理

 图3.1 原始信号的图

 滑动窗fft算法,matlab,算法,信号处理

 图3.2 256点FFT频谱图

 滑动窗fft算法,matlab,算法,信号处理

 图3.3 256点SFFT的Gif图 

滑动窗fft算法,matlab,算法,信号处理

 图3.4 256点SFFT频谱图

1.3 结论

通过在Matlab上的仿真,可以清晰的感受到利用SFFT进行信号频谱的分析要比直接利用FFT进行频谱分析实时性要好,只要输入数据发生改变时,FFT就需要重新进行计算,而SFFT可以由之前计算的FFT结果进行推导,实时性要好,相对于直接进行FFT计算量要少。文章来源地址https://www.toymoban.com/news/detail-714538.html

到了这里,关于基于Matlab的滑动窗FFT算法实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab实现FFT变换

    在信号处理中,快速傅里叶变换(FFT)是一种非常常见的频域分析方法。本文将介绍如何使用Matlab实现FFT变换,并通过Matlab代码演示实际输出结果。 原理 FFT是一种计算离散傅里叶变换(DFT)的快速算法。DFT将时域上的信号转换为频域上的信号,可以用以下公式表示: X k = ∑

    2024年02月04日
    浏览(34)
  • Matlab中利用FFT实现信号频谱搬移

    在fft的理论中,fft的频移特性表示为: 也就是说,要想对信号f(t)实现频域的频谱搬移,只要在时域乘以一个矩阵,即可实现频谱的搬移。常用的振幅调制和解调就是如此,频谱搬移前后对比如下: 其特点就是仅频谱搬移,不产生新的频谱分量。利用欧拉公式: e^(ix)可以

    2024年01月20日
    浏览(55)
  • 【MATLAB】全网唯一的13种信号分解+FFT傅里叶频谱变换联合算法全家桶

    有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有13种信号分解+FFT傅里叶频谱变换联合算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码(见每一算法介绍后文)~ EMD 是

    2024年02月05日
    浏览(54)
  • 《FPGA数字信号处理》基于FPGA的32点并行FFT/IFFT设计

    本人FPGA小白,只关注FPGA具体功能实现。如以下描述有误,望评论区指正!以下内容,纯手打,严禁未经过同意擅自转载,谢谢! 相比于基2算法,基4算法对本设计(32点FFT)运算的复杂度并没有显著的降低。 基2按时间抽取的FFT蝶形运算如下图所示: 可以发现输入端与输出端

    2024年04月23日
    浏览(49)
  • 【SAR雷达】基于FFT和CA-CFAR的雷达信号仿真与目标检测附matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信       无

    2024年03月19日
    浏览(51)
  • Matlab FFT变换细节(信号采样频率,FFT变换点数,频率分辨率)

    在做深度学习的故障诊断中,发现代码直接将原始信号fft之后直接将实频域信号输入网络中进行诊断,虽说效果比较不错95% 但因为输入的是双边谱且频率范围远超故障特征频率同时由于单个样本的点数只有1024点,信号的采样频率又特别高12k,导致频率分辨率极低,输入网络的序列

    2023年04月08日
    浏览(97)
  • Matlab的信号频谱分析——FFT变换

    Matlab的信号频谱分析 FFT是离散傅立叶变换的快速算法,可以将一个时域信号变换到频域。 有些信号在时域上是很难看出什么特征的。但是如果变换到频域之后,就很容易看出特征了。 这就是很多信号分析采用FFT变换的原因。 另外,FFT可以将一个信号的频谱提取出来,这在频

    2024年02月14日
    浏览(44)
  • MATLAB中FFT频谱分析使用详解

    本文对matlab中fft的使用作出详细说明,并对频谱的双边、单边幅度谱与相位谱加以说明。 FFT是DFT的快速算法,当FFT点数为2的整数次幂时,MATLAB可以使用FFT的快速算法;如果不是2的整数次幂,那么只能使用公式的算法,实质上未使用上快速算法,两者在计算时间上有差异。

    2024年04月09日
    浏览(49)
  • 基于Verilog HDL的FFT算法硬件实现(8点,三级流水线,DIT-FFT)

    关于fft的相关知识,在之前的文章中,有过介绍,这里不再具体介绍,可以参考学习。 从傅里叶级数(FS)到傅里叶变换(FT)最后到离散傅里叶变换(DFT)_小张爱学习哦的博客-CSDN博客_fs傅里叶级数 FFT原理(基2DIT-FFT)及C语言编程思路及实现_小张爱学习哦的博客-CSDN博客_c语言

    2024年02月14日
    浏览(39)
  • MATLAB——FFT(快速傅里叶变换)

    基础知识 FFT即快速傅里叶变换,利用周期性和可约性,减少了DFT的运算量。常见的有按时间抽取的基2算法(DIT-FFT)按频率抽取的基2算法(DIF-FFT)。 1.利用自带函数fft进行快速傅里叶变换 若已知序列 x = [ 4 , 3 , 2 , 6 , 7 , 8 , 9 , 0 ] x=[4,3,2,6,7,8,9,0] x = [ 4 , 3 , 2 , 6 , 7 , 8 , 9 , 0 ]

    2024年02月03日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包