原文链接:http://tecdat.cn/?p=7620

原文出处:拓端数据部落公众号

可以将44.1kHz单通道.wav文件中的一秒读取到长度为44100的数组(称为b)中。给定矩阵A,我们寻求系统Ax = b的解。通过Gauss-Seidel的迭代,向量如果我们将b记录的录音,则将一些白噪声作为我们的初始猜测,并在每次交替中写出Ax,我们会观察到b中高音调的音符首先变得可听,而同时白噪声的音调分解。

最初的12秒.wav文件的音频(白噪声)initialAx.wav

初始Ax,残差和残差FFT的图:


经过一轮迭代,高音转化gauss_seidel_out000000.wav

在光谱中可以看到一些结构:


第二次迭代:gauss_seidel_out000001.wav


第三次迭代:gauss_seidel_out000002.wav


第四次迭代:gauss_seidel_out000003.wav


这一切都在python中完成。将.wav文件加载到数组中,在scipy中还不错。为了避免缓存问题,必须使用稀疏矩阵类,因为12秒的.wav文件需要一个大小为12 * 44100的数组。这是我使用的TridiagonalMatrix类代码片段:

from numpy import *#a tridiagonal matrix class
class TridiagonalMatrix:#initialize with 3 numpy arraysdef __init__(self, upper_in, diag_in, lower_in):self.upper  = upper_inself.diag   = diag_inself.lower  = lower_inself.dim    = diag_in.shape[0]#matrix mulitplicationdef apply(self, v):out = ndarray(self.dim)try:out[0] = self.diag[0]*v[0] + self.upper[0]*v[1]out[self.dim-1] = self.lower[self.dim-2]*v[self.dim-2] + self.diag[self.dim-1]*v[self.dim-1]for i in range(1, self.dim-1):out[i] = self.lower[i-1]*v[i-1] + self.diag[i]*v[i] + self.upper[i]*v[i+1]except(IndexError):print "Wrong sizes"return out

这是处理读取/写入.wav文件然后使用Gauss-Seidel转换为线性系统的代码片段。

from TridiagonalMatrix import *
from numpy import *
from scipy.io import wavfile
import scipy.fftpack
import pylab
import sys
import osdef musical_gauss_seidel(A, b, x0, tol):
"""
do the gauss seidel iteration
but output some sound every now and then..
A is some matrix that lets gauss seidel work
b is a vector that represents a .wav file of a pretty song
x0 is our initial guess for the gauss seidel method (probably random static)
we are going to output the .wav data corresponding to Ax
as Ax gets closer to b (ie the residual gets smaller)
we should hear the song emerge from the initial guess
"""#make noise of the initial approximation to bwavfile.write("gauss_seidel_out000000.wav", 44100, (A.apply(x0)).astype(int16))residual  = A.apply(x0) - b

拓端tecdat|python算法对音频信号处理Sonification :Gauss-Seidel迭代算法相关推荐

  1. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  2. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  3. 拓端tecdat|bilibili视频流量数据潜望镜

    最近我们被客户要求撰写关于bilibili视频流量的研究报告,包括一些图形和统计输出. 最新研究表明,中国有超过7亿人在观看在线视频内容.Bilibili,被称为哔哩哔哩或简称为B站,是中国大陆第二个 ...

  4. python实时播放音频和录音_基于python的实时音频信号处理

    我一直在尝试使用python中的"pyAudio"模块进行实时音频信号处理.我所做的只是一个简单的例子,从麦克风读取音频数据并通过耳机播放.我尝试了以下代码(Python和Cyth ...

  5. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  6. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  7. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  8. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  9. AI算法连载18:统计之EM 迭代算法

    导语:在人工智能AI如火如荼的大潮下,越来越多的工程师们意识到算法是AI的核心.而面对落地的应用,不懂算法的AI产品经理将是空谈,不仅无法与工程师沟通,更无法深刻理解应用的性能与方式.所以业界逐渐形成 ...

  10. python迭代算法含义_迭代算法原理及其Python编程实现

    黄旭 摘 要:迭代算法是数学算法在计算机中应用的一个热点,也是计算机解决问题的一般思路,本文结合数学中二分法求根的原理,阐述了数学迭代算法的一般原理,并采用了Python加以实现,为进一步对数学算法理 ...

最新文章

  1. 在ASP.NET中跟踪和恢复大文件下载
  2. Java .net 心得_关于Java和.Net的一些感想
  3. 史上最硬核的Linux依赖问题解决方案
  4. 打印product所assign的product category和hierarchy的小工具
  5. 多媒体基础:动画和视频知识笔记
  6. Linux的实际操作:文件目录类的实用指令(cat more less)
  7. linux libbz2.so.1,libbz2.so.1.0: cannot open shared object file: No such file or directory
  8. mysql同时往两个表插数据_MySQL 的两个特殊数据类型属性 unsigned与 zerofill
  9. CUDA ---- GPU架构(Fermi、Kepler)
  10. jquery + ashx + Json 操作数据
  11. Python连载7-time包的其他函数
  12. Vue 实现电子签名
  13. 自己对着知乎注册页面也模仿出了一个!!
  14. python爬虫新浪微博_python爬虫抓取新浪微博数据
  15. html单元格文字首行缩进,刘启智问:excel里怎么首行缩进 Excel在表格中的文字要首行缩进二字符,该如何设置?...
  16. 数据可视化案例(四)——新零售数据大脑,助力智慧零售
  17. DeepStream系列之yolov6部署测试
  18. Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
  19. 算法设计与分析(python版)-作业一
  20. Cisco Packet Tracer-物联网实验

热门文章

  1. 内存不足时Android 系统如何Kill进程
  2. PHP面向对象之继承和多态
  3. Android学习笔记--Android开发时常用控件(一)
  4. Photoshop钢笔工具使用方法
  5. 浅析GestureDetector
  6. Deconvolutional Networks论文解读
  7. 大数据能消除在招聘和相关商业行为中的偏见吗?
  8. Maven与Ant使用reportNG代替testng
  9. 使用安卓的http进行数据的发送需要做的首先就是授权
  10. Windows Phone 7一周年生日