石家庄铁道大学课程设计
数字信号处理课程设计
2016 届 电气与电子工程学院
专
学
业
号
学生姓名
指导教师
通信工程
20163224
谭鑫淼
马月红
完成日期 2019 年 6 月 14 日
目录
一、课程设计目的..................................................................................... 1
二、设计报告内容要求............................................................................. 1
三、主要原理和拟采用的相关技术......................................................... 1
四、设计方案..............................................................................................2
五、实验结果分析..................................................................................... 3
六、总结....................................................................................................12
一、课程设计目的
⒈ 进一步巩固数字信号处理中的基本原理与方法,提高分析、解决实际问
题的能力;
⒉ 熟悉 MATLAB 软件,掌握数字信号处理的基本概念、基本理论和基本
方法,掌握语音信号的采集方法;
⒊ 掌握应用 MATLAB 软件进行信号分析和处理的过程,熟练掌握利用
MATLAB 设计数学滤波器的方法和设计过程;
4. 掌握信号降噪方法(滤波)。
二、设计报告内容要求
1.选择一个语音信号作为分析对象,或录制一段语音信号;
2. 对语音信号进行采样,画出采样后语音信号的时域波形和频谱图;
3.利用 MATLAB 中的正弦函数产生噪声加入到语音信号中,使语音信号被
噪声污染,然后进行频谱分析;
4.设计 FIR 和 IIR 数字滤波器,并对被噪声污染的语音信号进行滤波,画出
滤波前后信号的时域波形和频谱,并对滤波前后的信号进行比较,分析信号的变
化;
5. 回放语音信号。
三、主要原理和拟采用的相关技术
1.主要原理
FFT 算法原理,FIR DF 设计原理,IIR DF 设计原理;
2.语音信号的采集
利用 PC 机上的声卡和 WINDOWS 操作系统可以进行数字信号的采集。将
话筒输入计算机的语音输入插口上,启动录音机。按下录音按钮,接着对话筒说话
“语音信号处理”,说完后停止录音,屏幕左侧将显示所录声音的长度。点击放音按
钮,可以实现所录音的重现。以文件名“sound”保存入 g :\the sound 文件夹中。可
以看到,文件存储器的后缀默认为. wav ,这是 WINDOWS 操作系统规定的声音文
件存的标准。
3.Matlab 软件平台下,利用 wavread 函数对语音信号进行采样,记住采样
频率和采样点数。
Wavread 函数调用格式:
y=wavread(file)%读取 file 所规定的 wav 文件,返回采样值放在向量 y 中。
1
[y,Ft,nbits]=wavread(file) %采样值放在向量 y 中,fs 表示采样频率(Hz),
nbits 表示采样位数。
y=wavread(file,N)%读取钱 N 点的采样值放在向量 y 中。
y=wavread(file,[N1,N2])%读取从 N1 到 N2 点的采样值放在向量 y 中。
4.语音信号频谱分析
MATLAB 提供的 DFT 的快速算法 FFT 函数可以方便的计算并分析导入音频
的频谱图。
5. 产生的正弦信号作为噪声信号,加入语音信号,分析加噪声后信号频谱,
加噪后语音回放。
6.根据参数设计设计 FIR、IIR 数字滤波器
在 Matlab 中,可以利用函数 fir1 设计 FIR 滤波器,利用函数 butter,cheby1
和 ellip 设计 IIR 滤波器,利用 Matlab 中的函数 freqz 画出滤波器的频率响应。
分析如下:函数 fir1 默认的设计滤波器的方法为窗函数法,其中可选的窗函
数有 Rectangular、Barlrtt、Hamming、Hann、Blackman 窗,其相应的都有实现
函数。
函数 butter,cheby1 和 ellip 设计 IIR 滤波器时都是默认的双线性变换法,所以
在设计滤波器时只需要代入相应的实现函数即可。
7.用设计的滤波器对加噪语音信号进行滤波
用自己设计的各滤波器分别对加噪的语音信号进行滤波,在 Matlab 中,FIR
滤波器利用函数 fftfilt 对信号进行滤波,IIR 滤波器利用函数 filter 对信号进行滤
波。对比分析滤波前后信号频谱,语音回放对比。
四、设计方案
1.录制或者下载一个 WAV 音频格式的文件,使用 matlab 自带函数 audioread
和 audiowrite 函数进行音频文件的读取、截短和生成。(截取 10 秒的音频数据,
便于程序调试)
2.使用 matlab 自带的 fft 函数对所截取的音频数据进行 DFT,再求幅值,求
完幅值后取一半的点数用于画图,频率根据抽样点数恢复其实际频率,之后在用
plot 函数画出音频数据的时域波形和频域波形。
3.再选择一个频率大于 4410Hz 的正弦波,进行离散化处理,作为噪声叠加
在原音频数据上,再对加噪声之后的音频数据进行时域波形和频域频谱的分析。
4.之后再选择合适的滤波器
选择 FIR 滤波器:使用布莱克曼窗,选择截频为 0.2*pi(归一化截止频率),
对应实际的截止频率为 4410Hz,通带衰减为 0.25dB。阻带衰减为 80dB。
2
选择 IIR 滤波器:使用双线性变换法,选择截频为 0.18*pi(归一化截止频
率),对应实际的截止频率为 4000Hz。通带衰减为 0.5d,阻带衰减为 30dB。
5.调整 x 轴使其在坐标轴上显示出实际频率对应的频谱值以及时域波形。
五、实验结果分析
1.录制或者截取一段音频数据,分析出其时域波形及频谱,如图 5.1 所示。
[y0,Fs]=audioread('tongzhuo.wav');
data = y0(1:10*Fs);%截取 10 秒
audiowrite('myData.wav',data,Fs);
[y,Fs]=audioread('myData.wav');
sound(y,Fs);Nsamps = length(y);
t = (1/Fs)*(1:Nsamps) ;%为绘图准备时间数据%进行傅里叶变换
y_fft = abs(fft(y)); %求出音频数据做完 FFT 后的幅值
y_fft = y_fft(1:Nsamps/2); %取一半点数
f = Fs*(0:Nsamps/2-1)/Nsamps; %求出频率
figure%画时域图 subplot(2,1,1)
plot(t, y);xlabel('时间(s)');
ylabel('Amplitude');title('音频信号时域波形图');
subplot(2,1,2);%画出频域图 plot(f, y_fft);
xlim([0 3500]);xlabel('频率(Hz)');
ylabel('幅度');title('音频信号频谱图');
图 5.1 原始音频数据的时域波形和频谱图
3
2.使用 matlab 进行加噪处理,加入 4500Hz、4700Hz、5000Hz 的正弦噪声污
染原音频数据,其实验结果如图 5.2 和图 5.3 所示。
[y0,Fs]=audioread('tongzhuo.wav');
data = y0(1:10*Fs);%截取 10 秒
audiowrite('myData.wav',data,Fs);
[y,Fs]=audioread('myData.wav');y0=y;
y0_fft = abs(fft(y0)); %求出音频数据做完 FFT 后的幅值
y0_fft = y0_fft(1:Nsamps/2); %取一半点数
fy0 = Fs*(0:Nsamps/2-1)/Nsamps; %求出频率
Nsamps = length(y);t = (1/Fs)*(1:Nsamps) ;%为绘图准备时间数据
n=0:Nsamps-1;h=n/Fs; %时间序列
y1=(0.11*sin(2*pi*5000*h)).'+(0.15*sin(2*pi*4500*h)).'+(0.03*sin(2*pi*4700*
h)).'; %信号
y=y+y1;sound(y,Fs);
y_fft = abs(fft(y)); %求出音频数据做完 FFT 后的幅值
y_fft = y_fft(1:Nsamps/2); %取一半点数
f = Fs*(0:Nsamps/2-1)/Nsamps; %求出频率
figure%画时域图
subplot(2,1,1);plot(t, y0);xlabel('时间(s)');
ylabel('幅值');title('原始音频信号时域波形图');
subplot(2,1,2);plot(t, y);xlabel('时间(s)');
ylabel('幅值');title('加噪声后音频信号时域波形图');
figure%画出频域图
subplot(2,1,1);plot(f, y0_fft);
axis([0 6000 0 3000]);xlabel('频率(Hz)');
ylabel('幅度');title('原始音频信号频谱图');
subplot(2,1,2);plot(f, y_fft);
axis([0 6000 0 3000]);xlabel('频率(Hz)');
ylabel('幅度');title('加噪声后音频信号频谱图');
4
图 5.2 原始音频与加噪后音频时域波形对比
图 5.3 原始音频与加噪后音频频谱图对比
3. 滤波结果分析。
3.1 使用 FIR 滤波器
FIR 滤波器的归一化参数如图 5.4 所示,时域滤波过程如图 5.5 所示,频域
滤波过程如图 5.6 所示。
[y,Fs]=audioread('myData.wav');
Nsamps = length(y);y0=y;
5
y0_fft = abs(fft(y0)); %求出音频数据做完 FFT 后的幅值
y0_fft = y0_fft(1:Nsamps/2); %取一半点数
fy0 = Fs*(0:Nsamps/2-1)/Nsamps; %求出频率
% sound(y0,Fs);%播放未加噪声的音频信号
t = (1/Fs)*(1:Nsamps) ;%为绘图准备时间数据%进行傅里叶变换
n=0:Nsamps-1;h=n/Fs; %时间序列
y1=(0.11*sin(2*pi*5000*h)).'+(0.15*sin(2*pi*4500*h)).'+(0.03*sin(2*pi*4700*
h)).'; %信号
y=y+y1;%加噪声之后的信号
sound(y,Fs);%播放加噪之后的音频信号
y_fft = abs(fft(y)); %求出音频数据做完 FFT 后的幅值
y_fft = y_fft(1:Nsamps/2); %取一半点数
f = Fs*(0:Nsamps/2-1)/Nsamps; %求出频率%IIR 双线性变换法
Rp=0.25;As=80; % 通带波纹和阻带衰减
wp = 0.1*pi; ws = 0.2*pi; % 通带和阻带归一化角频率
deltaw= abs(wp - ws);% 过渡带宽Δω的计算
N =101;%ceil(7*pi/ deltaw)%按海明窗计算所需的滤波器阶数 N
N=mod(N,2)+N;%让 N 为偶数
wind = (blackman(N+1))';% 海明窗计算
Wn=(wp+ws)/2/pi; % 计算截止频率
b=fir1(N,Wn,wind);% 用 fir1 函数设计 FIR 第 1 类滤波器
[db,mag,phs,gdy,w]=freqz_m(b,1); %计算滤波器响应
figure;subplot 211; plot(w/pi,db,'k','linewidth',2);% 作图
title('低通滤波器的幅值响应(数据 1、N=45)');%标题
grid; axis([0 1 -70 5]); %设置坐标轴范围
xlabel('频率/Hz'); ylabel('幅值/dB');%设置横纵坐标显示
line([wp/pi wp/pi],[-70 5],'color','k','linestyle','--');%通带频率
line([ws/pi ws/pi],[-70 5],'color','k','linestyle','--');%阻带频率
subplot 212; stem(1:N+1,b,'k');%画脉冲响应
title('低通滤波器的脉冲响应(数据 1、N=45)');%标题
xlabel('样点'); ylabel('幅值') ;%设置横纵坐标显示
Y=filter(B,A,y);%滤波
Y_fft = abs(fft(Y)); %求出音频数据做完 FFT 后的幅值
Y_fft = Y_fft(1:Nsamps/2); %取一半点数
6