基于matlab的数字音效处理器数字信号处理课设报告.docx
《基于matlab的数字音效处理器数字信号处理课设报告.docx》由会员分享,可在线阅读,更多相关《基于matlab的数字音效处理器数字信号处理课设报告.docx(17页珍藏版)》请在冰豆网上搜索。
基于matlab的数字音效处理器数字信号处理课设报告
实验题目
专业:
通信工程
班级:
114班
姓名:
XXXXX
学号:
XXXXXXXX
指导教师:
XXXXX
一、实验类型
综合研究性实验
二、实验目的
1.掌握采样定理及FFT谱分析的基本原理及其利用Matlab的实现方法;
2.掌握数字滤波器的设计原理和方法;
3.学习用MATLAB编程实现语音数字滤波系统。
三、实验要求
1.利用Windows下的录音机设备采集语音信号;
2.对语音信号进行采样并混进加性噪声,作频谱分析;
3.通过频谱分析选择合适的滤波器性能指标,设计合适的数字滤波器,并对含噪音的语音信号进行数字滤波;
4.设计处理系统的用户界面(GUI),在所设计的系统界面上可以选择滤波器的参数,显示滤波器的频率响应,选择信号等。
四、数字滤波器的设计原理
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配,所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。
其设计方法主要有经典设计法、直接设计法和最大平滑滤波器设计法。
FIR数字滤波器的单位脉冲响应是有限长序列。
它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。
在对滤波器实际设计时,整个过程的运算量是很大的。
设计阶数较高的IIR滤波器时,计算量更大,设计过程中改变参数或滤波器类型时都要重新计算。
设计完成后对已设计的滤波器的频率响应要进行校核。
要得到幅频、相频响应特性,运算量也是很大的。
平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候要根据设计要求和滤波效果不断地调整,以达到设计的最优化。
在这种情况下,滤波器设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间内完成。
利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效地设计数字滤波器,大大地简化了计算量。
五、实验步骤
1、语音信号的采集
利用MATLAB编写程序采集。
并将程序保存在F盘,命名rzw.wav
信号采集程序如下:
clear;
closeall;
Fs=8000;
y=wavrecord(5*Fs,Fs,'double');
wavwrite(y,'f:
\\rzw');
2、语音信号的读取
clear;clc;closeall;
[x,fs,nbits]=wavread('f:
//rzw',16384);
N=length(x);
n=[0:
N-1];
X=fft(x);
Fs=2*fs;
T=1/Fs;
f=n/N*Fs;
subplot(2,1,1);
plot(n,x);
ylabel('原声音信号');
xlabel('时间/s');
subplot(2,1,2);
plot(f,abs(X));
ylabel('语音的幅度谱');
xlabel('频率/Hz');
3、低通滤波器的设计
fp1=1000;fs1=1200;
wp1=2*fp1/Fs;
ws1=2*fs1/Fs;rp=1;as=100;
[N1,wp1]=ellipord(wp1,ws1,rp,as);
[B,A]=ellip(N1,rp,as,wp1);
y1=filter(B,A,x);
Y1=abs(fft(y1));
figure;
freqz(B,A);
y1t='y_1(t)';
figure;
subplot(2,1,1);
t=n*T;
plot(t,y1);
xlabel('t/s');ylabel(y1t);
axis([0,t(end),min(y1),1.2*max(y1)])
subplot(2,1,2);
plot(f,abs(fft(y1)));
4、高通滤波器的设计
fp2=4800;fs2=5000;
wp2=2*fp2/Fs;
ws2=2*fs2/Fs;
rp=1;
as=100;
[N2,wp2]=ellipord(wp2,ws2,rp,as);
[B2,A2]=ellip(N2,rp,as,wp2,'high');
y2=filter(B2,A2,x);
figure;
freqz(B2,A2);
figure;
y2t='y_2(t)';
subplot(2,1,1);
t=n*T;
plot(t,y2);
xlabel('t/s');ylabel(y2t);
axis([0,t(end),min(y2),1.2*max(y2)])
subplot(2,1,2);
plot(f,abs(fft(y2)));
5、带通滤波器的设计
fpl=1200;
fpu=3000;
fsl=1000;
fsu=3200;
wp3=[2*fpl/Fs,2*fpu/Fs];
ws3=[2*fsl/Fs,2*fsu/Fs];
rp=1;
as=100;
[N3,wp3]=ellipord(wp3,ws3,rp,as);
[B3,A3]=ellip(N3,rp,as,wp3);
y3=filter(B3,A3,x);
figure;
freqz(B3,A3);
y3t='y_3(t)';
figure;
subplot(2,1,1);
t=n*T;
plot(t,y3);
xlabel('t/s');ylabel(y3t);
axis([0,t(end),min(y3),1.2*max(y3)])
subplot(2,1,2);
plot(f,abs(fft(y3)));
6、音频放大
figure
o=10
forxa=1:
16384;
p(xa,1)=x(xa,1)*xa*o;
end
subplot(2,1,1);
plot(x);
xlabel('原始波形')
subplot(2,1,2);
plot(n/Fs,p);
xlabel('变换波形')
sound(20*p,fs);
7、音频衰减
figure
o1=0.9
forxa=1:
16384;
p(xa,1)=x(xa,1)/xa*o1;
end
subplot(2,1,1);
plot(x);
xlabel('原始波形')
subplot(2,1,2);
plot(n/Fs,p);
xlabel('变换波形')
sound(20*p,fs)
8、音频倒放
figure
w1=x(1:
2350);
w2=x(2351:
3850);
w3=x(3851:
4850);
w4=x(4851:
5550);
w5=x(5551:
8550);
w6=x(10000:
10150);
w7=x(10151:
12500);
w8=x(12501:
16384);
y=[w8;w7;w6;w5;w4;w3;w2;w1];
figure;
N=length(x);
n=[0:
N-1];
X=fft(x);
Fs=2*fs;
T=1/Fs;
f=n/N*Fs;
N1=length(y);
n1=[0:
N1-1];
Y=fft(y);
f1=n1/N1*Fs;
subplot(2,2,1);
plot(n,x);
ylabel('原声音信号');
xlabel('时间/s');
subplot(2,2,3);
plot(f,abs(X));
ylabel('语音的幅度谱');
xlabel('频率/Hz');
subplot(2,2,2);
plot(n1,y);
ylabel('倒播之后信号');
xlabel('时间/s');
subplot(2,2,4);
plot(f1,abs(Y));
ylabel('倒播之后幅度谱');
xlabel('频率/Hz');
sound(30*y,fs);
9、声音混频
[x5,fs5,nbits]=wavread('f:
\\a',16384);
c=1*x+50*x5;
figure;
N=length(x);
n=[0:
N-1];
X=fft(x);
Fs=2*fs;
T=1/Fs;
f=n/N*Fs;
N1=length(c);
n1=[0:
N1-1];
Y=fft(c);
f1=n1/N1*Fs;
subplot(2,2,1);
plot(n,x);
ylabel('原声音信号');
xlabel('时间/s');
subplot(2,2,3);
plot(f,abs(X));
ylabel('语音的幅度谱');
xlabel('频率/Hz');
subplot(2,2,2);
plot(n1,c);
ylabel('混频之后信号');
xlabel('时间/s');
subplot(2,2,4);
plot(f1,abs(Y));
ylabel('混频之后幅度谱');
xlabel('频率/Hz');
sound(c);
10、声音回放
figure
z=[zeros(1000,1);x];%声音延时
x1=[x;zeros(1000,1)];%使原声音长度与延时后相等
y1=x1+z;
plot(y1);
sound(10*y1,fs);
11、变声
[yy,fs]=wavread('f:
\\rzw');
p=fft(yy);
xaa=p';
NN=1600
pa=[zeros(1,NN),xaa(1:
36801),zeros(1,NN)];
pu=pa';
y=3*real(ifft(pu));
figure;
N=length(yy);
n=[0:
N-1];
X=fft(yy);
Fs=2*fs;
T=1/Fs;
f=n/N*Fs;
N1=length(y);
n1=[0:
N1-1];
Y=fft(y);
f1=n1/N1*Fs;
subplot(2,2,1);
plot(n,yy);
ylabel('原声音信号');
xlabel('时间/s');
subplot(2,2,3);
plot(f,abs(X));
ylabel('语音的幅度谱');
xlabel('频率/Hz');
subplot(2,2,2);
plot(n1,y);
ylabel('变音之后信号');
xlabel('时间/s');
subplot(2,2,4);
plot(f1,abs(Y));
ylabel('变音之后幅度谱');
xlabel('频率/Hz');
sound(20*y,fs);
六、系统GUI界面的设计
1、系统界面设计工具—GUI概述
在MATLAB中GUI是一中包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。
GUIDE主要是一个界面设计工具集,MAYLAB将所有GUI支持度控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。
GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。
FIG文件:
包括GUI图形窗口及其所有后裔的完全描述,包括所有对象属性的属性值。
它是一个二进制文件调用hsave课保存图形窗口时将生车该文件。
M文件包括GUI设计、控件函数以及定义为子函数的用户控件回调函数,主要用于控制GUI展开时的各种特征。
GUI创建包括界面设计和控件编程两部分,主要步骤如下。
第一步:
通过设置GUIDE应用程序的选项来运行GUIDE;第二步:
使用界面设计编辑器进行面设计;第三步:
编写控件行为响应控制(即回调函数)代码。
2、界面设计
图示为排版好的界面
通过各个按钮来实现不同功能。
3、编写M文件
编置好各控件以后,我们就可以来为这些控件编写程序(M-file),鼠标放在所要编写的按键上并右键,单击ViewCallback中的callback。
就会跳到该按键的函数处,在此函数下进行编写。
七、实验结果分析
本次设计通过选择一个语音信号作为分析的对象,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿被噪声干扰的语音信号,并对其进行频谱分析;运用数字信号处理理论设计FIR和IIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。
最后,设计一个信号处理系统界面返回。
完成了实验要求的任务。
但是,也有许多不足。
在IIR的高通滤波与FIR的带通和高通滤波时恢复出的信号有失真。
经多次修改但最终没有得到解决。
八、心得体会
本次试验实现对语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。
通过比较加噪前后,语音的频谱和语音回放,能明显的感觉到加入噪声后回放的声音与原始的语音信号有很大的不同。
通过滤波前后的对比,低通滤波后效果最好,高通滤波后的效果最差。
由此可见,语音信号主要分布在低频段,而噪声主要分布在高频段。
这次毕业设计还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能学以致用,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,通过自己努力与同学的帮助将一部分问题解决。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。