该函数为MATLAB GUI界面中打开音频文件回调函数,解释如下:

  1. global x; % 鏂囦欢:声明全局变量x,用于存储音频数据,方便其他函数调用。
  2. global Fs; % 閲囨牱棰戠巼:声明全局变量Fs,用于存储音频采样率,方便其他函数调用。
  3. global tl; :声明全局变量tl,用于存储时间轴数据,方便其他函数调用。
  4. global x2;:声明全局变量x2,用于存储原始音频数据,方便后续的音频处理。
  5. [filename, pathname] = uigetfile('*.wav', '閫夋嫨闊抽鏂囦欢');:弹出文件浏览器,选择.wav格式的音频文件。filename存储文件名,pathname存储文件路径。
  6. if isequal(filename,0):判断用户是否选择了文件。如果filename0,则表示用户点击了取消按钮。
  7. disp('User selected Cancel'):如果用户点击了取消按钮,则输出提示信息。
  8. path = fullfile(pathname, filename);:拼接文件路径和文件名,得到完整的文件路径。
  9. [handles.x,handles.Fs]=audioread(path);:读取音频文件,handles.x存储音频数据,handles.Fs存储采样率。
  10. x=handles.x;:将音频数据赋值给全局变量x
  11. Fs=handles.Fs;:将采样率赋值给全局变量Fs
  12. axes(handles.axes1);:设置绘图区域为handles.axes1,即GUI界面中的第一个坐标轴。
  13. tl=[0:1/Fs:(length(handles.x)-1)/Fs]; % 鏃堕棿灏哄害:计算时间轴数据,tl为从0length(handles.x)/Fs的时间点,步长为1/Fs
  14. plot(tl,handles.x);:绘制音频波形图,横坐标为时间轴数据tl,纵坐标为音频数据handles.x
  15. title('璇煶鏃跺煙娉㈠舰');:设置图形标题为'璇煶鏃跺煙娉㈠舰'。
  16. xlabel('鏃堕棿/s');:设置横坐标标签为'鏃堕棿/s',即时间单位为秒。
  17. grid on;:显示网格线。
  18. N=length(handles.x);:计算音频数据长度。
  19. df=Fs/N;:计算频率分辨率。
  20. w=[0:df:df*(N-1)] - Fs/2; % 棰戠巼灏哄害:计算频率轴数据,w为从-Fs/2Fs/2的频率点,步长为df
  21. X=fft(handles.x);:对音频数据进行快速傅里叶变换,得到频域信号X
  22. X=fftshift(X);:对X进行频谱移位,将直流分量移至中心。
  23. axes(handles.axes2);:设置绘图区域为handles.axes2,即GUI界面中的第二个坐标轴。
  24. plot(w,abs(X)/max(abs(X)));:绘制频谱图,横坐标为频率轴数据w,纵坐标为归一化的频谱幅值。
  25. axis([-10000,10000,0,1]);:设置坐标轴范围,横坐标范围为-1000010000Hz,纵坐标范围为01
  26. title('璇煶棰戣氨');:设置图形标题为'璇煶棰戣氨'。
  27. xlabel('棰戠巼/Hz');:设置横坐标标签为'棰戠巼/Hz',即频率单位为Hz。
  28. grid on;:显示网格线。
  29. x2=x;:将原始音频数据赋值给全局变量x2

横坐标单位为秒(s),纵坐标单位为音频幅值;横坐标单位为Hz,纵坐标为幅值归一化的值。

该函数实现了以下功能:

  1. 读取音频文件。
  2. 绘制音频波形图。
  3. 计算音频频谱。
  4. 绘制频谱图。

该函数为后续的音频处理提供了基础,例如音频滤波、音频合成等。


原文地址: https://www.cveoy.top/t/topic/nKeR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录