1读取带噪语音文件并进行预处理y Fs = audioreadCUsersASUSDesktop20230607_210020wav; 读取音频文件y = y 1; 取单声道信号y = y maxabsy; 幅值归一化 2谱减法增强处理win = hamming256 periodic; 窗函数nfft = 512; FFT点数N = lengthy; 信号长度n = 0255;
% 定义overlap_add函数 function y = overlap_add(Y, win, inc) % Y: 帧序列 % win: 窗函数 % inc: 帧移 % y: 信号序列 nfft = size(Y, 1); % FFT点数 N = (size(Y, 2) - 1) * inc + nfft; % 信号长度 y = zeros(N, 1); % 初始化信号序列 for i = 1:size(Y, 2) y((i-1)*inc+1:(i-1)*inc+nfft) = y((i-1)*inc+1:(i-1)inc+nfft) + ... real(ifft(Y(:, i), nfft)) . win; % IFFT重叠相加 end end
% 1.读取带噪语音文件,并进行预处理 [y, Fs] = audioread("C:\Users\ASUS\Desktop\20230607_210020.wav"); % 读取音频文件 y = y(:, 1); % 取单声道信号 y = y / max(abs(y)); % 幅值归一化
% 2.谱减法增强处理 win = hamming(256, 'periodic'); % 窗函数 nfft = 512; % FFT点数 N = length(y); % 信号长度 n = 0:255; % 帧长 inc = 128; % 帧移 Y = buffer(y, 256, 128, 'nodelay'); % 分帧 Y = Y .* repmat(win, 1, size(Y, 2)); % 加窗 Y = fft(Y, nfft, 1); % FFT Y_abs = abs(Y); % 取模 Y_phase = angle(Y); % 取相 noise = Y_abs(:, 1:8); % 噪声估计(取前8帧) noise_mean = mean(noise, 2); % 平均噪声功率谱 alpha = 2; % 平滑系数 for i = 1:size(Y_abs, 2) Y_abs(:, i) = max(Y_abs(:, i) - alpha * noise_mean, 0); % 谱减法 end Y_enhanced = real(ifft(Y_abs .* exp(1j * Y_phase), nfft, 1)); % IFFT Y_enhanced = Y_enhanced(1:256, :); % 去除重叠部分 y_enhanced = overlap_add(Y_enhanced, win, inc); % 重叠相加 y_enhanced = y_enhanced(1:N); % 去除补零部分
% 3.计算语音增强前后的信噪比 snr_before = snr(y, y - y_enhanced); % 增强前的信噪比 snr_after = snr(y, y_enhanced); % 增强后的信噪比
% 4.生成增强后的语音文件 audiowrite('enhanced_speech.wav', y_enhanced, Fs); % 保存增强后的语音信号
% 5.对语音增强效果进行分析 t = (0:N-1) / Fs; % 时间序列 subplot(2, 2, 1); plot(t, y); title('Noisy Speech'); xlabel('Time (s)'); ylabel('Amplitude'); subplot(2, 2, 2); plot(t, y_enhanced); title('Enhanced Speech'); xlabel('Time (s)'); ylabel('Amplitude'); Y_before = abs(fft(y, nfft)); % 增强前的频谱 Y_after = abs(fft(y_enhanced, nfft)); % 增强后的频谱 f = (0:nfft-1) / nfft * Fs; % 频率序列 subplot(2, 2, 3); plot(f, Y_before); title('Spectrum of Noisy Speech'); xlabel('Frequency (Hz)'); ylabel('Magnitude'); subplot(2, 2, 4); plot(f, Y_after); title('Spectrum of Enhanced Speech'); xlabel('Frequency (Hz)'); ylabel('Magnitude')
原文地址: https://www.cveoy.top/t/topic/hb8X 著作权归作者所有。请勿转载和采集!