语音信号处理-语音信号的预处理

实验二 语音信号的预处理

一、实验目的

(1)了解 MATLAB 采集语音信号的原理及常用命令;
(2)熟练掌握基于 MATLAB 的语音文件的创建、读写等基本操作;
(3)学会使用 Plot 命令来显示语音信号波形,并掌握基本的标注方法;
(4) 掌握语音信号预处理方法。

二、实验要求

(1)编写 MATLAB 程序实现录制语音信号“你好,欢迎.”,并保存为 “hello.wav”文件,要求采样频率为 16000Hz,采样精度 16 bit;
(2)使用 audioread 函数读取“hello.wav”文件,并使用 plot 函数显示出来。要求:横轴和纵轴带有标注。横轴的单位为秒,纵轴显示的为归一化后的数值。
(3)测试 MATLAB 的去线性趋势项函数 detrend 的作用。根据消除多项式趋势项的原理,编写消除多项式趋势项的函数 detrendN,并仿真测试,参考语音信号“hello.wav”。
(4)设计一个低通滤波器,并绘出其幅频和相频曲线。设计指标为:fs=800Hz,Wp=50Hz,Ws=60Hz, Rp=3dB,Rs=80dB。

三、实验程序

  1. 语音采集与读写
%语音采集与读写
fs = 16000;
duration = 5;                                
n=duration*fs;
t=(1:n)/fs;
recorder = audiorecorder(fs,16,2);  % 采样频率16000,采样位数16位,采样通道:2
disp('Start speaking.')
recordblocking(recorder, 5);  
disp('End of Recording.');
fprintf('Finish\n');
fprintf('Press any key to play audio:\n');
pause
play(recorder);
myRecording = getaudiodata(recorder);
sound(myRecording,fs);
clear sound;
audiowrite('D:hello.wav',myRecording,fs);
figure(1);  
axis([0 5 -1 1]); 
plot(t,myRecording,'Color',[0.5,0.5,0.6]); 
xlabel('时间/s');
ylabel('幅度');
sgtitle('语音采集与读写')
  1. 消除多项式趋势项
%消除多项式趋势项
clear all; clc; close all;
[x,fs]=audioread('hello.wav');            % 读入语音文件
len=length(x);
n=0.5:0.3/(len-1):0.8;                    %设置线性曲线
x=x+n';                                   % 叠加线性趋势线
t=(0:length(x)-1)/fs;                     % 设置时间
y=detrend(x);                             % 消除线性趋势项
y=y/max(abs(y));                          % 幅值归一化
subplot 211; plot(t,x,'k');               % 画出带有趋势项的语音信号x
title('带趋势项的语音信号');
xlabel('时间/s'); ylabel('幅值');
subplot 212; plot(t,y,'k');               % 画出消除趋势项的语音信号y
xlabel('时间/s'); ylabel('幅值');
title('消除趋势项的语音信号');
sgtitle('消除趋势项')

%消除多项式趋势项函数
function [y,xtrend]=detrendN(x, fs, m)
x=x(:);               % 把语音信号x转换为列数据
N=length(x);          % 求出x的长度
t= (0: N-1)'/fs;      % 按x的长度和采样频率设置时间序列
a=polyfit(t, x, m);   % 用最小二乘法拟合语音信号x的多项式系数a
xtrend=polyval(a, t); % 用系数a和时间序列t构成趋势项
y=x-xtrend;           % 从语音信号x中清除趋势项
end
  1. 数字滤波器
%低通滤波器
clc
clear all
fs=800;            
%把截止频率转成弧度表示
wp = 50/(fs/2);
ws = 60/(fs/2); 
rp=3; % 通带纹波系数
rs=80;% 阻带衰减系数
Nn=500;
[n,wn]=ellipord(wp,ws,rp,rs);
[b,a]=ellip(n,rp,rs,wn);
freqz(b,a,Nn,fs);
xlabel('频率(Hz)');ylabel('幅值(dB)');
sgtitle('低通滤波器')

四、实验结果

1.语音采集与读写
在这里插入图片描述
2.消除多项式趋势项
在这里插入图片描述
3.数字滤波器
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_51380854/article/details/127564504