matlab音频信号处理实验报告
MATLAB音频信号处理实验
南昌航空大学信息工程学院
课程实验报告
实验名称:实验时间:4月23日 指导教师: 班级: 学号:
姓名: 成绩: 南昌航空大学实验报告
4月23日
课程名称:数字信号处理实验名称:音频信号处理 班级:
姓名:学号:
姓名:学号:
指导老师评定:签名:
一、实验目的
进一步加深DFT算法原理和基本性质的理解;
熟悉FFT算法原理;
理解掌握音频信号各参数的意义;
设计低通滤波器。
二、实验内容
对一个音频信号用FFT进行谱分析;
对该音频信号进行放大或衰减;
对该音频信号加入噪声与去掉噪声处理。
三、实验原理
语音信号是基于时间轴上的一维数字信号,在这里主要是对语
音信号进行频域上的分析。在信号分析中,频域往往包含了更多 的信息。对于各种波形,我们都可以用一种方法来分析,就是傅 立叶变换:将时域的波形转化到频域来分析。于是,本实验就从 频域的角度对信号进行分析,并通过分析频谱来设计出合适的滤 波器。当然,这些过程的实现都是在MATLAB软件上进行的,
MATLAB软件在数字信号处理上发挥了相当大的优势。
1 ?语音信号的读取
[y/fs/bits]=wavread('Blip'/[Nl N2]);用于读取语音,采样
值放在向量y中,fs表示采样频率(Hz), bits表示采样位数。[N1 N2]
表示读取从N1点到N2点的值(若只有一个N的点则表示读取前
N点的采样值)。
2 ?语音信号的播放
sound(x,fs,bits);用于对声音的回放。
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点的
FFTo若x为向量且长度小于N,则函数将x补零至长度N。若向
量x的长度大于N,则函数截短x使之长度为N。若x为矩阵, 按相同方法对x进行处理。经函数fft求得的序列y —般是复序列, 通常要求其幅值和相位。MATLAB提供求复数的幅值和相位函数:
abs, angle,这些函数一般和FFT同时使用。函数abs(x)用于计算
复向量x的幅值,函数angle(x)用于计算复向量的相角,以弧度表
本实验的语音信号是通过查找电脑系统存在的语音信号所
得,ding.wav信号的比特率为176bps.
[Sl,fs,bits] = wavread('ding.wav');
figure(l);
plot(Sl);
title('原始信号波形');
figure(2);
plot(abs(F));
title('原始信号频谱'
);
图1原始信号波形
图2原始信号频谱
信号放大后的声音未画出图形,但是经过听声音认证,语 音信号的声音确实放大了,可见,可以通过把信号乘以一个系数 的方法进行放大。
S2 = S1 * 4; %对语音信号进行放大
wavwrite(S2/22000,8/'dingaloud.wav');% 生成放大后的 语音信号
%sound(S2);
本实验产生噪声的方法是通过对语音信号进行调制,调制 后的语音信号即高频信号,故可以把该信号当作是噪声信号,并 与原始信号进行叠加,这样得到的信号即是加入了噪声的信号。 信号调制的代码如下:
fc=10000; %载波频率
yl=modulate(Sl/fc/fs/'fm'); %对原语音信号调制
Yl=fft(yb40000); %采样点数 40000
figure(3);
subplot(211);plot(yl);title('调制后信号波形'); subplot(212);plot(abs(Yl));title('调制后信号频谱');
%sound(yl); %播放调制后的语音信号
调制后的信号为高频信号,故波形很密,如下图:
图3调制后的信号和频谱