- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP课程设计
——基于MATLAB的声音信号频谱分析
课程设计目的
综合运用数学信号处理的理论知识进行语音信号的频谱分析,通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。
理解设计基本要求
熟悉离散信号和系统的时域特性。
熟悉线性卷积和相关的计算编程方法。
掌握序列傅里叶变换的计算机实现方法,利用序列傅里叶变换对离散信号、系统和系统的响应进行频域分析。
学会MATLAB的使用,掌握MATLAB的程序设计方法。
利用MATLAB对wav文件进行频谱分析。
分别用不同的滤波器对加噪语音信号进行滤波,选择最佳滤波器。
课程设计内容
选择一个wav文件作为分析的对象,或录制一段语音信号,对其进行频谱分析,分别对加噪前后的语音信号进行频谱分析,再通过不同滤波器根据信号的频谱特点重构语音信号,选出最佳滤波方案。
课程设计实现步骤
(1)语音信号的获取
选择一个wav文件作为分析的对象,可以利用Windows下的录音机或其他软件,录制一段自己的话音,在MATLAB中,[y,fs,bits]=wavread(Blip,[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取的值从N1点到N2点的值。
sound(y); 用于对声音的回放。向量y则就代表了一个信号,也即一个复杂的“函数表达式”,也可以说像处理一个信号的表达式一样处理这个声音信号。
下面是语音信号在MATLAB中的语言程序,它实现了语音的读入与打开,并绘出了语音信号时域波形,然后对语音信号进行频谱分析。在MATLAB中,可以利用函数fft对信号进行快速傅里叶变化,得到信号的频谱特性。
在频谱特性中分析最大值的位置(可能有几个),它代表的频率和时域的采样时间有关,相邻的两点之间的距离为。其中,N是离散傅里叶变换用的点数,是采样的时间,前面在读取 wav文件时得到了采样频率。
既然知道了该声波的频谱,按频率就可以反演它的时域值,利用以上分析的主要峰值来重构声波。由于没有考虑相位和其他的频谱分量,所以波形和原来的波形相差甚大,但大体的频率是没有错的。
fs=25600; %语音信号采样频率为25600
[x,fs,bits]=wavread(C:\Documents and Settings\Administrator\桌面\语音\音频.wav);
sound(x,fs,bits); %播放语音信号
y1=fft(x,4096); %对信号做2048点FFT变换
f=fs*(0:2047)/4096;
figure(1)
magy1=abs(y1);
angy1=angle(y1);
subplot(3,1,1),plot(x);title(原始信号波形)
subplot(3,1,2),plot(magy1);title(原始信号幅值)
subplot(3,1,3),plot(angy1);title(原始信号相位)
figure(2)
freqz(x) %绘制原始语音信号的频率响应图
title(频率响应图)
figure(3)
plot(f,abs(y1(1:2048)));
title(原始语音信号频谱)
xlabel(Hz);
ylabel(fudu);
axis([0 4500 0 400])
wav语音信号加噪声
在MATLAB软件平台下,给原始的语音信号叠加上噪声,噪声类型分为如下几种:(1)单频噪色(正弦干扰);(2)高斯随机噪声。绘出加噪声后的语音信号时域和频谱图,在视觉上与原始语音信号图形对比,也可通过Windows播放软件从听觉上进行对比,分析并体会含噪语音信号频谱和时域波形的改变。本实验采用正弦干扰。
clc;
clear;
fs=22050; %语音信号采样频率为22050
[x,fs,bits]=wavread(C:\Documents and Settings\Administrator\桌面\语音\音频.wav); %读取语音信号的数据,赋给变量x
y1=fft(x,4096); %对信号做4096点FFT变换
f=fs*(0:511)/4096;
t=(0:length(x)-1)/22050;
x1=[0.05*sin(2*pi*10000*t)];
x2=x+x1;
sound(x2,fs,bits);
figure(1)
subplot(2,1,1)
plot(x) %做原始语音信号的时域图形
title(原语音信号时域
文档评论(0)