首页 > 编程语言 >手撕fft算法--fft原理和源码解析

手撕fft算法--fft原理和源码解析

时间:2022-12-30 11:36:09浏览次数:35  
标签:f1 P1 20 个点 -- fft 源码 pi

一 前言   在音频信号处理中,fft变换是一个无法绕过过去的存在。借着一次算法出来的机会,把fft熟悉一下不为过啊。   二 问题   这里,其实是由一个问题驱动的,那就是:怎么通过fft的变化来得到某个频点的幅度值呢? 这里找到了一个简单明了的解释: 第N个点对应的频率=采样频率/FFT点数*N 如采样频率为100HZ,FFT点数为100点, 20HZ就是第20个点,30HZ就是第30个点, 第20个点对应幅值=第20个点实部²+第20个点虚部²   三 matlab仿真   其实,matlab里面可以非常直观的看出fft的效果,这个建议有条件的同学去matlab官网看一下,这里直接上一个源码例子了。

clear;clc
Fs = 1000;            % 采样频率
T = 1/Fs;             % 采样周期
L = 1000;             % 信号长度   由此知,频率分辨率为 1hz
t = (0:L-1)*T;        % 时间相量
S = 0.7*sin(2*pi*50*t+pi/4) + sin(2*pi*150*t-pi/2);   % 原始函数
Y = fft(S);

P2 = abs(Y/L);  % 每个量除以数列长度 L
P1 = P2(1:L/2+1);  % 取交流部分
P1(2:end-1) = 2*P1(2:end-1); % 交流部分模值乘以2
f = Fs*(0:(L/2))/L;
plot(f,P1)
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

f1=Y(1:L/2+1);
f1=atan2(imag(f1),real(f1))+pi/2;
%需要将fft的结果加上pi/2才是真实的值,实验出来的,原理未明。
theta = [f1(51) f1(151)]
%结果为弧度制

-------------------------计算结果---------------------------------------
theta =

    0.7854    4.7124(减去2pi,则为-pi/2)
  四 C语言代码     其实,关于fft的c代码挺多的,但是能商业用途的的确不多。大多数是学术的,根本没办法用在商业用途。笔者这点花费了一些时间,算是彻底弄成可以在产品上用了。 由于设计到公司产品,就没办法贴c代码了。

标签:f1,P1,20,个点,--,fft,源码,pi
From: https://www.cnblogs.com/dylancao/p/17014443.html

相关文章

  • 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试
    一、安装Nginx和fastdfs-nginx-module安装Nginx请看:​​从零开始学Java-CentOS下安装Nginx​​,其实我只想放这一句话。但想想我还是一步一步写详细吧。1.下载Ngi......
  • 操作系统实战45讲00035
    你好,我是LMOS。上一节课中,我们已经设计好了文件系统数据结构,相当于建好了仓库的基本结构。今天,我将和你一起探索仓库的划分,即什么地方存放仓库的管理信息,什么地方存放进......
  • Nginx页面不能正常访问排除方法
    nginx页面不能访问 ​nginx页面不能访问​​​检查服务端服务是否启动成功​​​​在服务端使用wget和curl测试下返回的是否正常​​​​浏览器wget或者curl等软件访问不了......
  • 操作系统实战45讲00036
    你好,我是LMOS。我们在上一节课中,已经建立了仓库,并对仓库进行了划分,就是文件系统的格式化。有了仓库就需要往里面存取东西,对于我们的仓库来说,就是存取应用程序的文件。所......
  • Double Machine Learning(DML) 原理及其应用
    DoubleMachineLearning(DML)原理及其应用​​1.为什么需要DML?​​​​2.DML原理​​​​2.1符号定义​​​​2.2DML训练过程​​​​2.3为什么残差正交化可得到无偏......
  • 5-2 项目创建前准备阶段
    1项目创建前准备阶段exec(){try{//1.准备阶段this.prepare()//2.下载模板//3.安装模板}catch(e){log.error(e.message)}}......
  • java学习阶段
    第一阶段:JAVA企业级开发之WEB篇WEB篇HTML5+CSS简介知识点:自定义动画、选择器高级应用、响应式网站开发、行业命名规范、域名注册-搭建个人网站让学员熟练掌握css、js、JQuer......
  • 引图像分割技术!轻松换背景2.0体验
    最近,在刚推出的《轻松换背景》2.0版本中,软件的内外轮廓抠图功能在引入图像分割技术的基础上推出了优化内外轮廓功能。软件名称轻松换背景软件版本2.0正式版软件作者​​......
  • AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?
    丰富组件,满足千人千面!AIRIOT物联网低代码平台的可视化组态引擎,具备丰富的可视化看板及组件,满足各类工艺流程图、数据可视化需求。支持三维编辑、图形绘制、图表设计等......
  • 嵌入式:ARM汇编语言程序设计基础教程
    汇编语言程序设计的步骤①合理地分配存储器资源,将前述的目标系统‘数据结构模型’表示到各存储器单元。②CPU寄存器数量有限,在程序中,大多数操作都要使用寄存器;并且有的操......