程序设计五:音频的FFT计算

完整工程文件:

链接:https://pan.baidu.com/s/1dcoTGhIeDxsRz-RUr2Paxw
提取码:jy48

一:需求分析

通过使用快速傅立叶变换来增加语音谐波的幅度,从而提高语音质量:将时域信号转换为频域,然后处理频谱,然后将其转换回时域。我们的目的在于增加振幅,改善语音质量,确保音频没有削波或失真。将产生的时域信号另存为WAV(16位)并将其包括在提交中。指定增加谐波幅度的量以及声音的变化方式。

wavtxtfft -i yyy.txt -o fft.txt

yyy.txt可以是一行一个数的格式。

也可以是:一行,空格分隔的多个数。

1 2 3 4 5 6

fft.txt格式:

1+i3
3+i-4
...

1+i3    3+i-4  。。。

yyy.txt还可以是分帧的输出格式

则FFT输出格式对应于yyy.txt的分帧格式。(文件存矩阵)

二:参考知识

1.本地.txt信息

BAC009S0003W0121.txt 声道数1 采样率16000 量化位数2的BAC009S0003W0121.wav的采样值
frame01.txt BAC009S0003W0121.wav进行帧长200 帧移100的分帧信息

2.fft后结果

fft.txt frame01.txt分帧所产生的FFT数据
fft_BAC009S0003W0121.txt BAC009S0003W0121.txt没有分帧产生的FFT数据

三:python代码

holiday05.py
import numpy as np
import sys
import getoptdef main(argv):try:#opts, args = getopt.getopt(argv, "-h-i:-f:-o:", ["help", "input=", "framelength", "overlap"])opts, args = getopt.getopt(argv, "-h-i:-o:", ["help", "input=", "output="])except getopt.GetoptError:print('将读取到的采样点,包括分帧后的数据进行快速傅里叶变换')print('python holiday05.py -i frame01.txt -o fft.txt')sys.exit(2)# 处理 返回值options是以元组为元素的列表。for opt, arg in opts:if opt in ("-h", "--help"):print("音频的FFT")print('将读取到的采样点,包括分帧后的数据进行快速傅里叶变换')print('python holiday05.py -i frame01.txt -o fft.txt')sys.exit()elif opt in ("-i", "--input"):input = argelif opt in ("-o", "--output"):output = argwave_data = np.loadtxt(input, dtype=np.float32)# signal = wave_data / np.max(wave_data)   # 归一化,标准化# fft_signal = np.fft.fft(signal)fft_signal = np.fft.fft(wave_data)#fft_data = fft(wave_data)fft_signal = fft_signal.T  # 转置是为了下面打印与fft的结果一致length = len(fft_signal)fft_len = len(fft_signal.T)file = open(output, 'w')# np.savetxt(fft_signal, fft_signal, fmt='%s', delimiter=' ') # 写入train_output.txt(此处是一股脑的全写进去,并没有做任何的分行处理)c1=fft_signal.ndim#判断数据是一维还是二维#print(c1)if c1==2:for i in range(fft_len):for j in range(length):# s = str(bins[i,0]).replace('[',").replace('[',")+'\t'+str(data[i]).replace('[',").replace('[',")#去除[],这两行按数据不同,可以选择# s = str(data[i, 0]).replace('[', ").replace('[',")s = str(fft_signal[j, i]).replace('[', ").replace(']',")s = s.replace('(', '').replace(')', '') + ' '  # 去除小括号,每个数据加空格s = s.replace("'", ").replace(',',")file.write(s)file.write('\n')  # 每行读取完以后换行file.close()else:np.savetxt(output,fft_signal )#, fmt='%s', delimiter=' 'if __name__ == "__main__":# sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。main(sys.argv[1:])#python holiday05.py -i frame01.txt -o fft.txt
#python holiday05.py -i BAC009S0003W0121.txt -o fft_BAC009S0003W0121.txt
#python holiday05.py -i BAC009S0003W0121.txt -o fft02_BAC009S0003W0121.txt

四:实现结果

1.请求帮助

python holiday05.py -h

2.分帧数据FFT

  • -i 输入采样值点的文件(分帧数据)
  • -o 保存的文件
python holiday05.py -i frame01.txt -o fft.txt

3.无分帧数据的FFT

  • -i 输入采样值点的文件
  • -o 保存的文件
python holiday05.py -i BAC009S0003W0121.txt -o fft_BAC009S0003W0121.txt

五:结果显示

1.fft.txt

frame01.txt分帧所产生的FFT数据

2.fft_BAC009S0003W0121.txt

BAC009S0003W0121.txt没有分帧产生的FFT数据

音频处理五:(音频的FFT计算)相关推荐

  1. 【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )

    文章目录 I . FFMPEG 播放视频流程 II . FFMPEG 音频重采样流程 III . FFMPEG 音频重采样 IV . FFMPEG 初始化音频重采样上下文 SwrContext V . ...

  2. 音频特征于音频信号提取总结

    这里写目录标题 1 语音的产生简介 2 声音特性​ 3. 声音的种类 计算机听觉的应用 4. 什么是音频特征 5 音频特征的类别 5.1 可以从以下几个角度区分 5.2. 常见音频特征举例 6. 音频 ...

  3. 【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )

    文章目录 一.Oboe 输出测试参数面板 二.Oboe 输出测试参数 API 及 设备选择 三.Oboe 输出测试参数 音频参数 四.Oboe 输出测试参数 播放偏好 五.Oboe 输出测试参数 ( ...

  4. android下音频采集功能,音频采集:Android基于AudioRecord的实现

    前言 这篇文章简单详情下手机端Android系统下利使用AudioRecord进行音频采集方法. 开始前先提供一份源码 AudioRecordLib . AudioRecord采集的核心实现在于 Au ...

  5. android音频编辑之音频裁剪的示例代码

    音频编辑项目的整体结构 音频裁剪方法的流程实现 获取音频文件相关信息 计算裁剪时间点对应文件中数据的位置 写入wav文件头信息 写入wav文件裁剪部分的音频数据 下面是音频裁剪效果图: 音频编辑项目的 ...

  6. android音频编辑之音频裁剪

    转载请标明出处: http://blog.csdn.net/hesong1120/article/details/79077013 本文出自:hesong的专栏 前言 本篇开始讲解音频编辑的具体操作, ...

  7. 什么是音频转换?音频怎么转换?

    什么是音频转换呢?我们的音频文件有很多格式,比如大家最熟悉的mp3格式,还有一些少见的wav.flac等格式,不同的应用有着兼容不同文件格式的差异,这就是要音频转换了,那么音频怎么转换呢?别急小编一步 ...

  8. android音频资源,android音频编辑之音频裁剪的示例代码

    前言 本篇开始讲解音频编辑的具体操作,从相对简单的音频裁剪开始.要进行音频裁剪,我的方案是开启一个Service服务用于音频裁剪的耗时操作,主界面发送裁剪命令,同时注册EventBus接受裁剪的消息( ...

  9. 【Audio音频开发】音频基础知识及PCM技术详解

    个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.概念 3. PCM介绍 4. PCM原理 5.PCM相关概念 5.1 ...

最新文章

  1. 限制输入字符串的长度
  2. SQL Server 2008带字段注释导入Power Designer 9.5
  3. 教你50招提升ASP.NET性能(十五):解决性能问题时不要低估UI的价值
  4. 【项目相关】MVC中将WebUploader进行封装
  5. java jlabel位置_Java Swing – JLabel位置
  6. Catharanthus roseus(长春花碱)的生物合成
  7. 客户成功案例 | 台湾杜邦:提升制程能力的法宝 — 先进的数据分析
  8. Java语言课程设计——简易计算器(详细含报告和源代码)
  9. feign调用是否会经过网关
  10. js josn prase
  11. git分支代码提交主干
  12. Ubuntu 16.04版本的 网易云音乐 linux 安装包资源以及下载过程
  13. python使用worldcloud模块、jieba模块做QQ消息记录词云
  14. Business English 商务一点通
  15. 车载播放器 android,KX万能播放器
  16. Word 有时候百度输入法用不
  17. 根据离散点画直线_excel表格怎么画散点图画直线
  18. 计算机电源功率计算,电源功率怎么计算?
  19. Linux中查看压缩包的内容,linux中肿么查看压缩包中的内容
  20. el-table闪动问题

热门文章

  1. 完全背包:以重量分阶段
  2. Codeforces 1106F Lunar New Year and a Recursive Sequence (线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
  3. Luogu P1198 BZOJ 1012 最大数 (线段树)
  4. 多元函数概念思维导图_高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]...
  5. java 反射field_Java基础--反射之Field
  6. Webshell免杀绕过waf
  7. 201671030125+词频统计软件项目报告
  8. HDU 4893 - Wow! Such Sequence!(线段树)
  9. 从源代码角度分析ViewStub 疑问与原理
  10. Python于*args 和**kwargs使用