华南理工大学电信信号与系统实验5——语音信号的分析与处理

(1)通过对实际采集的语音信号进行分析和处理,获得数字信号处理实际应用的认识。

(2)熟悉信号的运算,包括平移与反转、相加、相乘等,掌握在MATLAB中进行信号频谱分析的基本方法;

(3)理解信号抽样的概念和抽样定理,掌握在MATLAB中处理语音信号的方法。

(4)掌握数字滤波器设计的知识,并通过对语音信号的去噪处理获得数字滤波器实际应用的知识。

(1)语音信号的获取;用麦克风自行采集两段语音信号[高频噪声人声+高频噪声](wav格式)0

(2)通过Matlab读入采集信号,观察其采样频率,并绘图采样信号语音信号的运算,包括平移和反褶、相加、相乘;3)周期信号的有限项傅里叶级数合成; (可用作仿真高频噪声

源)

(4)通过Matlab对语音信号进行谱分析,分析出噪声的频带

(5)连续时间信号的抽样;语音信号的抽样

(6)设计两种滤波器(频域、时域),对叠加入噪声的语音信号进行去噪处理。绘图并发声去噪后的信号。

下面是复制到word的代码,代码源码链接如下:

链接:https://pan.baidu.com/s/14jfXJ9Py9Ko8TQqu1ocmFQ?pwd=5y2v

提取码:5y2v

--来自百度网盘超级会员V4的分享

2、导入信号并画出原信号频谱图

% 导入语音文件

voice, Fs\] = audioread('myspeech.wav'); % 对语音信号进行谱分析 N = length(voice); f = (0:N-1)\*Fs/N; Y = abs(fft(voice)/N).\^2; % 绘制原信号频谱图 figure(1) plot(f, Y); xlim(\[0, Fs/2\]); xlabel('Frequency (Hz)'); ylabel('Power Spectral Density'); title('Spectrum of Voice Signal'); % 观察采样频率 Fs % 绘制采样信号的图形 t = (0:length(voice_noise)-1)/Fs; figure(2) plot(t, voice_noise); xlabel('Time (s)'); ylabel('Amplitude'); figure(3) title('Sampled Signal with Noise_add');%绘制带加性噪声的信号 plot(t, voice); xlabel('Time (s)'); ylabel('Amplitude'); title('Sampled Signal');%绘制原信号 平移 %信号平移 % 将语音信号向右平移 5s shift = 5\*Fs; % 平移 5s,单位为采样点 voice_shifted = \[zeros(shift,1); voice(1:end)\]; % 播放平移后的语音信号 sound(voice_shifted, Fs); % 绘制采样信号的图形 t = (0:length(voice_shifted)-1)/Fs; figure(5) plot(t, voice_shifted); xlabel('Time (s)'); ylabel('Amplitude'); title('Shifted Signal'); 反褶 %信号反褶 % 对语音信号进行反褶 voice_flipped = flip(voice); % 播放反褶后的语音信号 sound(voice_flipped, Fs); % 绘制采样信号的图形 t = (0:length(voice_flipped)-1)/Fs; figure(6) plot(t, voice_flipped); xlabel('Time (s)'); ylabel('Amplitude'); title('Flipped Signal'); sound(voice_flipped, Fs); 相加 % 生成高频噪声 noise = 0.03\*randn(length(voice),1); % 叠加噪声到语音信号上 %信号运算------相加 voice_noise = voice + noise; % 播放带加性噪声的语音信号 sound(voice_noise, Fs); 相乘 % 生成 5s 的乘性噪声 t = 0:1/Fs:5-1/Fs; f1 = 1000; % 第一个正弦波的频率 f2 = 3000; % 第二个正弦波的频率 noise_mul = sin(2\*pi\*f1\*t).\*sin(2\*pi\*f2\*t); % 将乘性噪声与语音信号相乘 voice_noise_mul = voice .\* noise_mul'; % 播放乘性噪声信号 sound(voice_noise_mul, Fs); % 绘制采样信号的图形 t = (0:length(voice)-1)/Fs; figure(4) plot(t, voice_noise_mul); xlabel('Time (s)'); ylabel('Amplitude'); title('Multiplicative Noise Signal'); sound(voice_noise_mul, Fs);%绘制带乘性噪声的信号,信号运算------相乘 3、周期信号的有限项傅里叶级数合成 % 信号参数 f = 5000; % 基频 fs = 100000; % 采样频率 T = 1/f; % 周期 N = 50; % 傅里叶级数项数 % 生成信号 t = 0:1/fs:T-1/fs; % 时间向量 x = sawtooth(2\*pi\*f\*t); % 锯齿波信号 % 计算傅里叶系数 a0 = mean(x); an = zeros(1,N); bn = zeros(1,N); for n = 1:N an(n) = 2/T \* trapz(t, x .\* cos(2\*pi\*n\*f\*t)); bn(n) = 2/T \* trapz(t, x .\* sin(2\*pi\*n\*f\*t)); end % 合成信号 x_hat = a0/2; for n = 1:N x_hat = x_hat + an(n)\*cos(2\*pi\*n\*f\*t) + bn(n)\*sin(2\*pi\*n\*f\*t); end % 绘制原始信号和合成信号 figure(1); plot(t, x, 'r', t, x_hat, 'b'); xlabel('时间 (s)'); ylabel('幅值'); legend('原始信号', '合成信号'); 这里我们生成了一个 5000 Hz 的锯齿波信号,并用有限项傅里叶级数合成生成了一个类似于高频噪声的信号。 4、对语音信号谱分析 % 对语音信号乘法噪声后的信号进行谱分析 N = length(voice_noise_mul); f = (0:N-1)\*Fs/N; Y = abs(fft(voice_noise_mul)/N).\^2; % 绘制谱图 figure(7) plot(f, Y); xlim(\[0, Fs/2\]); xlabel('Frequency (Hz)'); ylabel('Power Spectral Density'); title('Spectrum of Voice Signal with Noise'); 对比原信号频谱图和有噪声的频谱图,可看出噪声的频率区间。 5、探究不同抽样频率对采样信号的影响 % 读取语音信号 filename = 'myspeech.wav'; \[x, fs\] = audioread(filename); x = x(:, 1); % 取左声道 % 抽样频率 fs1 = 1000; fs2 = 2000; fs3 = 4000; fs4 = 8000; % 抽样 y1 = resample(x, fs1, fs); y2 = resample(x, fs2, fs); y3 = resample(x, fs3, fs); y4 = resample(x, fs4, fs); % 绘制信号 t1 = (0:length(y1)-1)/fs1; t2 = (0:length(y2)-1)/fs2; t3 = (0:length(y3)-1)/fs3; t4 = (0:length(y4)-1)/fs4; figure(1); subplot(5,1,1); plot(t1, y1); title(sprintf('抽样频率 %d Hz', fs1)); ylabel('幅值'); subplot(5,1,2); plot(t2, y2); title(sprintf('抽样频率 %d Hz', fs2)); ylabel('幅值'); subplot(5,1,3); plot(t3, y3); title(sprintf('抽样频率 %d Hz', fs3)); ylabel('幅值'); subplot(5,1,4); plot(t4, y4); title(sprintf('抽样频率 %d Hz', fs4)); ylabel('幅值'); subplot(5,1,5); plot((0:length(x)-1)/fs, x); title('原始信号'); xlabel('时间 (s)'); ylabel('幅值'); % 绘制频谱图 figure(2); subplot(5,1,1); spectrogram(y1, \[\], \[\], \[\], fs1, 'yaxis'); title(sprintf('抽样频率 %d Hz', fs1)); subplot(5,1,2); spectrogram(y2, \[\], \[\], \[\], fs2, 'yaxis'); title(sprintf('抽样频率 %d Hz', fs2)); subplot(5,1,3); spectrogram(y3, \[\], \[\], \[\], fs3, 'yaxis'); title(sprintf('抽样频率 %d Hz', fs3)); subplot(5,1,4); spectrogram(y4, \[\], \[\], \[\], fs4, 'yaxis'); title(sprintf('抽样频率 %d Hz', fs4)); subplot(5,1,5); spectrogram(x, \[\], \[\], \[\], fs, 'yaxis'); title('原始信号'); % 播放声音 sound(x, fs); pause(length(x)/fs); sound(y1, fs1); pause(length(y1)/fs1); sound(y2, fs2); pause(length(y2)/fs2); sound(y3, fs3); pause(length(y3)/fs3); sound(y4, fs4); 6、时域和频域滤波器滤去噪声 % 设计时域滤波器 \[b, a\] = butter(6, \[0.2, 0.4\], 'bandpass'); % 滤波器阶数为6,截止频率范围为0.2\~0.4 voice_noise_mul_filtered_1 = filter(b, a, voice_noise_mul); % 对混叠信号进行滤波 % 绘制时域图 t = (0:length(voice_noise_mul_filtered_1)-1)/Fs; figure(8); subplot(2,1,1); plot(t, voice_noise_mul_filtered_1); title('去除乘性噪声后的信号(时域)'); xlabel('时间 (s)'); ylabel('幅值'); % 绘制频谱图 N = length(voice_noise_mul_filtered_1); % 信号长度 f = linspace(0, Fs/2, N/2+1); % 构造频域坐标轴 Y = fft(voice_noise_mul_filtered_1); % 进行傅里叶变换 P = abs(Y(1:N/2+1)).\^2/N; % 计算功率谱密度 subplot(2,1,2); plot(f, P); title('频谱图'); xlabel('频率 (Hz)'); ylabel('功率谱密度'); % 播放处理后的信号 soundsc(voice_noise_mul_filtered_1, Fs); Fs = 8000; % 采样率为8kHz f = linspace(0, Fs, length(voice_noise_mul)); % 构造频域坐标轴 Hd = design(fdesign.lowpass('N,Fc', 6, 3000, Fs)); % 设计低通滤波器,截止频率为3000Hz voice_noise_mul_filtered_2 = filter(Hd, voice_noise_mul); % 对混叠信号进行滤波 % 绘制时域图 t = (0:length(voice_noise_mul_filtered_2)-1)/Fs; figure(9); subplot(2,1,1); plot(t, voice_noise_mul_filtered_2); title('去除乘性噪声后的信号(频域)'); xlabel('时间 (s)'); ylabel('幅值'); % 绘制频谱图 N = length(voice_noise_mul_filtered_2); % 信号长度 f = linspace(0, Fs/2, N/2+1); % 构造频域坐标轴 Y = fft(voice_noise_mul_filtered_2); % 进行傅里叶变换 P = abs(Y(1:N/2+1)).\^2/N; % 计算功率谱密度 subplot(2,1,2); plot(f, P); title('频谱图'); xlabel('频率 (Hz)'); ylabel('功率谱密度'); % 播放处理后的信号 soundsc(voice_noise_mul_filtered_2, Fs);

相关推荐
软件算法开发3 分钟前
基于贝叶斯估计的多传感器数据融合算法matlab仿真
算法·matlab·贝叶斯估计·多传感器数据融合
Hi_Lyn1 小时前
MySQL表的增删改查进阶版
数据库·笔记·mysql·学习方法
阿图灵3 小时前
文章记单词 | 第30篇(六级)
学习·学习方法
txhy20185 小时前
【时频谱分析】短时傅里叶变换
信号处理·短时傅里叶变换·时频谱分析·stft
软件算法开发5 小时前
基于HASM模型的高精度建模matlab仿真
matlab·hasm模型·高精度建模
郜太素7 小时前
决策树+泰坦尼克号生存案例
人工智能·算法·决策树·机器学习·数据挖掘·学习方法
freexyn8 小时前
Matlab学习笔记五十:循环语句和条件语句的用法
笔记·学习·matlab
uncle_ll9 小时前
李宏毅NLP-3-语音识别part2-LAS
人工智能·自然语言处理·语音识别·las
L73S379 小时前
MySQL数据类型
mysql·考研·学习方法
weixin_4284984912 小时前
在MATLAB中使用MPI进行并行编程
matlab