离散傅里叶原理讲解:

https://www.bilibili.com/video/av44600709

https://www.bilibili.com/video/BV1g4411a7rb/?spm_id_from=333.788.videocard.5

傅里叶技术画图应用新玩法:

https://www.bilibili.com/video/av49238862

#include "stdio.h"
#include "math.h"#define SR_NUM 8000 //设置采样率8000#define pi    3.1415926
struct complex
{float re; //real实部float im; //image虚部
};complex complexAdd(complex a, complex b) { //复数加complex rt;rt.re = a.re + b.re;rt.im = a.im + b.im;return rt;
}complex complexMult(complex a, complex b) { //复数乘complex rt;rt.re = a.re*b.re - a.im*b.im;rt.im = a.im*b.re + a.re*b.im;return rt;
}void complexSet(complex *a, short *b, int Num)//复数设置
{for (int i = 0; i < Num; i++){a[i].re = b[i];a[i].im = 0;}return;
}//离散傅里叶变换
//X[]标识变换后频域(in_out),x[]为时域采样信号(in)
void dft(complex Xf[], complex xt[], int len)
{ complex temp;for (int i = 0; i < len; i++){Xf[i].re = 0;Xf[i].im = 0;for (int n = 0; n < len; n++){temp.re = (float)cos(2 * pi*i*n/len);temp.im = -(float)sin(2 * pi*i*n/ len);Xf[i] = complexAdd(Xf[i], complexMult(xt[n], temp));}if (i >= 6000)//去除高频信号>6K{Xf[i].re = 0.0;Xf[i].im = 0.0;}int frqValue = int(2.0/SR_NUM*sqrt(Xf[i].re*Xf[i].re + Xf[i].im*Xf[i].im));//转换后的分频幅度if( frqValue>0){  //打印输出非0的幅度值printf("freq[%d] = %d  \n",i,frqValue );}}
}
//离散傅里叶逆变换
//Xin[]标识变换后频域,xOut[]为时域采样信号
void idft(complex Xin[], complex xOut[], int len) {complex temp;//int k, n;for (int k = 0; k < len; k++){xOut[k].re = 0;xOut[k].im = 0;for (int n = 0; n < len; n++){temp.re = (float)cos(2 * pi*k*n / len );temp.im = (float)sin(2 * pi*k*n / len );xOut[k] = complexAdd(xOut[k], complexMult(Xin[n], temp));}xOut[k].re /= len;xOut[k].im /= len;}
}int main() {printf("----testing fft data ,samples rate=%d -----\n",SR_NUM );complex samples[SR_NUM], XFreq[SR_NUM], xTime[SR_NUM]; //原始数据,变换后的频域数据,逆变换后的时域数据FILE *fp;FILE *fp2;short buf[SR_NUM];fp=fopen("d://fft_test.pcm", "rb"); //在d盘放一个pcm文件,用cooledit等软件制作8000采样率的PCM文件fp2 = fopen("d://fft_out.pcm", "wb"); //在d盘新建一个pcm文件if (!fp ||!fp2) {printf("PCM file is not ready! \n");getchar();return 1;}else{while (fread(buf, sizeof(short)*SR_NUM,1,fp) > 0)//末尾数据忽略{//因为每秒采样SR_NUM个数据,所以这里每次取1秒的数据complexSet(samples, buf, SR_NUM);dft(XFreq, samples, SR_NUM);idft(XFreq, xTime, SR_NUM);for (int i = 0; i < SR_NUM; i++){buf[i] = xTime[i].re;}fwrite(buf, sizeof(short)*SR_NUM,1 , fp2);}}fclose(fp);fclose(fp2);printf("-----end-----\n");getchar();return 0;
}

FFT离散傅里叶音频分解转换_C语言实现相关推荐

  1. java c语言union转换_C语言联合体(union)的使用方法及其本质-union

    转载自:https://blog.csdn.net/sizhouqun_84342712/article/details/53187106 1.联合体union的基本特性--和struct的同与不同 ...

  2. C语言字母转十进制,c语言十进制转换_C语言 字符串转换成十进制整数

    最佳答案 这道题不算难,就是筛选除了a,b,c,d,e,f和数字之外的所有字符,然后把十六进制数转换为十进制数,你等我写一下程序再发上来.追答: #include #include = "0 ...

  3. c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt

    编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...

  4. Easystructure教程_C语言源代码自动生成流程图

    目录 Easystructure教程_C语言源代码自动生成流程图 1. 简介 2. 下载 3. 安装 4. 使用 5. 其他软件推荐 5.1 Mermaid 5.2 Code2flow ** Easy ...

  5. 音频怎么转换成文字?推荐这几个转文字的方法给你

    在平时的工作中大家通常会先利用录音工具将会议内容录制下来,结束以后再根据录音来整理会议纪要,但一边听音频一边整理的操作既麻烦又费时间,还有可能会因为讲述的人语速快,而漏掉一些内容,从而导致效率不高,这 ...

  6. Matlab音频格式转换

    所需前置知识 读音频 audioread 语法:   [y,Fs] = audioread(filename);   从名为 filename 的文件中读取数据,并返回样本数据 y 以及该数据的采样率 ...

  7. Matlab 音频格式转换(wav,ogg,flac,au,aiff,aif,aifc,mp3,m4a,mp4 互转)

    欢迎转载,但请一定要给出原文链接,标注出处,支持原创! 谢谢~ https://blog.csdn.net/qq_29225913/article/details/105445028 目录 1.目标及 ...

  8. 密码学实验报告c语言程序,密码学_实验一_古典密码算法_C语言.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp实验设计 密码学_实验一_古典密码算法_C语言.doc8页 本 ...

  9. c语言中char是多少字节,c语言中char_char c = \'\\1\' 十进制是多少_c语言char

    网友求助:c语言中char_char c = \"\\1\" 十进制是多少_c语言char 问题 最佳答案 推荐答案 char一般默认是1个字节的无符号整型,范围0~255.如果是 ...

最新文章

  1. PyTorch 笔记(11)— Tensor内部存储结构(头信息区 Tensor,存储区 Storage)
  2. 多重背包问题以及二进制优化
  3. (转)Openlayers 2.X加载天地图
  4. 2018年春季软件工程教学设计(初稿)
  5. Flink on YARN(下):常见问题与排查思路
  6. 迷你世界甲龙变身机器人_迷你世界X变形金刚双形态皮肤特效,自带双血条,简直无敌...
  7. Turbo C 2.0
  8. java 定时关机_win7电脑怎么设置定时关机_win7电脑设置定时关机的详细教程-win7之家...
  9. mongoose时间自动转化为格林尼治标准时间的解决方案
  10. win10迁移C盘Administrator目录
  11. Elastic 7.9 版本发布,提供免费的 Workplace Search 和终端安全功能
  12. 求偶数c语言程序,用C语言编写一道程序计算100以内偶数的和
  13. RecyclerView滑动置顶点击置顶的实现
  14. 全国计算机二级考试报名入口河南,计算机等级考试报名入口河南(英语四级报名官网入口)...
  15. 用c语言将2048的分数存档,利用C语言实现2048小游戏的方法
  16. cmd中回退到上一级文件目录 与 定位下一级目录
  17. 深度学习之数据处理方法概述
  18. SharePoint Keyword Query Languge(KQL)语法
  19. 云服务器有哪些优势?如何租用云服务器?
  20. 云服务器1M带宽是什么意思,怎么选择服务器带宽?

热门文章

  1. 7大赚钱思维,句句灼心!
  2. python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...
  3. ADB向测试机发送短信,电话,消息,定位
  4. 建立桌面文件管理格子_简单粗暴,我的文件管理体系
  5. 基于图片生成古诗(nlp)
  6. php正则子模式贪婪,php关于正则表达式贪婪模式与非贪婪
  7. SO(3)的不可约表示
  8. TQM 6支柱7原则
  9. Eclipse运行项目报no route to host : connet
  10. 深度学习之自编码器实现——实现图像去噪