wav信号的波形分析与合成.docx

上传人:b****7 文档编号:25178945 上传时间:2023-06-05 格式:DOCX 页数:24 大小:906.99KB
下载 相关 举报
wav信号的波形分析与合成.docx_第1页
第1页 / 共24页
wav信号的波形分析与合成.docx_第2页
第2页 / 共24页
wav信号的波形分析与合成.docx_第3页
第3页 / 共24页
wav信号的波形分析与合成.docx_第4页
第4页 / 共24页
wav信号的波形分析与合成.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

wav信号的波形分析与合成.docx

《wav信号的波形分析与合成.docx》由会员分享,可在线阅读,更多相关《wav信号的波形分析与合成.docx(24页珍藏版)》请在冰豆网上搜索。

wav信号的波形分析与合成.docx

wav信号的波形分析与合成

教学实验报告

 

实验名称wav信号的波形分析与合成指导教师

 

预习部分

1.实验目的

2.实验基本原理

3.主要仪器设备(含必要的元器件、工具)

一、实验目的

1.巩固傅里叶变换及其反变换的知识,学习从时域和频域两个角度来观察信号。

2.尝试利用短时傅里叶变换分析非平稳信号的频谱变化。

3.熟悉MATLAB环境中wavread、wavrecord、wavplay、fft和ifft等函数的应用。

2.实验原理

音频信号(Audio)是通过麦克风、A/D等数据采集设备将声音转换而成的电信号,是声波频率、幅度变化的信息载体。

声音的三个主观特性是音调、音强和音色。

而声波的三个重要参数为频率30、幅度An和相位书n,这也就决定

了音频信号的特征定义如下:

1.基频与音调

基频指一个复杂声波中最低的一个频率(其他频率叫谐波)。

音调主要由声音的频率决定,同时也与声音强度有关。

对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。

2•谐波与音色

谐波是指周期函数或周期性的波形中不能用常数与原函数基频的正弦函数

和余弦函数的线性组合表达的部分。

n®O称为3O的n次谐波分量,也称为

(n-1)

次泛音。

音色是由混入基音的泛音所决定的,高次谐波越丰富,音色就越有明亮感和穿透力。

不同的谐波具有不同的幅值An和相位偏移书n,由此产生各种音色效果。

3.幅度与音强

人耳对于声音细节的分辨只有在强度适中时才最灵敏。

人的听觉响应与强度成对数关系。

常用音量来描述音强,以分贝(dB=20log)为单位。

4.音宽与频带

音频信号的频带宽度简称为音宽,它是描述组成复合信号的频率范围。

借助傅里叶变换,信号可以时间函数或频率函数两种形式描述,特别是周期信号和准周期信号(前者由一个基频成分和若干谐波成分,后者虽可分解为几个正弦分量,但它们的周期没有公倍数),从频率域可以很清楚地了解它们由哪些正弦分量组成。

而对于非平稳信号,最典型的例子就是语音信号,它是非周期的,频谱随时间连续变化,因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。

最直观的想法就是用中心在某一时刻的时间窗截取一段信号,对其做傅里叶变换,得到这一时刻的频谱;然后将窗在时间轴上移动,从而得到不同时刻的频谱,这就是短时频谱的原理。

最简单的窗就是矩形窗,即直接从原信号中截取一段。

三、涉及的MATLAB函数

1.wavread

功能:

读取Microsoft的WAVE文件。

基本调用格式:

[y,Fs,nbits]=wavread()载入以命名的WAVE文件。

y为采样数据,Fs为WAVE文件被采样时所用的采样频率,nbits为用于描述每个采样点的编码数据位数(常用的有8bits和16bits)。

其中以单引号括起的字符串方式输入。

2.wavrecord

功能:

应用PC机上音频输入设备录制声音。

基本调用格式:

y=wavrecord(n,Fs)对某音频信号以FsHz采样率连续录入n个采样点的数据。

其中Fs默认值为11025Hz

3.wavplay

功能:

应用PC机上音频输出设备播放已录制的声音。

基本调用格式:

Wavplay(y,Fs)以Fs播放存入矢量y中的音频信号。

Fs默认值仍为11025Hz注:

亦可参看sound函数。

4.fft功能:

离散傅立叶变换函数。

基本调用格式:

丫=fft(X,n)对矢量X进行n点离散傅立叶变换,结果存入矢量Y。

计算时所用算法为快速傅立叶变换(FFT)。

如果X为普通矩阵,那么返回为对此矩阵进行逐列的FFT的结果。

5.ifft

功能:

离散傅立叶反变换。

基本调用格式:

y=ifft(X,n)返回对矢量X进行n点离散傅立叶反变换的结果。

同样利用FFT算法进行具体计算,若X为矩阵,返回结果为逐列离散傅立叶反变换的丫矩阵。

四、实验内容

本实验利用matlab提供的工具来采集和分析声音信号的频谱,由以下几个

部分组成:

1•声音的采集Matlab提供了读入、录制和播放声音以及快速傅里叶变换的函数,分别是wavread、wavrecord、wavplay和fft。

阅读这几个函数的帮助文档,熟练使用。

2.持续音的频谱分析

将Windows的系统目录下的ding.wav文件读入,这是一个双声道的声音,选择任一声道的信号,使用fft求取其频谱,并用plot显示它的幅度谱,观察主要的正弦分量;参考代码:

图形如下:

1.1024点FFT

40

20

2.1024点FFT

用ifft函数求取频谱的反傅里叶反变换,比较反变换后的信号波形与原

始信号的波形;

参考代码:

%反变换,结果应与原始信号相同

yr1024=real(ifft(YR1024));

figure('numbertitle','off',‘name','1024点fft的反变换');

subplot(2,1,1);

plot(yr1024)

title('1024点fft的反变换’)

subplot(2,1,2);

Plot(yr);

title('原信号');

图形如下:

 

从频谱中找到幅度最大的正弦分量,构造一个同样幅度的正弦信号,将其波形与原始信号比较,并且试听一下。

参考代码:

%重构

%寻找幅度最大的正弦分量

[maxpeak,peaki]=max(abs(YR1024(1:

512)));

MAXSIN=zeros(1,1024);

MAXSIN(peaki)=maxpeak;

MAXSIN(1026-peaki)=maxpeak;

maxsin=100*ifft(MAXSIN);

figure('numbertitle','off','name',‘用最大正弦分量重构信号’);

subplot(2,1,1)plot(maxsin);

title('重构的信号');

subplot(2,1,2);

plot(yr1024);

title('原始信号');

%试听

wavplay(yr1024,fs);wavplay(maxsin,fs);

图形如下:

20

10

0

-10

-20

0.2

0.1

0

-0.1

-0.2

020040060080010001200

3.时变音的短时频谱分析

使用”loadchirp”载入matlab自带的一个时变音;

参考代码:

loadchirp%y,Fs

从信号中依次截取1024个点,利用上述方法求取其幅度谱,并显示出来,观察幅度谱随时间的变化情况。

参考代码:

len=length(y)

fori=1:

floor(len/1024)

seg=y((i-1)*1024+1:

i*1024);

figure('numbertitle','off','name',['Frame',num2str(i)]);

plot(linspace(-pi,pi,1024),fftshift(abs(fft(seg))));end

图形如下:

实验操作部分

1.实验数据、表格及数据处理

2.实验操作过程(可用图表示)

3.实验结论

思考题:

分别录制男生和女生发元音“a”的声音,通过对音频文件的频谱分析对比两者的差异,并进行合理的解释。

1•通过以下程序录制男生女生声音

%录制声音并播放duration=2;

fs=8192;

nbits=16;

format='int16';

桌面\mysound';%录制之后的文件

%录制两秒mic声音

%将声音按fs频率nbits写入mysound.wav

waveFile=

路径,文件名为mysound.wavy=wavrecord(duration*fs,fs,format);wavwrite(y,fs,nbits,waveFile);

wavplay(y,fs);%播放(或者使用sound(y,fs))

2•录制好的男生声音文件名为“mysound.waV',女声声音文件名为“nv.wav

3.男生声音的分析代码如下:

[y,fs]=wavread('mysound.wav')

fs%fs=11025

leng=length(y)%leng=22050

%声音的默认声道为左声道

yr=y(:

1);

%截取前1024个点

yr=yr(1:

1024);

%求取幅度普并显示,首先是fs=2048

YR2048=fft(yr,2048);

figure('numbertitle','off',‘name','2048

subplot(2,1,1)

plot(linspace(-pi,pi,2048),abs(YR2048))

title('FFT的幅频特性')

subplot(2,1,2)

plot(linspace(-pi,pi,2048),fftshift(abs(YR2048)))

title('FFT后幅频特性的fftshift')

%fs=1024

YR1024=fft(yr,1024);

figure('numbertitle','off',‘name','1024

subplot(2,1,1)

plot(linspace(-pi,pi,1024),abs(YR1024))

title('FFT的幅频特性')

subplot(2,1,2)

plot(linspace(-pi,pi,1024),fftshift(abs(YR1024)))FFTSHIFT

title('FFT后幅频特性的fftshift')

图形如下:

点FFT');

%FFT的幅频特性

%FFT的幅频特性FFTSHIFT

点FFT');

%FFT的幅频特性

%FFT的幅频特性的

1.1024点FFT

FFT后的幅频特性

2.2048点FFT

FFT后的幅频特性

FFT后幅频特性的fftshift

%反变换,结果应与原始信号相同

yr1024=100*real(ifft(YR1024));

figure('numbertitle','off','name','1024点fft的反变换');

subplot(2,1,1);

plot(yr1024)

title('1024点fft的反变换’)

subplot(2,1,2);

Plot(yr);

title('原信号');

%重构寻找幅度最大的正弦分量

[maxpeak,peaki]=max(abs(YR1024(1:

512)));

MAXSIN=zeros(1,1024);

MAXSIN(peaki)=maxpeak;

MAXSIN(1026-peaki)=maxpeak;

maxsin=100*ifft(MAXSIN);

figure('numbertitle','off','name',‘用最大正弦分量重构信号’);

subplot(2,1,1)

plot(maxsin);

title('重构的信号');

subplot(2,1,2);

plot(yr1024);

title('原始信号');

%试听

wavplay(yr1024,fs);

wavplay(maxsin,fs);

图形如下:

重构的信号

100

50

0

-50

020040060080010001200

原始信号

点FFT');

%FFT的幅频特性

%FFT的幅频特性FFTSHIFT

点FFT');

%FFT的幅频特性

-1000

1

0.5

0

女生声音分析代码如下:

[y,fs]=wavread('nv.wav')

fs%22050

leng=length(y)%84480

%声音的默认声道为左声道

yr=y(:

1);

%截取前1024个点

yr=yr(40000:

41024);

%求取幅度普并显示,首先是fs=2048

YR2048=fft(yr,2048);

figure('numbertitle','off',‘name','2048

subplot(2,1,1)

plot(linspace(-pi,pi,2048),abs(YR2048))

title('FFT的幅频特性')subplot(2,1,2)

plot(linspace(-pi,pi,2048),fftshift(abs(YR2048)))

title('FFT后幅频特性的fftshift')

%fs=1024

YR1024=fft(yr,1024);

figure('numbertitle','off','name','1024

subplot(2,1,1)

plot(linspace(-pi,pi,1024),abs(YR1024))

title('FFT的幅频特性')subplot(2,1,2)

plot(linspace(-pi,pi,1024),fftshift(abs(YR1024)))%FFT的幅频特性的

FFTSHIFT

title('FFT后幅频特性的fftshift')

图形如下:

1.1024点FFT

FFT后幅频特性的fftshift

2.2048点FFT

%反变换,结果应与原始信号相同

yr1024=100*real(ifft(YR1024));

figure('numbertitle','off','name','1024点fft的反变换');

subplot(2,1,1);

plot(yr1024)

title('1024点fft的反变换’)

subplot(2,1,2);

Plot(yr);

title('原信号');

%重构寻找幅度最大的正弦分量

[maxpeak,peaki]=max(abs(YR1024(1:

512)));

MAXSIN=zeros(1,1024);

MAXSIN(peaki)=maxpeak;

MAXSIN(1026-peaki)=maxpeak;

maxsin=100*ifft(MAXSIN);

figure('numbertitle','off','name',‘用最大正弦分量重构信号’);

subplot(2,1,1)

plot(maxsin);

title('重构的信号');

subplot(2,1,2);

plot(yr1024);

title('原始信号');

%试听

wavplay(yr1024,fs);

wavplay(maxsin,fs);

图形如下:

-40

0

100

50

40

20

重构的信号

0

-20

200

400600800

10001200

-100

0

原始信号

0

-50

200

400

600

800

1000

1200

-1000

1

0.5

100

50

1024点fft的反变换

0

-50

200

400

800

600

10001200

原信号

0

-0.5

200

400

600800

1000

0

1200

 

实验分析:

1.通常女声比男声听上去高,原因是女性的声带比较细。

女声比男声的基频高,

基频决定了你听到的声音的高低。

通常男声基频在50HZ到180HZ之间,女声

基频在160HZ到380HZ之间。

人耳对声音最敏感的区域是2000-5000H乙

2.由男声女声频谱图可以看出,女声最大幅值时的频率比男声的高一些,男声的频带宽度比女声的宽一些(由频谱图可以看出)。

不过在图中能够明显看出:

男声的声音音强(幅度)明显比女声的低,所以女声听起来尖一些,而男声低沉一些。

三、实验效果分析(包括仪器设备等使用效果)

1•实验过程中,需要考虑到采集的声音样点是否有声音信号,因为有时候录制声音时是从中间才开始有声音的。

像女生的声音是取(40000:

41024)这之间的点才有“a”的声音。

2.在最后用wavplay()听声音“a”时,要注意几点:

首先要一个一个听才行,

不能wavplay(yr1024,fs);wavplay(maxsin,fs);两个一起,那样声音叠在一起,

无法听清;其次,要在自己的采样频率下Fs才能听到清晰的,如果用默认的

11025HW失原始声音。

3.运用matlabwavrecord()函数录制声音时要取好FS,在人能听到的范围内,FS越大声音效果越好,越接近原始声音。

4.在逆变换后的声音信号通常比较小,如果想听到比较大的声音可以增加幅度(即能量)。

5.如果想再最后听到比较长的原始声音,可以在一开始,从离散的声音信号中选取多一些点(如:

10240个点),在恢复时就能听到比较长的“a”。

四、教师评语

指导教师

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1