南昌航空大学信息工程学院
课程实验报告
实验名称: 实验时间: 4月23日
指导教师:
班 级 :
学 号 :
姓 名 :
成 绩 :
南昌航空大学实验报告
年 4 月 23 日
课程名称: 数字信号处理 实验名称: 音频信号处理 班级: 姓名: 学号: 指导老师评定: 签名:
一、实验目的
(1)进一步加深DFT算法原理和基本性质的理解;
(2)熟悉FFT算法原理;
(3)理解掌握音频信号各参数的意义;
(4)设计低通滤波器。
二、实验内容
(1)对一个音频信号用FFT进行谱分析;
(2)对该音频信号进行放大或衰减;
(3)对该音频信号加入噪声与去掉噪声处理。
三、实验原理
语音信号是基于时间轴上的一维数字信号,在这里主要是对语音信号进行频域上的分析。在信号分析中,频域往往包含了更多的信息。对于各种波形,我们都可以用一种方法来分析,就是傅立叶变换:将时域的波形转化到频域来分析。 于是,本实验就从频域的角度对信号进行分析,并通过分析频谱来设计出合适的滤波器。当然,这些过程的实现都是在MATLAB软件上进行的,MATLAB软件在数字信号处理上发挥了相当大的优势。
1.语音信号的读取
[y,fs,bits]=wavread('Blip',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)。
2.语音信号的播放
sound(x,fs,bits); 用于对声音的回放。向量y则就代表了一个信号(也即一个复杂的%26ldquo;函数表达式%26rdquo;)也就是说可以像处理一个信号表达式一样处理这个声音信号。
3.FFT的MATLAB实现
在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。函数FFT用于序列快速傅立叶变换。函数的一种调用格式为y=fft(x),其中,
x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT。且和x相同长度。若x为一矩阵,则y是对矩阵的每一列向量进行FFT。如果x长度是2的幂次方,函数fft执行高速基-2FFT算法;否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。函数FFT的另一种调用格式为
y=fft(x,N),式中,x,y意义同前,N为正整数。函数执行N点的FFT。若x为向量且长度小于N,则函数将x补零至长度N。若向量x的长度大于N,则函数截短x使之长度为N。若x 为矩阵,按相同方法对x进行处理。经函数fft求得的序列y一般是复序列,通常要求其幅值和相位。MATLAB提供求复数的幅值和相位函数:abs,angle,这些函数一般和FFT同时使用。函数abs(x)用于计算复向量x的幅值,函数angle(x)用于计算复向量的相角,以弧度表示。
四、程序清单及分析
(A)本实验的语音信号是通过查找电脑系统存在的语音信号所得,ding.wav信号的比特率为176bps.
[S1,fs,bits] = wavread('ding.wav');
figure(1);
plot(S1);
title('原始信号波形');
figure(2);
F = fft(S1);
plot(abs(F));
title('原始信号频谱'
);
图1原始信号波形
图2 原始信号频谱
(B) 信号放大后的声音未画出图形,但是经过听声音认证,语音信号的声音确实放大了,可见,可以通过把信号乘以一个系数的方法进行放大。
S2 = S1 * 4; %对语音信号进行放大
wavwrite(S2,22000,8,'dingaloud.wav');%生成放大后的语音信号
%sound(S2);
(C) 本实验产生噪声的方法是通过对语音信号进行调制,调制后的语音信号即高频信号,故可以把该信号当作是噪声信号,并与原始信号进行叠加,这样得到的信号即是加入了噪声的信号。信号调制的代码如下:
fc=10000; %载波频率
y1=modulate(S1,fc,fs,'fm'); %对原语音信号调制
Y1=fft(y1,40000); %采样点数40000
figure(3);
subplot(211);plot(y1);title('调制后信号波形');
subplot(212);plot(abs(Y1));title('调制后信号频谱');
%sound(y1); %播放调制后的语音信号
调制后的信号为高频信号,故波形很密,如下图:
图3 调制后的信号和频谱
(D) 加入噪声的信号
%调制信号+原始信号波形
y2 = S1 + y1; %加入噪声后的语音信号
Y2 = fft(y2,40000); %采样点数40000,对加噪后的信号进行fft figure(4);
subplot(211);plot(y2);title('调制信号+原始信号波形');
subplot(212);plot(abs(Y2));title('调制信号+原始信号频谱');
%sound(y2); %播放加入噪声后的语音信号
图4 加入噪声后的信号与频谱
(E)用双线性变换法设计的低通滤波器及对加入噪声的信号的滤波处理。 figure(5);
%用双线性变换法设计的低通滤波器
fp=1000;fc=1200;As=100;Ap=1;fs1=22050;
wc = 2*fc/fs1;wp = 2*fp/fs1;
[n,wn]=ellipord(wp,wc,Ap,As);
[b,a]=ellip(n,Ap,As,wn);
freqz(b,a,512,fs1);
x = filter(b,a,y2); %对加噪后的语音信号进行低通滤波 X = fft(x,40000); %对滤波后的信号进行FFT figure(6);
subplot(211);plot(x);title('低通滤波后信号波形');
subplot(212);plot(abs(X));title('低通滤波后信号频谱');
sound(x,40000); %播放滤波后语音
图5 滤波器的频率响应
图6 滤波后的信号和频谱
五、实验总结
通过本次实验,进一步加深DFT算法原理和基本性质的理解,熟悉了FFT算法原理,理解和掌握了音频信号各参数的意义,通过对音频信号加入噪声而去掉噪声的过程学会了设计低通滤波器的方法,巩固了课程理论知识。