程序设计六:音频的反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)相关推荐

  1. 低延迟音频中的音频解码优化策略

    文章目录 前言 音频播放 举个例子:PortAudio 回调函数 解码与播放 优化策略 1. 一次性读取音频到内存中 2. MMAP 3. 音频转码,再接 MMAP 4. 解码缓冲 总结 参考资料 前 ...

  2. Android 8.0 后使用AudioFocus音频焦点处理音频抢占问题

    今天写了一个关于播放audio的简单demo,发现程序无法抢占其他音频,具体表现在当有其他播放器在播放audio的时候,如果demo播放audio的话,那么会有两个audio同时播放:而且其他播放器也 ...

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

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

  4. iOS 9音频应用播放音频之iOS 9音频播放进度

    iOS 9音频应用播放音频之iOS 9音频播放进度 iOS 9音频应用开发播放进度 音频文件在播放后经过了多久以及还有多久才可以播放完毕,想必是用户所关注的问题.为了解决这一问题,在很多的音乐播放器中 ...

  5. iOS 9音频应用播放音频之控制播放速度

    iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...

  6. iOS 9音频应用播放音频之音量设置与声道设置

    iOS 9音频应用播放音频之音量设置与声道设置 iOS 9音频应用音量设置 音量又称响度.音强,是指人耳对所听到的声音大小强弱的主观感受,其客观评价尺度是声音的振幅大小.在iOS 9音频应用的应用中, ...

  7. ​iOS 9音频应用播放音频之第一个ios9音频实例2

    ​iOS 9音频应用播放音频之第一个ios9音频实例2 ios9音频应用关联 iOS9音频应用中对于在主视图上添加的视图或控件,在使用它们时必须要与插座变量进行关联.ios9插座变量其实就是为主视图中 ...

  8. iOS 9音频应用播放音频之第一个ios9音频实例

    iOS 9音频应用播放音频之第一个ios9音频实例 第一个ios9音频实例 为了让开发者可以对上面的内容有更加深入的了解,本节将实现播放音频的第一个实例.在此实例中会涉及到项目的创建.界面设计.关联以 ...

  9. iOS 9音频应用播放音频之ios9音频基本功能

    iOS 9音频应用播放音频之ios9音频基本功能 在iOS 9音频应用开发中最为简单和常用的就是AVFoundation框架中的AVAudioPlayer类.虽然AVAudioPlayer类不能播放网 ...

最新文章

  1. 毕业,新的开始,撸起袖子加油干!
  2. Spring Cloud Netflix Zuul中的速率限制
  3. linux 块设备驱动(二)——块设备数据结构
  4. python3.2安装tornado
  5. 商品pid是什么意思_0基础搞懂自动驾驶传统算法与深度学习的鸿沟-PID控制算法与MLP优化方法...
  6. CAS自旋锁到底是什么?为什么能实现线程安全?
  7. mysql主从复制同步实验_db.mysql.主从同步实验
  8. node-inspector调试工具使用方法
  9. 少女风vue组件库制作全攻略~~
  10. ios 友盟第三方登录遇到的各种坑。
  11. PyCharm快捷键总结
  12. 116. cURL 简介(2)
  13. Java并发编程实战读书笔记之死锁
  14. docker mysql 备份_docker mysql数据备份xtrabackup
  15. 移动IPv6光猫登录的一般ip地址账号与密码,移动光猫变桥接模式
  16. html中字体 楷体_HTML+CSS入门 CSS设置中文字体(font-family:黑体)后样式失效问题如何解决...
  17. 汇编串操作程序设计 计算X+(Y-Z)=W
  18. Python新书上市,强烈推荐!《Python网络数据爬取及分析从入门到精通(爬取篇)》导读
  19. AU降噪 李兴兴
  20. java面试题题目与解析(自己网上找的):java208

热门文章

  1. 对应 网口_威纶通网口屏和西门子1200/1500绝对地址实现通讯
  2. 计算机在气象上的应用浅论,简析计算机网络在气象服务中的应用原稿
  3. mysql count if 去重_MYSQL数据去重
  4. detachedcriteria查询去重_2020考研初试成绩查询:安徽研究生考试成绩查询入口
  5. android的应用入口点函数,android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...
  6. c语言char数字转int补位,关于char强制转换成int到底是用0还是用1补位的猜想与检验...
  7. 自动阈值检测_金融科技讲堂之三|金融企业如何在大数据中进行异常检测(一)...
  8. Spring Boot的学习之路(03):基础环境搭建,做好学习前的准备工作
  9. C 猴子选大王(亚瑟夫环)
  10. 《说服力——让你的PPT会说话》读书笔记02