重庆大学数字信号处理大作业报告材料.docx
- 文档编号:27751426
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:17
- 大小:382.22KB
重庆大学数字信号处理大作业报告材料.docx
《重庆大学数字信号处理大作业报告材料.docx》由会员分享,可在线阅读,更多相关《重庆大学数字信号处理大作业报告材料.docx(17页珍藏版)》请在冰豆网上搜索。
重庆大学数字信号处理大作业报告材料
数字信号处理课外实验设计
——音频采样和频谱混叠
课程名称:
数字信号处理
院系:
通信工程学院
专业:
通信01班
年级:
2013级
姓名:
叶汉霆
学号:
20134414
指导教师:
吴华
实验时间:
2015.11.26
大学
一、实验目的:
1、熟悉MATLAB语言的基本用法;
2、掌握MATLAB语言中音频数据与信息的读取与播放方法;
3、掌握在MATLAB中设计滤波器的方法;
4、掌握MATLAB语言号频谱的绘制方法。
5、对采样定理进行初步验证,体会频谱混叠现象,并大致确定音频信号的最低采样频率。
二、实验原理:
现实当中遇到的绝大多数信号都是连续的,即所谓的连续信号。
如语音、图像、温度压力电流等都是模拟信号。
要利用数字信号处理技术实现对这些信号的处理,需要借助对这些信号的处理,需要借助A/D转换,先将模拟信号转变为数字信号后才能利用数字技术对其进行加工处理。
因此,采样是从连续到离散的桥梁。
如果选择的采样频率太低,及fs<2fm的采样频率太低,或者说是信号的最高频率fm超过fs/2,则采样后的频谱按照采样率周期延拓时,各周期延拓分量产生频谱的交叠,这种现象叫频谱混叠。
三、实验容:
本实验通过MATLAB软件,完成以下四项任务
1、用fs=44100HZ采集一段音乐。
2、改变采样频率,用fs=5512HZ采集一段音乐,体会混叠现象。
3、录制一段自己的声音,试验当fs=?
时,发生混叠。
4、(选作)在噪声环境中录制一段自己的声音,试采用一种方法将噪声尽可能地消除。
四、实验步骤:
仿真程序DSP_homework1.m:
clc;
clear;
closeall;
%%44100Hz和5512Hz采集音频文件
[FileName,PathName]=uigetfile('*.wav','选择待处理音频文件');%获取处理音频文件位置
path1=fullfile(PathName,FileName);
[x,Fs1]=audioread(path1);%默认采样频率Fs为44100Hz
x1=x(:
1);%1声道数据
x2=x(:
2);%2声道数据
%y1=x1(1:
800000);
%y1=x1(1:
8:
end);
Fs2=5512;
y1=resample(x1,5512,44100);%信号降采样处理,采样从44100Hz降到5512Hz
y2=resample(x2,5512,44100);
y=[y1y2];
t1=0:
1/Fs1:
(length(x1)-1)/Fs1;%取时域横轴t
t2=0:
1/Fs2:
(length(y1)-1)/Fs2;
N=5096;%fft点数,以频谱分辨率为10Hz,信号最高频率40kHz求出记录最小点数
f=10^3;%取频率轴单位为KHz
X1=fft(x1,N);
X1=10*log(abs(fftshift(X1)));%用对数表示44100Hz音频信号的频谱
Y1=fft(y1,N);
Y1=10*log(abs(fftshift(Y1)));%用对数表示5512Hz音频信号的频谱
PathName1=uigetdir(strcat(matlabroot,'\work'),'加噪后音频文件另存为');
FileName1='music_5512.wav'
path2=fullfile(PathName1,FileName1);
audiowrite(path2,y,Fs2);%生成5512Hz采样的wav格式音频文件,试听音乐效果
%%绘图
figure
(1);%44100Hz采集音频信号时域图、频谱图
subplot(2,1,1);
plot(t1,x1,'r');
axis([095-11]);%设置坐标轴围
set(gca,'XTick',0:
5:
95),gridon;%设置x坐标轴刻度,绘制方格线
set(gca,'YTick',-0.8:
0.2:
0.8),gridon;%设置y坐标轴刻度,绘制方格线
title('44100Hz采样音乐信号波形');
xlabel('时间轴,单位s');
subplot(2,1,2);
plot((-N/2+1:
N/2)*Fs1/N/f,X1,'b');
axis([-2525-7050]);
set(gca,'XTick',-25:
5:
25),gridon;
set(gca,'YTick',-70:
20:
50),gridon;
title('44100Hz采样音乐信号频谱图');
xlabel('频率轴,单位kHz');
ylabel('单位:
dB');
figure
(2)%5512Hz采集音频信号时域图、频谱图
subplot(2,1,1);
plot(t2,y1,'r');
axis([095-11]);%设置坐标轴围
set(gca,'XTick',0:
5:
95),gridon;%设置x坐标轴刻度,绘制方格线
set(gca,'YTick',-0.8:
0.2:
0.8),gridon;%设置y坐标轴刻度,绘制方格线
title('5512Hz采样音乐信号波形');
xlabel('时间轴,单位s');
subplot(2,1,2);
plot((-N/2+1:
N/2)*Fs2/N/f,Y1,'b');
axis([-33-7050]);
set(gca,'XTick',-3:
1:
3),gridon;
set(gca,'YTick',-70:
20:
50),gridon;
title('5512Hz采样音乐信号频谱图');
xlabel('频率轴,单位kHz');
ylabel('单位:
dB');
仿真程序DSP_homework2.m:
clc;
clear;
closeall;
%%录音测试多少采样频率时发生混叠
Fs1=2205;%录音采样频率
nBits=16;%音频位数
nChannels=1;%声道数
recording_time=1.5;%录音时间长度
recObj=audiorecorder(Fs1,nBits,nChannels)
disp('Startspeaking.')
recordblocking(recObj,recording_time);
disp('EndofRecording.');
play(recObj);%回放录音数据
myRecording=getaudiodata(recObj);%获取录音数据
t1=0:
1/Fs1:
(length(myRecording)-1)/Fs1;%取时域横轴t
N1=5096;%fft点数
f=10^3;%取频率轴单位为KHz
fft_myRecording=fft(myRecording,N1);
fft_myRecording=20*log(abs(fftshift(fft_myRecording)));
PathName1=uigetdir(strcat(matlabroot,'\work'),'录音音频文件另存为');
FileName1='record_2205.wav'
path=fullfile(PathName1,FileName1);
audiowrite(path,myRecording,Fs1);%生成原始信号叠加噪声后的wav格式音频文件,试听叠加噪声效果
%%绘制录音数据波形
figure
(1)
subplot(211)
plot(t1,myRecording,'r');
axis([01.5-11]);%设置坐标轴围
set(gca,'XTick',0:
0.1:
1.5),gridon;%设置x坐标轴刻度,绘制方格线
set(gca,'YTick',-0.8:
0.2:
0.8),gridon;%设置y坐标轴刻度,绘制方格线
title('2205Hz录制人声信号波形');
xlabel('时间轴,单位s');
subplot(212)
plot((-N1/2+1:
N1/2)*Fs1/N1/f,fft_myRecording,'b');
axis([-1.51.5-12080]);
set(gca,'XTick',-1.5:
0.5:
1.5),gridon;
set(gca,'YTick',-120:
20:
80),gridon;
title('2202Hz录制人声信号频谱图');
xlabel('频率轴,单位kHz');
ylabel('单位:
dB');
仿真程序DSP_homework3.m:
clc;
clear;
closeall;
%%录入噪音
[FileName,PathName]=uigetfile('*.wav','选择待处理录音文件');%获取处理音频文件位置
path=fullfile(PathName,FileName);
[audio,Fs]=audioread(path);%默认采样频率Fs为44100Hz
t=0:
1/Fs:
(length(audio)-1)/Fs;%取时域横轴t
N=5096;%fft点数
f=10^3;%取频率轴单位为KHz
fft_audio=fft(audio,N);
fft_audio=20*log(abs(fftshift(fft_audio)));
%%绘制噪音数据波形
figure
(1)
subplot(211)
plot(t,audio,'r');
axis([02-1.11.1]);%设置坐标轴围
set(gca,'XTick',0:
0.2:
2),gridon;%设置x坐标轴刻度,绘制方格线
set(gca,'YTick',-1.1:
0.2:
1.1),gridon;%设置y坐标轴刻度,绘制方格线
title('噪声背景下声音信号波形');
xlabel('时间轴,单位s');
subplot(212)
plot((-N/2+1:
N/2)*Fs/N/f,fft_audio,'b');
axis([-2525-220-60]);
set(gca,'XTick',-25:
5:
25),gridon;
set(gca,'YTick',-220:
20:
-60),gridon;
title('噪声背景下声音信号频谱图');
xlabel('频率轴,单位kHz');
ylabel('单位:
dB');
%%进行加噪处理
Ym=max(max(max(audio)),max(abs(min(audio))));%找出极值
audio=audio/Ym;
%%设计低通滤波器
wn=0.1;%滤波器归一化截止频率为0.15
n=513;%滤波器阶数为512
w=hamming(n)
hh=fir1(n-1,wn,'low',w);
figure
(2);
freqz(hh);%绘制滤波器的频率响应图
%%对加噪音频信号进行滤波处理
filter_audio=filter(hh,1,audio);%使含有噪声的信号通过一个已设计的低通滤波器hh
PathName2=uigetdir(strcat(matlabroot,'\work'),'去噪后音频文件另存为');
FileName2='record_recover.wav'
path2=fullfile(PathName2,FileName2);
audiowrite(path2,filter_audio,Fs);%生成原始信号叠加噪声后又经滤波后的wav格式音频文件,试听滤波后效果
fft_filter_audio=fft(filter_audio,N);
fft_filter_audio=20*log(abs(fftshift(fft_filter_audio)));%用对数表示噪声信号的频谱
%%
figure(3)
subplot(211)
plot(t,filter_audio,'r');
axis([02-1.11.1]);%设置坐标轴围
set(gca,'XTick',0:
0.2:
2),gridon;%设置x坐标轴刻度,绘制方格线
set(gca,'YTick',-1.1:
0.2:
1.1),gridon;%设置y坐标轴刻度,绘制方格线
title('滤噪后声音信号波形');
xlabel('时间轴,单位s');
subplot(212)
plot((-N/2+1:
N/2)*Fs/N/f,fft_filter_audio,'b');
axis([-55-220-60]);
set(gca,'XTick',-5:
1:
5),gridon;
set(gca,'YTick',-220:
20:
-60),gridon;
title('滤噪后声音信号频谱图');
xlabel('频率轴,单位kHz');
ylabel('单位:
dB');
五、结果与分析:
1.实验结果:
Figure1
Figure2
Figure3
Figure4
Figure5
Figure6
Figure7
高斯白噪声背景下
Figure8
Figure9
Figure10
背景噪声下
Figure11
Figure12
Figure13
2.实验分析
声音信号的采集与分析处理在工程应用中是经常需要解决的题,如何实时采集声音信号并对其分析处理,找出声音信号的特征在科学研究中是一项非常有意义的工作。
采样定理是信号处理中最重要的定理之一,通过采样定理,可以确定对原始信号的采样频率及采样周期,确保在对已采样信号进行恢复时不失真,又不浪费频带。
对一二问,播放音乐,与原始音乐相比,用5512Hz频率采样后的信号高频处有较多的杂音,同时对比figure1和figure2图可以看出在5512Hz采样中出现了频谱混叠现象。
人耳能听到的音频信号的频率介于20—20000Hz之间,根据采样定理,原始信号频率fm与采样频率fs之间如满足fs>=2fm,则对已采样信号进行恢复时不会产生失真,实验一中的采样频率44100Hz>2*20000Hz,因此采样后恢复的信号不失真,几乎和原始信号一致;第二问中采样频率5512Hz不满足与原始信号频率的2倍关系即采样定理的约束条件,因此频谱会出现混叠,采样后恢复的信号在高频处有失真,采样后的声音听起来也会出现混叠的效果,音质远远不如当采样频率为44100Hz时。
对第三问,首先查阅资料可知,人能够发出的声音在65Hz到1100Hz之间,因此只有当fs≥2200Hz时频谱不会发生混叠,由此可以估计音频发生混叠的采样频率应该在2200Hz左右。
并且采样频率越低,混频现象应该越严重。
见Figure3-Figure7分别用44100Hz、8820Hz、4410Hz、2205Hz、1470Hz五种采样频率对录音采样。
由图形分析可知,当采样频率低于一定的频率时,采样频率越低,频谱的混叠现象越严重。
另外,每个人声音频率高低还是有一定的差别,男生跟女生的高低音差别更大。
所以在多次改变实验Fs值后,得知自己声音发生混频现象的临界值。
对第四问,首先采用老师所建议的加入女声后使用低通滤波器滤除女声,但是找过多位女生配合后,以及调整滤波器的截止频率多次,发现并不能完整的滤除另一个人的声音,只是能使音量减少,从而使滤除效果并不明显。
查阅资料后,可知除去男女声高低不同以外,其实大部分人声其大部分频率接近,并不便于滤除。
发现因此询问老师后,采用噪声环境录音的方法。
我采用两种背景下录制声音,分别是人工高斯白噪声环境和实验室嘈杂环境,而对于第一种高斯白噪声环境下采用低通滤波的方法滤除噪声效果显著,而对于第二种实验室嘈杂环境,通过低通滤波器后只是滤除了录制时的背景噪声,而对于其余人声干扰则并未显著去除,原因如上段所说,在于人声大部分频率的接近。
同时实验过程总结一下两点:
(1)声道分离合并与组合
立体声或双声道音频信号有左右两个声道,利用MATLAB实现双声道分离、两路声道合并和两个单声道组合成一个双声道等效果,实际上是利用了MATLAB的矩阵抽取、矩阵相加和矩阵重组运算。
(2)采样率的改变
在实际实验过程采样率的改变可用两种不同实现方式。
一种是对已有音频处理采用resample函数降低采样率。
resample是抽取decimate和插值interp的两个结合,Y=resample(X,B,A),其中B和A分别是降低后的采样率和原始的采样率,X是输入变量,Y是实现降低采样率后的输出变量。
这在DSP_homework1中使用到。
另一种是通过不同采样率的录音,即通过audiorecorder函数建立录音对象,从而调节采样率的大小。
这在DSP_homework2中使用到。
六、心得体会
数字滤波中,由于设计的滤波器为低通滤波器,故滤波后,对高频有很大衰减。
在满足采样定律条件下,实现数据抽取,在原采样率下波形变密、频谱变宽且幅度减半,但在新采样率下波形和频谱都很好。
在语音信号处理过程中,MATLAB兼顾了专用工具软件的简单性和计算机程序语言的灵活性,特别是处理效果的可视性和可感知,有利于理解语音信号处理的本质,有利于激发学习和研究兴趣,也有利于培养我们MATLAB软件的操作技能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重庆大学 数字信号 处理 作业 报告 材料
![提示](https://static.bdocx.com/images/bang_tan.gif)