预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共17页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验题目 专业:通信工程 班级: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))); 100 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;) B y2t='y_2(t)'; subplot(2,1,1); t=n*T; plot(t,y2); xlabel('