数字信号处理课外实验设计——音频采样和频谱混叠课程名称:数字信号处理院系:通信工程学院专业:通信01班年级:2013级姓名:叶汉霆学号:20134414指导教师:吴华实验时间:2015.11.26重庆大学20134414通信01班叶汉霆1一、实验目的:1、熟悉MATLAB语言的基本用法;2、掌握MATLAB语言中音频数据与信息的读取与播放方法;3、掌握在MATLAB中设计滤波器的方法;4、掌握MATLAB语言中信号频谱的绘制方法。5、对采样定理进行初步验证,体会频谱混叠现象,并大致确定音频信号的最低采样频率。二、实验原理:现实当中遇到的绝大多数信号都是连续的,即所谓的连续信号。如语音、图像、温度压力电流等都是模拟信号。要利用数字信号处理技术实现对这些信号的处理,需要借助对这些信号的处理,需要借助A/D转换,先将模拟信号转变为数字信号后才能利用数字技术对其进行加工处理。因此,采样是从连续到离散的桥梁。如果选择的采样频率太低,及fs2fm的采样频率太低,或者说是信号的最高频率fm超过fs/2,则采样后的频谱按照采样率周期延拓时,各周期延拓分量产生频谱的交叠,这种现象叫频谱混叠。三、实验内容:本实验通过MATLAB软件,完成以下四项任务1、用fs=44100HZ采集一段音乐。2、改变采样频率,用fs=5512HZ采集一段音乐,体会混叠现象。3、录制一段自己的声音,试验当fs=?时,发生混叠。4、(选作)在噪声环境中录制一段自己的声音,试采用一种方法将噪声尽可能地消除。20134414通信01班叶汉霆2四、实验步骤:仿真程序DSP_homework1.m:clc;clear;closeall;%%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=[y1y2];t1=0:1/Fs1:(length(x1)-1)/Fs1;%取时域横轴tt2=0:1/Fs2:(length(y1)-1)/Fs2;N=5096;%fft点数,以频谱分辨率为10Hz,信号最高频率40kHz求出记录最小点数f=10^3;%取频率轴单位为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格式音频文件,试听音乐效果%%绘图20134414通信01班叶汉霆3figure(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:20134414通信01班叶汉霆4clc;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;%取时域横轴tN1=5096;%fft点数f=10^3;%取频率轴单位为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([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');20134414通信01班叶汉霆5axis([-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为44100Hzt=0:1/Fs:(length(audio)-1)/Fs;%取时域横轴tN=5096;%fft点数f=10^3;%取频率轴单位为KHzfft_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;20134414通信01班叶汉霆6title('噪声背景下声音信号频谱图');xlabel('频率轴,单位kHz');ylabel('单位:dB');%%进行加噪处理Ym=max(max(max(audio)),max(abs(min(audio))));%找出极值audio=audio/Ym;%%设计低通滤波器wn=0.1;%滤波器归一化截止频率为0.15n=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([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