目录
1、背景
2、实现
2.1 参数定义
2.2 生成时间序列
2.3 生成左右声道波形
2.4 播放生成的波形
2.5 描绘波形图像
2.6 写入 .wav文件
2.7 读取生成的 wav 文件进行,并描绘波形
3、完整代码
4、运行图片
1、背景
测试DAC/功放的性能指标的时候,常需要 1KHz 的波形来分析,主要测试参数有输出幅度,相移、失真度、频响曲线、信噪比(SNR)等常用的手段来评估设备的好坏程度,测试仪器一般选用AG,粗略测试也可以使用稍微好一点的示波器。
曾经一开始接触这部分调试的时候,从网上找了些音频文件,发现怎么测参数都不对,后来从别人那里考来了一份常用的1K文件,才得出像样点的结果,由于此文件需要的精度高,而网上下载的文件质量参差不齐,而且没有所需要的各种格式,比如各采样率、位深、时常、特殊幅值、任意频率等的参数,所以干脆自己写一个程序来生成,所有内部的波形都能够看得出来,会比较放心地拿来测试。
对音频这块比较专业的软件有 Adobe Audition 这一款,很适合音频录制、编辑和混合,但是作为程序员,还是喜欢通过用代码来生成想要的内容,因此选择使用 Matlab,Matlab 在信号处理上,也可以说是老大了,各种处理的算法基本都是有对应的函数库,就算有些没有,编写起来也很容易,包含了众多科学/工程领域的包及仿真工具。当然,对于本文这种比较小的需求,虽说有种牛刀杀鸡的感觉,但是未尝不是一个学习的过程,再不用一下,在学校里学的就得忘光了。
2、实现
本文是该分栏的第一篇文章,上述废话多了点哈,后面的代码都尽量保证代码的注释多点,也欢迎大家来指正错误一起学习哦,现在开始来实现吧~~
2.1 参数定义
可以自由设置的参数如下,同学们可以根据需要来修改想要的参数,然后运行一下来生成wav文件。
代码片段(csdn 的 markdown 貌似对 m 文件的支持不太好,没有高亮 - -。):
%% 参数定义 %%%%%%%%%%%
fs = 96000; % 采样频率
bps = 16; % 位深 bit
Tfile = 60; % 声音片段的总时长,单位s
vol = 0; % 声音片段的音量 0db
sinewave1_fs = 1000; % 左声道频率,单位Hz
sinewave2_fs = 1000; % 右声道频率
stereo = 1; % 0:单声道,1:立体声
filename = ('96000_16b_1KHz_60s_stereo_gen_by_Matlab.wav'); %输出文件名称(自己定义,后缀是.wav)
2.2 生成时间序列
生成一个时间序列,序列里每一个点对应一个采样点。