重庆大学数字的信号处理大作业报告材料.docx
word数字信号处理课外实验设计 音频采样和频谱混叠课程名称:数字信号处理 一、 实验目的: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:clc;clear;close all;% 44100Hz和5512Hz采集音频文件FileName,PathName = uigetfile('*.wav','选择待处理音频文件');%获取处理音频文件位置path1=fullfile(PathName,FileName);x,Fs1=audioread(path1);%默认采样频率Fs为44100Hzx1=x(:,1);%1声道数据x2=x(:,2);%2声道数据%y1=x1(1:800000);%y1=x1(1:8:end);Fs2=5512;y1=resample(x1,5512,44100); %信号降采样处理,采样从44100Hz降到5512Hzy2=resample(x2,5512,44100);y=y1 y2;t1=0:1/Fs1:(length(x1)-1)/Fs1;%取时域横轴tt2=0:1/Fs2:(length(y1)-1)/Fs2;N =5096; %fft点数,以频谱分辨率为10Hz,信号最高频率40kHz求出记录最小点数f=103;%取频率轴单位为KHzX1=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(0 95 -1 1);%设置坐标轴X围set(gca,'XTick',0:5:95),grid on;%设置x坐标轴刻度,绘制方格线set(gca,'YTick',-0.8:0.2:0.8),grid on;%设置y坐标轴刻度,绘制方格线title('44100Hz采样音乐信号波形');xlabel('时间轴,单位s');subplot(2,1,2);plot(-N/2+1:N/2)*Fs1/N/f,X1,'b');axis(-25 25 -70 50);set(gca,'XTick',-25:5:25),grid on;set(gca,'YTick',-70:20:50),grid on;title('44100Hz采样音乐信号频谱图');xlabel('频率轴,单位kHz');ylabel('单位:dB');figure(2)%5512Hz采集音频信号时域图、频谱图subplot(2,1,1);plot(t2,y1,'r');axis(0 95 -1 1);%设置坐标轴X围set(gca,'XTick',0:5:95),grid on;%设置x坐标轴刻度,绘制方格线set(gca,'YTick',-0.8:0.2:0.8),grid on;%设置y坐标轴刻度,绘制方格线title('5512Hz采样音乐信号波形');xlabel('时间轴,单位s');subplot(2,1,2);plot(-N/2+1:N/2)*Fs2/N/f,Y1,'b');axis(-3 3 -70 50);set(gca,'XTick',-3:1:3),grid on;set(gca,'YTick',-70:20:50),grid on;title('5512Hz采样音乐信号频谱图');xlabel('频率轴,单位kHz');ylabel('单位:dB');仿真程序DSP_homework2.m:clc;clear;close all;% 录音 测试多少采样频率时发生混叠Fs1=2205;%录音采样频率nBits=16;%音频位数nChannels=1;%声道数recording_time=1.5;%录音时间长度recObj = audiorecorder(Fs1,nBits,nChannels)disp('Start speaking.')recordblocking(recObj, recording_time);disp('End of Recording.');play(recObj);% 回放录音数据myRecording = getaudiodata(recObj);% 获取录音数据t1=0:1/Fs1:(length(myRecording)-1)/Fs1;%取时域横轴tN1=5096; %fft点数f=103;%取频率轴单位为KHzfft_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(0 1.5 -1 1);%设置坐标轴X围set(gca,'XTick',0:0.1:1.5),grid on;%设置x坐标轴刻度,绘制方格线set(gca,'YTick',-0.8:0.2:0.8),grid on;%设置y坐标轴刻度,绘制方格线title('2205Hz录制人声信号波形');xlabel('时间轴,单位s');subplot(212)plot(-N1/2+1:N1/2)*Fs1/N1/f,fft_myRecording,'b');axis(-1.5 1.5 -120 80);set(gca,'XTick',-1.5:0.5:1.5),grid on;set(gca,'YTick',-120:20:80),grid on;title('2202Hz录制人声信号频谱图');xlabel('频率轴,单位kHz');ylabel('单位:dB');仿真程序DSP_homework3.m:clc;clear;close all;% 录入噪音FileName,PathName = uigetfile('*.wav','选择待处理录音文件');%获取处理音频文件位置path=fullfile(PathName,FileName);audio,Fs=audioread(path);%默认采样频率Fs为44100Hzt=0:1/Fs:(length(audio)-1)/Fs;%取时域横轴tN =5096; %fft点数f=103;%取频率轴单位为KHzfft_audio=fft(audio,N);fft_audio=20*log(abs(fftshift(fft_audio);% 绘制噪音数据波形figure(1)subplot(211)plot(t,audio,'r');axis(0 2 -1.1 1.1);%设置坐标轴X围set(gca,'XTick',0:0.2:2),grid on;%设置x坐标轴刻度,绘制方格线set(gca,'YTick',-1.1:0.2:1.1),grid on;%设置y坐标轴刻度,绘制方格线title('噪声背景下声音信号波形');xlabel('时间轴,单位s');subplot(212)plot(-N/2+1:N/2)*Fs/N/f,fft_audio,'b');axis(-25 25 -220 -60);set(gca,'XTick',-25:5:25),grid on;set(gca,'YTick',-220:20:-60),grid on;title('噪声背景下声音信号频谱图');xlabel('频率轴,单位kHz');ylabel('单位:dB');% 进展加噪处理Ym=max(max(max(audio),max(abs(min(audio);%找出极值audio=audio/Ym;% 设计低通滤波器n=513;%滤波器阶数为512w=hamming(n)hh=fir1(n-1,wn,'low',w);figure(2);freqz(hh);%绘制滤波器的频率响应图% 对加噪音频信号进展滤波处理filter_audio=filter(hh,1,audio);%使含有噪声的信号通过一个已设计的低通滤波器hhPathName2=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(0 2 -1.1 1.1);%设置坐标轴X围set(gca,'XTick',0:0.2:2),grid on;%设置x坐标轴刻度,绘制方格线set(gca,'YTick',-1.1:0.2:1.1),grid on;%设置y坐标轴刻度,绘制方格线title('滤噪后声音信号波形');xlabel('时间轴,单位s');subplot(212)plot(-N/2+1:N/2)*Fs/N/f,fft_filter_audio,'b');axis(-5 5 -220 -60);set(gca,'XTick',-5:1:5),grid on;set(gca,'YTick',-220:20:-60),grid on;title('滤噪后声音信号频谱图');xlabel('频率轴,单位kHz');ylabel('单位:dB');五、 结果与分析:1.实验结果:Figure 1Figure2Figure3Figure4Figure5Figure6Figure7高斯白噪声背景下Figure8Figure9Figure10背景噪声下Figure11Figure12Figure13声音信号的采集与分析处理在工程应用中是经常需要解决的题,如何实时采集声音信号并对其分析处理,找出声音信号的特征在科学研究中是一项非常有意义的工作。采样定理是信号处理中最重要的定理之一,通过采样定理,可以确定对原始信号的采样频率与采样周期,确保在对已采样信号进展恢复时不失真,又不浪费频带。对一二问,播放音乐,与原始音乐相比,用5512Hz频率采样后的信号高频处有较多的杂音,同时比照figure1和figure2图可以看出在5512Hz采样中出现了频谱混叠现象。人耳能听到的音频信号的频率介于2020000Hz之间,根据采样定理,原始信号频率fm与采样频率fs之间如满足fs>=2fm,如此对已采样信号进展恢复时不会产生失真,实验一中的采样频率44100Hz>2*20000Hz,因此采样后恢复的信号不失真,几乎和原始信号一致;第二问中采样频率5512Hz不满足与原始信号频率的2倍关系即采样定理的约束条件,因此频谱会出现混叠,采样后恢复的信号在高频处有失真,采样后的声音听起来也会出现混叠的效果,音质远远不如当采样频率为44100Hz时。对第三问,首先查阅资料可知,人能够发出的声音在65Hz到1100Hz之间,因此只有当fs2200Hz时频谱不会发生混叠,由此可以估计音频发生混叠的采样频率应该在2200Hz左右。并且采样频率越低,混频现象应该越严重。见Figure3-Figure7分别用44100Hz、8820 Hz、4410 Hz、2205 Hz、1470 Hz五种采样频率对录音采样。由图形分析可知,当采样频率低于一定的频率时,采样频率越低,频谱的混叠现象越严重。另外,每个人声音频率上下还是有一定的差异,男生跟女生的上下音差异更大。所以在屡次改变实验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软件的操作技能。22 / 23