目录
摘要...................................................................................................................... 2
1 课程设计实现................................................................................................ 3
1.1 整体设计思路............................................................................................3
1.2 整体实现过程..........................................................................................3
1.2.1 信号的采样....................................................................................... 3
1.2.2 语音信号的读取............................................................................... 5
1.2.3 语音信号的频谱分析....................................................................... 6
1.2.4 噪声信号的构建............................................................................... 7
1.2.5 加入噪声的语音信号的频谱........................................................... 8
2 数字滤波器的设计........................................................................................ 9
2.1 滤波器的设计原理.................................................................................... 9
2.2 滤波器的性能指标................................................................................10
2.3 IIR 数字滤波器设计..............................................................................10
2.4 FIR 数字滤波器设计..............................................................................12
2.5 滤波器对信号滤波................................................................................. 13
2.6 语音信号回放......................................................................................... 17
3 心得体会...................................................................................................... 17
4 主要参考资料.............................................................................................. 18
附录.................................................................................................................... 20
1
摘要
MATLAB 语言是一种数据分析和处理功能十分强大的计
算机应用软件 ,它可以将声音文件变换为离散的数据文件 ,
然后利用其强大的矩阵运算能力处理数据 ,如数字滤波 、傅里
叶变换 、时域和频域分析 、声音回放以及各种图的呈现等 ,
信号处理是 MATLAB 重要应用的领域之一 。
本课程设计介绍了基于 Matlab 的对语音信号采集、处理
及滤波器的设计,并使之实现的过程。理解与掌握课程中的基
本概念、基本原理、基本分析方法,用 Matlab 进行数字语音信
号处理,并阐述了课程设计的具体方法、步骤和内容。综合运
用本课程的理论知识进行频谱分析以及滤波器设计,通过理论
推导得出相应结论,并利用 MATLAB 作为工具进行实现,从而复
习巩固课堂所学的理论知识,提高对所学知识的综合应用能力,
并从实践上初步实现对数字信号的处理。
关键词: MATLAB 工具 信号语音采集 滤波器
2
1 课程设计实现
1.1 整体设计思路
Matlab 语言是一种数据分析和处理功能十分强大的计算机应用软
件 ,它可以将声音文件变换为离散的数据文件 , 然后利用其强大的矩阵
运算能力处理数据 ,如数字滤波 、傅里叶变换 、时域和频域分析 、声音
回放以及各种图的呈现等 , 信号处理是 Matlab 重要应用的领域之一 。
本文是用 Matlab对含噪的的语音信号同时在时域和频域进行滤波处理和
分析。整个设计思路的设计原理示意图如图 1 所示:
1.2 整体实现过程
1.2.1 信号的采样
采 样 器 的 作 用 是 把 连 续 信 号 变 为 脉 冲 或 数 字 序 列 。 图
中 示 出 了 一 个 连 续 信 号 f ( t ) 经 采 样 器 采 样 后 变 为 离 散 信 号
的 过 程
3
图 2 连 续 信 号 f ( t ) 经 采 样 器 采 样 后 变 为 离 散 信 号
图 中 f ( t ) 为 被 采 样 的 连 续 信 号 , S ( t ) 为 周 期 性 窄 脉 冲 信
号 , f s ( t ) 为 采 样 后 的 离 散 信 号 , 它 用 下 式 来 表 征 :
f s ( t ) = f ( t ) s ( t )
采 样 信 号 的 频 率 特 性 为 :
如 果 | F* ( jω) | 中 各 个 波 形 不 重 复 搭 接 ,相 互 间 有 一
定 的 距 离 ( 频 率 ) 即 若
即 采 样 定 理 可 叙 述 如 下 :如 果 采 样 周 期 满 足 下 列 条 件 ,
即 :
式 中 ω m a x 为 连 续 信 号 f(t) 的 最 高 次 谐 波 的 角 频 率 。
则 采 样 信 号 f* ( t )
就 可 以 无 失 真 地 再 恢 复 为 原 连 续 信 号 f(t) 。需 要 指 出 的 是 ,
采 样 定 理 只 是 在 理 论 上 给 出 了 信 号 准 确 复 现 的 条 件 。
我们可以利用windows自带的录音机录制语音文件,进行数字信号的采
集。(开始—程序—附件—娱乐—录音机,文件—属性—立即转换—8000KH
z,8位,单声道)或其他软件,将话筒输入计算机的语音输入插口上,
4
启动录音机,录制一段自己的话音。然后在MATLAB软件平台下,利用函数
wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函
数的使用进一步理解采样频率、采样位数等概念。图2是基于PC机的语音信
号采集过程:
声音
麦克风
声卡
滤波
采样
A/D 转换
Wav
Windows 自带录音机
图3 语音采集过程
1.2.2 语音信号的读取
在 matlab 软件平台下,利用 wavread 函数对语音信号进行采样,记住
采样频率和采样点数。通过使用 wavread 函数,理解采样频率、采样位数
等概念。
wavread 函数调用格式
y=wavread(file),读取 file 所规定的 wav 文件,返回采样值放在
向量 y 中。
[y,fs,nbits]=wavread(file),采样值放在向量 y 中,fs 表示采样
频率(hz),nbits 表示采样位数。
y=wavread(file,N),读取钱 N 点的采样值放在向量 y 中。
y=wavread(file,[N1,N2]),读取从 N1 到 N2 点的采样值放在向
量 y 中。
对语音信号“zx.wav”进行采样其程序如下:
[y,fs,nbits]=wavread('zx.wav')
5
结果如下:
可知该语音信号的采样频率fs = 8000Hz ,数据位nbits = 16Bit。
1.2.3 语音信号的频谱分析
首先画出语音信号的时域波形,然后对语音信号进行频谱分析。在
Matlab 中可以利用函数 fft 对信号行快速傅里叶变换,得到信号的频谱
特性,从而加深对频谱特性的理解。
其程序如下:
[y,fs,nbits]=wavread ('yuyin.wav ');
% 把 语 音 信 号 进 行 加 载 入
Matlab 仿真软件平台中
sound(y,fs,nbits);
%回放语音信号
n = length (y) ;
%求出语音信号的长度
Y=fft(y,n);
%快速傅里叶变换
6
subplot(2,1,1);plot(y);title('原始信号波形');
subplot(2,1,2);plot(abs(Y));title('原始信号频谱')
程序结果如下图 3:
图 4 语音信号的频谱
1.2.4 噪声信号的构建
利用 MATLAB 中的随机函数(randn)产生噪声加入到语音信号中,模
仿语音信号被污染,并对其进行频谱分析。程序如下:
N=length(y);
%求出语音信号的长度
noise=rand(N,2)/20;
%噪声信号的函数
z=fft(noise);
%快速傅里叶变换
subplot(2 ,1 ,1),plot(noise);title('噪声信号波形');
subplot(2 ,1 ,2),plot(abs(z));title('噪声信号频谱');
7
axis([0,250000,0,100]);
图 5 噪声信号的频谱
1.2.5 加入噪声的语音信号的频谱
matlab 程序如下:
y=wavread(' yuyin.wav');
N=length(y);
noise=rand(N,2)/20;
s=y+noise;
%噪声信号的叠加
Subplot(2,1,1);
plot(s);title ('滤波前的时域波形');
S=fft(s);
Subplot(2,1,2);
plot(abs(S));title ('滤波前的频域波形');
axis([0,45000,0,200]);
8