西南科技大学
课 程 设 计 报 告
课程名称:
数字通信课程设计
设计名称:
音频信号的谱分析及去噪
姓 名:
董
旭
学 号:
20074920
班 级:
通信 0702
指导教师:
肖 有 平
起止日期:
2010.6.28-2010.7.9
西南科技大学信息工程学院制
课 程 设 计 任 务 书
学生班级: 通信 0702
设计名称: 正弦信号的谱分析及提取
学生姓名: 董旭 学号: 20074920
起止日期:
2010.6.28-2010.7.9
指导教师: 肖有平
设计要求:
基本要求:
● 录制一段音频(如歌曲,说话声等),采用 Matlab 工具对此音频信号用 FFT 作
谱分析。
录制一段加入噪声的音频(如在歌声中加入尖锐的口哨声或者其他噪声),采用
Matlab 工具对此音频信号用 FFT 作谱分析。
选择合适的指标,设计 FIR 数字滤波器,将音频中加入的噪声信号减弱或滤除。
扩展要求:
将处理后的音频信号重新生成.wav 文件,收听该音频,根据效果调整滤波器指
标重新设计滤波器。
说明:
录制音频信号可以采用 Windows 附件中的录音机,在 Matlab 中打开音频文件可
以调用 wavread 函数,生成.wav 文件可以调用 wavwrite 函数。
设计 FIR 数字滤波器可以采用 matlab 函数或者工具箱中 FDA 工具。
课 程 设 计 学 生 日 志
时间
设计内容
2010.6.28
仔细审视题目,构想要用到的相关理论知识
2010.6.30
确定实现方案,确定实现方法
2010.7.1
2010.7.3
2010.7.6
2010.7.8
翻阅书籍,查阅要用到的相关知识和理论
对整体分割进行分块实现 进行初步设计
进行整体实现,观察其中存在的问题
系统进行整体调试,改正之前测试时的错误,基本保证正确
课 程 设 计 考 勤 表
周
星期一
星期二
星期三
星期四
星期五
课 程 设 计 评 语 表
指导教师评语:
成绩:
指导教师:
年 月 日
一、设计目的和意义
熟悉 Matlab 的语言和程序结构,并利用他处理数字信号处理中的相关问题,利用
FFT 求语音信号的频谱;熟悉 FIR 滤波器的设计流程,各参数的意义及其设定要求,并
能利用 FIR 滤波器处理噪声信号。
二、设计原理
利用 Matlab 的数据处理功能,画出原始语音和含噪声的语音信号的时域图形,并
用 Matlab 编程实现对信号的 FFT 变换得到信号频谱,然后 Matlab 编程设计 FIR 滤波器,
并对含噪声的语音信号进行处理,得到原始无噪声时的语音信号。
三、详细设计步骤
(1)、利用电脑自带的录音器录制一段无噪声的语音信号,再录制一段相同的语音
信号,但在录制过程中加入尖锐的噪声语音。
(2)、Matlab 编程实现对原始语音信号和含噪声的语音信号进行时域和频域的分
析,观察两种信号在时域和频域分析下的不同之处。
%语音信号采样频率为 22050
%播放语音信号
%对信号做 10 点 FFT 变换
对原始语音信号做时域和频域的 Matlab 编程如下:
fs=22050;
[x1,fs,NBTS]=wavread('D:\课程设计\x1.wav'); % x1 为原始语音信号
[m,n]=size(x1);
x1=wavread('d:\课程设计\x1.wav'); %读取语音信号的数据,赋给变量 x1
sound(x1,22050);
y1=fft(x1,1024);
f=fs*(0:511)/1024;
figure(1)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
title('经过 FFT 频谱');
xlabel('Hz');
subplot(2,1,2);
plot(linspace(0,m/fs,m),x1);
title('原始语音信号');
xlabel('Time');
ylabel('Value');
axis([0 0.18 -2 2]);
grid on
%图形显示范围
%做原始语音信号的 FFT 频谱图
%做原始语音信号的时域图
经过上面的程序得到原始语音信号的时域和频域图如下面图 1 所示:
图 1 原始语音信号
图 2 噪声语音信号
%语音信号采样频率为 22050
%D5 为噪声信号
%读取语音信号的数据,赋给变量 x1
%播放语音信号
%对信号做 10 点 FFT 变换
%做原始语音信号的 FFT 频谱图
同样可得到噪声信号的时域和频谱图,更改程序如下:
fs=22050;
[x1,fs,NBTS]=wavread('D:\课程设计\d5.wav');
[m,n]=size(x1);
x1=wavread('d:\课程设计\d5.wav');
sound(x1,22050);
y1=fft(x1,1024);
f=fs*(0:511)/1024;
figure(1)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
title('噪声语音信号频谱');
xlabel('Hz');
subplot(2,1,2);
plot(linspace(0,m/fs,m),x1);
title('噪声语音信号');
xlabel('Time');
ylabel('Value');
axis([0 0.025 -2 2]);
grid on
经过上面的程序得到噪声信号的时域和频域图如图 2 所示。
要得到含噪声后的语音信号频谱,Matlab 编程和求原始信号的 Matlab 编程基本相
同,只是把读取语音信号的路径改成号噪声的语音信号的路径即可。既改动如下:
%语音信号采样频率为 22050
%读取语音信号的数据,赋给变量 x1
%播放语音信号
%对信号做 10 点 FFT 变换
fs=22050;
[x1,fs,NBTS]=wavread('D:\课程设计\noise.wav'); % noise 为含噪声的语音信号
[m,n]=size(x1);
x1=wavread('d:\课程设计\noise.wav');
sound(x1,22050);
y1=fft(x1,1024);
f=fs*(0:511)/1024;
figure(1)
subplot(2,1,1);
plot(f,abs(y1(1:512)));
title('含噪声语音信号频谱');
xlabel('Hz');
subplot(2,1,2);
plot(linspace(0,m/fs,m),x1);
title('含噪声语音信号');
xlabel('Time');
ylabel('Value');
axis([0 0.25 -2 2]);
grid on
%做含噪声语音信号的 FFT 频谱图
%做含噪声的语音信号的时域图
%图形显示范围
经过上面的程序得到含噪声的语音信号的时域和频域图如下面图 3 所示:
图 3 含噪声语音信号
通过程序运行,发现在含噪声的语音中能听见明显的尖锐噪声,经过仔细观察两张
图片也能得知,含噪声的语音信号的时域图发生了一定的失真,拼谱图中在高频段(相
对而言)能看到明显的毛刺,这些都是噪声造成的。
(3)、FIR 数字滤波器的设计与实现。根据上面得到的含有噪声的语音信号的频谱
可知,噪声信号的频谱主要集中在信号的高频部分,因此可以考虑设计一个线性相位 FIR
低通滤波器来实现将低频的原始语音信号通过,而将高频的噪声信号除去。
根据含噪声信号的频谱中可以看出:噪声信号主要集中在 500Hz 及以上的频率。
因此可以设定 FIR 数字滤波器的通带边缘频率 Wp=0.6pi,阻带边缘频率 Ws=0.7pi,采
样频率:Fs=1.7KHz,通带波纹:rp=0.01dB;阻带衰减:rs=0.1Db;
经计算得相应数字滤波器的指标: 通带截止频率:fp=0.6*Fs/2≈500Hz,阻带截止频率:
fs=0.7*Fs/2≈600Hz, Matlab 编程程序如下,做出的 FIR 低通滤波器的频谱图如图 4
所示: Fs=1700;
%通带截止频率
%通带纹波系数
%阻带衰减系数
fp=0.6*Fs/2;
rp=0.01;
fs=0.7*Fs/2;
rs=0.1;
f= [fp fs];
A=[1 0];
dev=[rp rs];
[n,f0,m0,w]=remezord(f,A,dev,Fs);
b=remez(n,f0,m0,w);
[h,w]=freqz(b,1,256,1);
h=abs(h);
h=20*log10(h);
figure(1)
subplot(2,1,1);
plot(w,h);
grid on;
title('FIR 低通滤波器')
xlabel('频率(归一化)');
ylabel('幅度(dB)');
%确定最优 FIR 滤波器的最小阶数 n
%滤波器的设计参数 b 的确定
%画出 FIR Digital filter 的频率响应特性
图 4 FIR 低通滤波器频谱图
(4)、利用 FIR 低通滤波器对含噪声的语音信号进行处理。在上面的 Matlab 编程
中,已经实现了 FIR 低通滤波器,观察滤波器的频谱和含噪声的语音信号的频谱,可以
得知将两信号的频域相乘便能实现滤除噪声实现对含噪声的语音信号的去噪处理。由信
号与系统的相关知识可得:频域相乘时域相卷,故在频域相成难以实现的情况下采用时
域相成的方法实现对语音信号的去噪处理。
实现该功能的完整 Matlab 程序如下:
%FIR 低通滤波器,设采用频率为 1700Hz
%通带截至频率
%通带波纹系数
%阻带起始频率
%阻带衰减系数
%确定最优 FIR 滤波器的最小阶数 n
%滤波器的设计参数 b 的确定
%画出 FIR Digital filter 的频率响应特性
Fs=1700;
fp=0.6*Fs/2;
rp=0.01;
fs=0.7*Fs/2;
rs=0.1;
f= [fp fs];
A=[1 0];
dev=[rp rs];
[n,f0,m0,w]=remezord(f,A,dev,Fs);
b=remez(n,f0,m0,w);
[h,w]=freqz(b,1,256,1);
h=abs(h);
h=20*log10(h);
figure(1)
subplot(2,1,1);
plot(w,h);
grid on;
title('FIR 低通滤波器')
xlabel('频率(归一化)');
ylabel('幅度(dB)');
fs=22050;
[x1,fs,NBTS]=wavread('D:\课程设计\x1.wav');
[m,n]=size(x1);
x1=wavread('d:\课程设计\x1.wav');
y1=fft(x1,1024);
f=fs*(0:511)/1024;
subplot(2,1,2);
plot(f,abs(y1(1:512)));
title('原始语音信号频谱(无噪声)');
xlabel('Hz');
fs=22050;
[x1,fs,NBTS]=wavread('D:\课程设计\noise.wav');
[m,n]=size(x1);
x1=wavread('d:\课程设计\noise.wav');
y1=fft(x1,1024);
f=fs*(0:511)/1024;
%语音信号采样频率为 22050
%读取语音信号的数据,赋给变量 x1
%对信号做 1024 点 FFT 变换
%做原始语音信号的 FFT 频谱图
%原始语音信号频谱(有噪声)
%读取语音信号的数据,赋给变量 x1