音频处理五:(音频的FFT计算)
程序设计五:音频的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计算)相关推荐
- 【Android FFMPEG 开发】FFMPEG 音频重采样 ( 初始化音频重采样上下文 SwrContext | 计算音频延迟 | 计算输出样本个数 | 音频重采样 swr_convert )
文章目录 I . FFMPEG 播放视频流程 II . FFMPEG 音频重采样流程 III . FFMPEG 音频重采样 IV . FFMPEG 初始化音频重采样上下文 SwrContext V . ...
- 音频特征于音频信号提取总结
这里写目录标题 1 语音的产生简介 2 声音特性 3. 声音的种类 计算机听觉的应用 4. 什么是音频特征 5 音频特征的类别 5.1 可以从以下几个角度区分 5.2. 常见音频特征举例 6. 音频 ...
- 【Android 高性能音频】OboeTester 音频性能测试应用 ( Oboe 输出测试参数 | API 选择 | 音频输出设备选择 | 采样率 | 通道 | 采样格式 | 播放偏好 )
文章目录 一.Oboe 输出测试参数面板 二.Oboe 输出测试参数 API 及 设备选择 三.Oboe 输出测试参数 音频参数 四.Oboe 输出测试参数 播放偏好 五.Oboe 输出测试参数 ( ...
- android下音频采集功能,音频采集:Android基于AudioRecord的实现
前言 这篇文章简单详情下手机端Android系统下利使用AudioRecord进行音频采集方法. 开始前先提供一份源码 AudioRecordLib . AudioRecord采集的核心实现在于 Au ...
- android音频编辑之音频裁剪的示例代码
音频编辑项目的整体结构 音频裁剪方法的流程实现 获取音频文件相关信息 计算裁剪时间点对应文件中数据的位置 写入wav文件头信息 写入wav文件裁剪部分的音频数据 下面是音频裁剪效果图: 音频编辑项目的 ...
- android音频编辑之音频裁剪
转载请标明出处: http://blog.csdn.net/hesong1120/article/details/79077013 本文出自:hesong的专栏 前言 本篇开始讲解音频编辑的具体操作, ...
- 什么是音频转换?音频怎么转换?
什么是音频转换呢?我们的音频文件有很多格式,比如大家最熟悉的mp3格式,还有一些少见的wav.flac等格式,不同的应用有着兼容不同文件格式的差异,这就是要音频转换了,那么音频怎么转换呢?别急小编一步 ...
- android音频资源,android音频编辑之音频裁剪的示例代码
前言 本篇开始讲解音频编辑的具体操作,从相对简单的音频裁剪开始.要进行音频裁剪,我的方案是开启一个Service服务用于音频裁剪的耗时操作,主界面发送裁剪命令,同时注册EventBus接受裁剪的消息( ...
- 【Audio音频开发】音频基础知识及PCM技术详解
个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1.前言 2.概念 3. PCM介绍 4. PCM原理 5.PCM相关概念 5.1 ...
最新文章
- 限制输入字符串的长度
- SQL Server 2008带字段注释导入Power Designer 9.5
- 教你50招提升ASP.NET性能(十五):解决性能问题时不要低估UI的价值
- 【项目相关】MVC中将WebUploader进行封装
- java jlabel位置_Java Swing – JLabel位置
- Catharanthus roseus(长春花碱)的生物合成
- 客户成功案例 | 台湾杜邦:提升制程能力的法宝 — 先进的数据分析
- Java语言课程设计——简易计算器(详细含报告和源代码)
- feign调用是否会经过网关
- js josn prase
- git分支代码提交主干
- Ubuntu 16.04版本的 网易云音乐 linux 安装包资源以及下载过程
- python使用worldcloud模块、jieba模块做QQ消息记录词云
- Business English 商务一点通
- 车载播放器 android,KX万能播放器
- Word 有时候百度输入法用不
- 根据离散点画直线_excel表格怎么画散点图画直线
- 计算机电源功率计算,电源功率怎么计算?
- Linux中查看压缩包的内容,linux中肿么查看压缩包中的内容
- el-table闪动问题
热门文章
- 完全背包:以重量分阶段
- Codeforces 1106F Lunar New Year and a Recursive Sequence (线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
- Luogu P1198 BZOJ 1012 最大数 (线段树)
- 多元函数概念思维导图_高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]...
- java 反射field_Java基础--反射之Field
- Webshell免杀绕过waf
- 201671030125+词频统计软件项目报告
- HDU 4893 - Wow! Such Sequence!(线段树)
- 从源代码角度分析ViewStub 疑问与原理
- Python于*args 和**kwargs使用