平常心 https://bbs.21ic.com/?509852 [收藏] [复制] [RSS] 记录学习过程中的点滴积累,以此自勉…

日志

Matlab处理wav文件总结

已有 2024 次阅读2011-12-12 20:41 |个人分类:编程|系统分类:视频音频| Matlab, wav文件, 批量

Matlab处理wav文件总结


利用专门的音频处理软件,比如CoolEditSpectralab等,可以方便的录制声音、分析频谱。这种方式也无需复杂的操作或者专业知识,就可以实时的观察结果。利用这些软件在平时实验数据的测量和分析中,足够用了;但是这些软件处理的数据精细程度往往不够,无法应用于论文中。这种情况下,就需要把录制的音频文件导入到matlab中做后续处理。


下面对这个处理过程做简要的总结。基本思路是用CooEdit采集一组声音,然后用matlab批处理,显示采集信号的频谱曲线。下面即是处理的详细步骤和关键代码。


1、用CooEdit录制声音,可以选择采样率为96kHz,单声道。录制声音长度约为10s,然后存储文件为Windows PCM wav文件格式。文件名最好包括进入测试条件。测试多组数据,将其保存在同一个文件夹中,便于matlab后期的批处理。


2、使用matlab读取一个文件夹里的所有wav文件。在下面的操作中,把sqrt0目录下的所有wav文件名读取到fnames中了。


dirs=dir('sqrt0/*.wav');  % 读取当前目录下所有的excel文件


dircell=struct2cell(dirs)' ; % 结构体(struct)转换成元胞类型(cell),转置一下是让文件名按列排列。


fnames=dircell(:,1);         % 第一A列是文件名


3、通过wavread函数读取wav文件数据,并将其存储在YdataFdata中。


fnumber=size(fnames,1);                    % 求取表格行数,即文件个数


for N=1:1:fnumber


    filename=char(fnames(N,1));             % cell转换为string


    filename=strcat(path,filename);       % 校正文件路径


    [Y,Fs]=wavread(filename,Num);           % 读取当前文件前65536个点


    Ydata(N,:) = Y;                         % 记录数据


    Fdata(N,:) = Fs;                        % 记录采样率


end


4、对数据做FFT运算,并绘制其频谱图。


for N=1:1:fnumber


    yy = fft(Ydata(N,:),Num);         % 对数据做NumFFT运算


    Yfft(N,:) = 20*log10(abs(yy));    % 对计算结果取模


    figure;


    ff = linspace(0,Fdata(N),Num);    % 0-采样率之间取Num个频率点


    plot(ff,Yfft(N,:),'r');           % 绘制频谱


    grid on;


    axis([400 3000 -20 70]);


end


5、调整修饰绘图,并存储。下面是用到的一些命令。


    set(gcf,'Position',[200 200 350 250]);      % 设置绘图的大小


    tt = strcat(Freq(N,:),',',Sqrt(N,:),',',Modindex(N,:));


title(tt);                              % 设置绘图标题


    legend('m=1.0');


    xlabel('FrequencyHz','FontSize',14,'FontName','Times New Roman');% 设置x坐标轴标注字体


    ylabel('AmplitudedB','FontSize',14,'FontName','Times New Roman');


    Note = strcat('m=',Modindex(N,:));


    text(1800,55,Note,'FontSize',14);       % 400300位置添加标注


    set(gca,'FontSize',12);                 % 设置坐标轴字体


    set(gcf,'visible','off');               % 不显示图片


    tt = strcat(Freq(N,:),'_',Sqrt(N,:),'_',Modindex(N,:),'.emf');


    saveas(gcf,tt,'emf');                   % 存储绘图为eps格式


6、将生成的图片,导入到excel中。因为excel不能识别eps图片,所以生成emf图片。两种格式都是矢量图,放大缩小不会失真。可以调出excel工具栏的图片工具,第一个工具即为插入快捷键。这样会更方便快捷。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)