音频处理六:(音频的反FFT)
程序设计六:音频的反FFT
一:需求分析
FFT变换是将信号从时域转换到频域,这样在时域复杂的信号转换到频域看起来就方便容易了很多。但有时候也需要将频域信号转换到时域,所以这时运用到IFFT变换。
逆向快速傅里叶变换(IFFT)的计算原理是将频域(注意频域是复数)数据进行取共轭复数(虚部取反),然后再进行FFT变换,这样便将频域信号转换到时域。因为FFT变换的结果是复数,所以从频域进行FFT变换过来的结果也是复数,而此时只需取复数的实部,再除以N,便是原时域信号。
wavtxtifft -i fft.txt -o wavtxt.txt
二:参考知识
1.本地.txt信息
fft_BAC009S0003W0121.txt BAC009S0003W0121.wav语音进行FFT变换后的取值
2.ifft后结果
wavetxt.txt 是fft_BAC009S0003W0121.txt反傅里叶变换后的数据
BAC009S0003W0121.txt 是BAC009S0003W0121.wav原始采样值
三:python代码
复数对象拥有数据属性,分别为该复数的实部和虚部。复数还拥有conjugate方法,调用它可以返回该复数的共轭复数对象。
complex_array = np.loadtxt(input, dtype=np.complex)
# f=np.conjugate(complex_array)
f = complex_array.conjugate() # 取共轭复数
先将要做Ifft的数据取共轭,然后fft,结果再取共轭后除以N
f1 = np.fft.fft(f)
original_f = np.real(f1) / length # 取出实部,并对其除以N。
# original_f=original_f.astype(np.round())
original_f = np.round(original_f) # 返回浮点数x的四舍五入值。
完整代码
holiday06.py
import numpy as np
import sys
import getopt
'''
逆向快速傅里叶变换(IFFT)的计算原理是将频域(注意频域是复数)数据进行取共轭复数(虚部取反),
然后再进行FFT变换,这样便将频域信号转换到时域。
因为FFT变换的结果是复数,所以从频域进行FFT变换过来的结果也是复数,而此时只需取复数的实部,便是原时域信号。先将要做Ifft的数据取共轭,然后fft,
结果再取共轭后处以N,结果就是ifft的结果。不过和直接ifft算法相比有精度上的误差。
'''
def main(argv):try:opts, args = getopt.getopt(argv, "-h-i:-o:", ["help", "input=", "output="])except getopt.GetoptError:print('将读取到的FFT数据,进行快速傅里叶逆变换IFFT')print('python holiday06.py -i fft_BAC009S0003W0121.txt -o wavetxt.txt')sys.exit(2)# 处理 返回值options是以元组为元素的列表。for opt, arg in opts:if opt in ("-h", "--help"):print("音频的IFFT")print('将读取到的FFT数据,进行快速傅里叶逆变换IFFT')print('python holiday06.py -i fft_BAC009S0003W0121.txt -o wavetxt.txt')sys.exit()elif opt in ("-i", "--input"):input = argelif opt in ("-o", "--output"):output = arg# fft_BAC009S0003W0121.txtcomplex_array = np.loadtxt(input, dtype=np.complex)length = len(complex_array) # 求N# f=np.conjugate(complex_array)f = complex_array.conjugate() # 取共轭复数f1 = np.fft.fft(f)original_f = np.real(f1) / length # 取出实部,并对其除以N。# original_f=original_f.astype(np.round())original_f = np.round(original_f) # 返回浮点数x的四舍五入值。file = open(output, 'w')for i in range(length):# s = str(data[i, 0]).replace('[', ").replace('[',")# 同时打印左右声道数据,中间空格分开s = str(original_f[i]).replace('[', ").replace('[',")s = s.replace("'", ").replace(',',") + '\n' # 去除单引号,逗号,每行末尾追加换行符file.write(s)file.close()if __name__ == "__main__":# sys.argv[1:]为要处理的参数列表,sys.argv[0]为脚本名,所以用sys.argv[1:]过滤掉脚本名。main(sys.argv[1:])#python holiday06.py -i fft_BAC009S0003W0121.txt -o wavetxt.txt
#python test03.py -i fft_BAC009S0003W0121.txt -o wavetxt.txt
四:实现结果
1.请求帮助
python holiday06.py -h
2.数据IFFT
- -i 输入FFT数据
- -o 保存的文件
python holiday06.py -i fft_BAC009S0003W0121.txt -o wavetxt.txt
五:结果显示及分析
1.结果显示
wavetxt.txt是fft_BAC009S0003W0121.txt反傅里叶变换后的数据
2.结果比对
BAC009S0003W0121.txt 是BAC009S0003W0121.wav原始采样值
与原始采样值数据比对,结果为一致
音频处理六:(音频的反FFT)相关推荐
- 低延迟音频中的音频解码优化策略
文章目录 前言 音频播放 举个例子:PortAudio 回调函数 解码与播放 优化策略 1. 一次性读取音频到内存中 2. MMAP 3. 音频转码,再接 MMAP 4. 解码缓冲 总结 参考资料 前 ...
- Android 8.0 后使用AudioFocus音频焦点处理音频抢占问题
今天写了一个关于播放audio的简单demo,发现程序无法抢占其他音频,具体表现在当有其他播放器在播放audio的时候,如果demo播放audio的话,那么会有两个audio同时播放:而且其他播放器也 ...
- 音频特征于音频信号提取总结
这里写目录标题 1 语音的产生简介 2 声音特性 3. 声音的种类 计算机听觉的应用 4. 什么是音频特征 5 音频特征的类别 5.1 可以从以下几个角度区分 5.2. 常见音频特征举例 6. 音频 ...
- iOS 9音频应用播放音频之iOS 9音频播放进度
iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...
- iOS 9音频应用播放音频之控制播放速度
iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...
- iOS 9音频应用播放音频之音量设置与声道设置
iOS 9音频应用播放音频之音量设置与声道设置 iOS 9音频应用音量设置 音量又称响度.音强,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小.在iOS 9音频应用的应用中, ...
- iOS 9音频应用播放音频之第一个ios9音频实例2
iOS 9音频应用播放音频之第一个ios9音频实例2 ios9音频应用关联 iOS9音频应用中对于在主视图上添加的视图或控件,在使用它们时必须要与插座变量进行关联.ios9插座变量其实就是为主视图中 ...
- iOS 9音频应用播放音频之第一个ios9音频实例
iOS 9音频应用播放音频之第一个ios9音频实例 第一个ios9音频实例 为了让开发者可以对上面的内容有更加深入的了解,本节将实现播放音频的第一个实例.在此实例中会涉及到项目的创建.界面设计.关联以 ...
- iOS 9音频应用播放音频之ios9音频基本功能
iOS 9音频应用播放音频之ios9音频基本功能 在iOS 9音频应用开发中最为简单和常用的就是AVFoundation框架中的AVAudioPlayer类.虽然AVAudioPlayer类不能播放网 ...
最新文章
- 每年“骗”马云10亿,被骂大忽悠,他却当选中国工程院院士?
- 课程作业02——课程中的动手动脑问题
- JIRA介绍- 一个专业优秀的缺陷跟踪管理软件
- 关于用户空间和内核空间
- java单例方法_Java单例模式
- Python随手记—各种方法的使用
- 如何找出孔洞位置进行填充_电伴热带破损位置如何快速找出
- spring IOC 装配一个bean
- Veeam FAQ系列转载(一):备份
- 什么是validationQuery
- 腾讯首投AI芯片,领投燧原科技Pre-A轮3.4亿元融资
- YOLO3算法个人算法理解心得
- 【微信小程序】解决代码上传超过大小限制,小程序分包
- ps蒙版使用计算机一级,2014年计算机一级考试PS及基础模拟试题(1)
- 微信小程序学习笔记——常见组件【navigator】导航组件
- Disk-expansion
- 网络电视视频服务器所放位置,同样带宽,为什么用电视上的网络电视app看电视就卡,用运营商自己的iptv就不卡呢?...
- 四、Hibernate框架的API (三)-- Session对象
- 电信联通共享检测技术及防封杀
- pr图形模板预设怎么使用_Pr 2017版本Premiere使用标题预设动态图形,提示要安装AE...
热门文章
- spark ui的访问地址_Spark篇之HA集群搭建
- keil obj 文件 结构_keil下的STM32程序开发部署(一)
- linux软链接的创建、删除和更新
- error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug...
- Python当中的a += a 与 a = a + a 的区别,可变类型与不可变类型的数据类型,引用传参...
- 手脱EZIP v1.0
- javascript 运算优先级
- view bitmap 截图
- flume1.8 开发指南学习感悟
- Android Studio-目录结构