% 读取录音文件 [filename,filepath] = uigetfile('*.wav','请选择录音文件'); file = fullfile(filepath, filename); [audio_data, Fs] = audioread(file); % 获取音频信号和采样率 % 频谱提取 N = length(audio_data); % 采样点数 fft_data = fft(audio_data); % 傅里叶变换 fft_half = fft_data(1:N/2+1); % 取一半频域数据,根据奈奎斯特定律,只需取一半即可表示整个频域 f = Fs * (0:(N/2))/N; % 频率轴 % 抽样和滤波 L = 512; % 每个窗口的长度 overlap = L/2; % 窗口之间的重叠长度 hamming_window = hamming(L); % 汉明窗 fs_hop = round(Fs/10); % 采样率为信号采样率的1/10 downsampled_signal = downsample(audio_data, fs_hop); % 下采样 filtered_signal = filter(hamming_window,1,downsampled_signal); % 滤波 % 可视化 figure; subplot(2,2,1); plot(audio_data); title('原始录音文件音频信号'); subplot(2,2,2); plot(f,abs(fft_half)); title('频谱'); subplot(2,2,3); spectrogram(audio_data,hamming(L),overlap,L,Fs, 'yaxis'); % 修改该行代码 title('原始录音文件音频信号的时频谱'); subplot(2,2,4); plot(filtered_signal); title('经过抽样和滤波后的信号'); % 保存处理后的音频文件 processed_file = fullfile(filepath, ['processed_', filename]); audiowrite(processed_file, filtered_signal, fs_hop); % 播放 soundsc(audio_data, Fs); % 播放原始录音文件 pause(5); % 暂停5s,等待处理完毕后再播放处理后的录音文件 soundsc(filtered_signal, fs_hop); % 播放处理后的录音文件
时间: 2024-03-07 20:52:26 浏览: 66
audioread - 统一的音频文件输入功能:audioread 提供了一个单一的、统一的功能,用于读取 wav、mp3、aac、flac...-matlab开发
这段代码是用来读取录音文件,并对其进行频谱分析、抽样和滤波等处理,最后保存处理后的音频文件和播放原始录音文件与处理后的录音文件。具体的步骤如下:
1. 使用`uigetfile`函数让用户选择需要读取的录音文件,并获取音频信号和采样率。
2. 对音频信号进行傅里叶变换,提取出频域数据,并根据奈奎斯特定律只取一半的频域数据表示整个频域。
3. 根据需要进行抽样和滤波,其中抽样的间隔为信号采样率的1/10,滤波采用汉明窗函数。
4. 对处理后的音频文件进行可视化,包括原始录音文件音频信号、频谱、原始录音文件音频信号的时频谱、经过抽样和滤波后的信号。
5. 将处理后的音频文件保存到本地,并使用`soundsc`函数播放原始录音文件与处理后的录音文件。
阅读全文