关于dsp项目如何获取dat文件及生成wav文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
钦灿的话:
想必大家在做DSP的项目的时候会遇到一下这两个问题:
1)如何将老师给的input.wav文件转换为CCS读取的input.dat文件?
2)如何将自己滤波后的生成的dat数据转换为output.wav文件,然后播放看
看?
第一个问题你可能百度一下会有办法借鉴解决,第二个问题我是百度不到了,不知道你们能不能找到,网上一般都叫你用格式转换器之类的来转换(我试过了,没有用),本人也头痛了这个问题两天,昨晚临睡前想了一下补码的知识及看了一下数据,
意外地写出了matlab代码,为了造福人类,特此共享一下我自己的方法。
本人愚
笨,有更好的方法的,请轻喷。
1.生成dat文件:
%输出生成dat文件
[y,fs,nbits]=wavread('D:\Documents\MATLAB\input.wav'); %读入wav数据
%%想知道数据长度为多少的话就用length函数
%y1=length(y) %直接打印
fid=fopen('input.dat','w'); %打开input.dat文件(没有就自动创建),获取文件ID (fid)
fprintf(fid,'1651 1 0 1 0 \n'); %写入dat文件的头几个参数,具体意义不清楚,不过一定要有这些数据,要不然在CCS中利用探针读入数据时会说无法打开文件(说是这样,但实际还是打开了,本人亲身体验)
fprintf(fid,'0x%x \n',round(y*100)+(y<0)*2^16); %写入音频信号的数据,以16进制显示,负数用补码显示
2.FIR滤波器系数获取
%获取FIR滤波器系数
y=fir1(63,0.65,hamming(64));
y %打印出数据
3.生成wav文件
%输出output.wav
fid=fopen('output.dat','rt'); %打开output.dat文件,获取文件ID(fid)
y=fscanf(fid,'%x \n'); %将数据以16进制写入到变量y中
y1=(y-(y>2^15)*(2^16))/100; %16进制数转换为小数
wavwrite(y1,fs,'output.wav'); %输出output.wav文件
注意:或许你会看到,运行代码后会出现三行警告,这里不用担心,输出没有影响的,生成的wav文件是可以播放的。
或许你还会问,output.dat文件头几个数据不是处理后的音频数据,把它们输出到.wav会不会有杂音啊?其实,只有头几个数据是不会影响的,因为output.dat文件的数据要至少达到10000个,生成的wav文件才仅仅能播放1秒左右,几个小数据根本就听不到,所以不用担心。
结束语:大家如果有更好的解决方法,欢迎改进!!然后大家一起哈利路亚吧!。