matlab生成wav文件并用python验证
在进行频谱分析时,发现MATLAB和python读取wav文件的波形不一致,导致不能得出正确结果,为了验证MATLAB和python哪部分有问题,于是有了这篇博客。
1、需求分析
用MATLAB生成一个正弦波并保存为wav文件,然后用python读取这个wav文件画出波形,查看python读取出来的波形和matlab生成的波形是否一致。
2、代码实现
2.1 MATLAB生成wav文件
Df=5; %频率间隔
fs = 8000; %采样频率
T = 1/fs; %采样周期
N=fs/Df; %序列点数
time = (N-1)./fs; %第一个声音片段的总时长
t=0:T:(N-1)./fs;
y = sin(2*pi*200*t); %生成第一个声音片段,注意需要用db2mag()函数把dB转换成magnitude。sound(y,fs) %可以播放声音的函数 sound()
filename = ('sinwave.wav'); %给文件取名
plot(t,y)
audiowrite(filename,y,fs) %存储.wav音频文件,在这里文件名为sinwave.wav
其中生成的正弦波波形如下图所示:
2.2 python读取wav文件
import wave
import numpy as np
import pylab as plt#打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据。
f = wave.open(r"E:\练习\音频信号处理\spectrum.m\sinwave.wav","rb")
#读取格式信息
#一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采
#样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
#读取波形数据
#读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)
str_data = f.readframes(nframes)
f.close()
#将波形数据转换成数组
#需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组
wave_data = np.fromstring(str_data,dtype=np.short)
#通过取样点数和取样频率计算出每个取样的时间。
time=np.arange(0,nframes)/framerate
print(params)
print(wave_data.max())#找出正弦波的峰值
#time 也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标
plt.plot(time,wave_data/32768)
plt.show()
python读取wav文件显示出来的正弦波如下图所示:
python读取wav文件的信息及求出波形峰值的结果如下图所示:
我们可以看出峰值为32767(该wav文件有16bit,且带一个符号位。215=32768215=32768{{2}^{15}}\text{=}32768 ),我们进行归一化处理后的到波形如下图所示:
由上图可以看出MATLAB生成的正弦波保存为wav文件后,python读取该wav文件。两种语言下正弦波相同。
matlab生成wav文件并用python验证相关推荐
- python语音合成并播放_使用Python实现文字转语音并生成wav文件的例子
目前手边的一些工作,需要实现声音播放功能,而且仅支持wav声音格式. 现在,一些网站上支持文字转语音功能,但是生成的都是MP3文件,这样还需要额外的软件来转成wav文件,十分麻烦. 后来,研究Pyth ...
- 关于Matlab生成批量文件文件名统一数字位数方法
关于Matlab生成批量文件文件名统一数字位数方法 规定文件名数字位数方法: 读取文件方法 在生成批量含有数字编号的文件时,应该注意使用统一位数的数字来命名,且明明数字位数应该比文件数量最大值至少多一 ...
- matlab读取wav文件
matlab读取wav文件 wavread audioread [y,Fs,bits]=wavread('1.wav'); [y,Fs]=audioread('1.wav'); wavread mat ...
- 16进制 dat matlab_用MATLAB生成DAT文件
用MATLAB生成DAT文件 f1=10;f2=100;fs=400;N=400; x = linspace(0,N/fs,N); y1 = sin(2*pi*f1*x); y2 = sin(2*pi ...
- python调用vb文件_【转载】利用VB生成APDL文件 和Python文件的方法
转载 利用VB生成APDL文件 和Python文件的方法 作者:李涛 欢迎关注:CAE技术分享 专注于CAE技术的分享和讨论. 1. 概述 Visual Basic作为一种可视化程序设计语言,应用相对 ...
- 针对大量数据,MATLAB生成EXCEL文件并进行排版处理的源码
#MATLAB生成EXCEL文件并进行排版处理的源码 项目要求:给定某海洋站潮位数据在一年之年的每分钟潮位数据(一共有24×60×365=525600个数),txt格式,要求制作出海洋站该年份的潮汐表 ...
- matlab生成mif图像文件,matlab 生成mif文件导入quartus rom中
用Quartus II创建并仿真ROM的步骤:1.在Quatus工程下生成一个ROM2.编写.mif文件,作为ROM的初始化文件3.将.mif文件拷贝到Modelsim工程下4.进行Modelsim仿 ...
- matlab产生mif 文件,用matlab生成mif文件
在FPGA中,rom模塊的初始化文件分為兩種,一種是hex文件,另外一種是mif文件,這兩種文件都可以通過Quartus進行手工創建,進行手工輸入數據,也可以借助於專用的文件編輯器完成編輯. 在此介紹 ...
- 使用matlab生成mif文件
使用matlab生成mif文件用于ROMIP核读取. text文本中一行有5个数据,共有80行,400个1位的数据.地址从左至右,从上至下计,范围为0-399. quartusII的mif文件地址范围 ...
最新文章
- layui按钮展开、_layui框架,点击某个按钮,让layui的日期插件选中的值清空
- 使用CMD命令修改Windows本地账户密码
- netpref 使用_使用PerfView监测.NET程序性能(转发)
- perl oracle ppm,Perl图形化包管理工具PPM学习使用笔记
- 卷积/反卷积前后的张量尺寸计算
- thinkphp 表单令牌
- % 取余运算 取模运算
- keil5 项目管理
- 联通盒子系统服务器,联通IPTV盒子刷机方法,实现软件任意安装
- Report Machine应用总结
- 如何使用ps制作ico图标文件
- mysqldump: Got error: 1168 differently defined non-MyISAM LOCK TABLES
- 实例展示:用css实现网页图片特效
- 坚定信念,踏踏实实走好脚下的每一步!
- MySQL数据库相关资料
- Python-各种Loss总结
- android paint跑马灯,Android使用Canvas实现跑马灯
- tp部署了admin.php如何显示页面,深度解析ThinkPHP5设置模板路径
- FLASH AS3.0 停止播放音乐
- 三友硅业基于Lora+IBeacon定位技术下的化工厂人员定位解决方案-化工厂定位-新导智能
热门文章
- FPGA之道(59)时空变换之时域优化
- HDLBits 系列(16)Something about Counter
- Win7桌面快捷切换技巧?
- 遇见BUG(4)不要默认电平标准!
- Spring学习总结(6)——Spring之核心容器bean
- [常见错误]-bash: pg_config: command not found
- 好分数a1a5_好分数怎么查看班级排名 七年级学生成绩查询
- 3.4.1 流量控制与可靠传输机制
- TimeQuest约束外设之诡异的Create Generated Clocks用法
- android工程r红,Android Studio - 为什么R随机变为红色?