数字信号中的语音处理课程设计该怎么做?

2024-12-19 07:27:58
推荐回答(1个)
回答1:

数字信号处理综合设计

一、实验目的
1.学会MATLAB的使用,掌握MATLAB的程序设计方法;
2.掌握在Windows环境下语音信号采集的方法;
3.掌握数字信号处理的基本概念、基本理论和基本方法;
4.掌握MATLAB设计FIR和IIR数字滤波器的方法;
5.学会用MATLAB对信号进行分析和处理。
二、实验原理
参考《数字信号处理》教材。
三、主要实验仪器及材料
微型计算机、Matlab6.5教学版、TC编程环境。
四、实验内容
1.语音信号的采集
要求利用windows下的录音机(开始—程序—附件—娱乐—录音机,文件—属性—立即转换—8000KHz,8位,单声道)或其他软件,录制一段自己的话音,时间控制在1秒左右。然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函数的使用,要求理解采样频率、采样位数等概念。
wavread函数调用格式:
y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(Hz),nbits表示采样位数。
y=wavread(file,N),读取前N点的采样值放在向量y中。
y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y中。
2.语音信号的频谱分析
要求首先画出语音信号的时域波形;然后对语音信号进行频谱分析,在MATLAB中,可以利用函数fft对信号进行快速付立叶变换,得到信号的频谱特性;从而加深对频谱特性的理解。
3.设计数字滤波器和画出频率响应
根据语音信号的特点给出有关滤波器的性能指标:1)低通滤波器性能指标,fp=1000Hz,fc=1200 Hz, As=100dB,Ap=1dB;2)高通滤波器性能指标,fc=2800 Hz,fp=3000 Hz As=100dB,Ap=1dB;3)带通滤波器性能指标,fp1=1200 Hz,fp2=3000 Hz,fc1=1000 Hz,fc2=3200 Hz,As=100dB,Ap=1dB。要求学生首先用窗函数法设计上面要求的三种滤波器,在MATLAB中,可以利用函数fir1设计FIR滤波器,然后在用双线性变换法设计上面要求的三种滤波器;之后再利用函数butter和cheby1设计上面要求的三种IIR滤波器。最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。
4.用滤波器对信号进行滤波
比较FIR和IIR两种滤波器的性能,然后用性能好的各滤波器分别对采集的信号进行滤波,在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
5.比较滤波前后语音信号的波形及频谱
要求在一个窗口同时画出滤波前后的波形及频谱。
6.回放语音信号
在MATLAB中,函数sound可以对声音进行回放。其调用格式:
sound(x,fs,bits);
可以感觉滤波前后的声音有变化。
五、实验思考
1.双线性变换法中Ω和ω之间的关系是非线性的,在实验中你注意到这种非线性关系了吗?从哪几种数字滤波器的幅频特性曲线中可以观察到这种非线性关系?
2.能否利用公式完成脉冲响应不变法的数字滤波器设计?为什么?
六、实验报告要求
1.简述实验原理及目的。
2.按照实验步骤及要求,比较各种情况下的滤波性能。
3.总结实验所得主要结论。
4.简要回答思考题。

数字信号处理
语音信号的数字滤波
——利用双线性变换法实现IIR数字滤波器的设计

一.课程设计的目的

通过对常用数字滤波器的设计和实现,掌握数字信号处理的工作原理及设计方法;熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法,掌握利用数字滤波器对信号进行滤波的方法,掌握数字滤波器的计算机仿真方法,并能够对设计结果加以分析。

二.课程设计原理

1.用窗函数法设计FIR滤波器
根据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N(或阶数M=N-1),窗函数类型可根据最小阻带衰减As独立选择,因为窗口长度N对最小阻带衰减As没有影响,在确定窗函数类型以后,可根据过渡带宽小于给定指标确定所拟用的窗函数的窗口长度N,设待求滤波器的过渡带宽为Δw,它与窗口长度N近似成反比,窗函数类型确定后,其计算公式也确定了,不过这些公式是近似的,得出的窗口长度还要在计算中逐步修正,原则是在保证阻带衰减满足要求的情况下,尽量选择较小的N,在N和窗函数类型确定后,即可调用MATLAB中的窗函数求出窗函数wd(n)。
根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n),如果给出待求滤波器频率应为Hd,则理想的单位脉冲响应可以用下面的傅里叶反变换式求出:

在一般情况下,hd(n)是不能用封闭公式表示的,需要采用数值方法表示;从w=0到w=2π采样N点,采用离散傅里叶反变换(IDFT)即可求出。
用窗函数wd(n)将hd(n)截断,并进行加权处理,得到

如果要求线性相位特性, 则h(n)还必须满足:

根据上式中的正、 负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。 要根据所设计的滤波特性正确选择其中一类。 例如, 要设计线性相位低通特性可选择h(n)=h(N-1-n)一类,而不能选h(n)=-h(N-1-n)一类。
验算技术指标是否满足要求,为了计算数字滤波器在频域中的特性,可调用freqz子程序,如果不满足要求,可根据具体情况,调整窗函数类型或长度,直到满足要求为止。

2.用双线性变换法设计IIR数字滤波器
脉冲响应不变法的主要缺点是产生频率响应的混叠失真。这是因为从S平面到Z平面是多值的映射关系所造成的。为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-π/T~π/T之间,再用z=esT转换到Z平面上。也就是说,第一步先将整个S平面压缩映射到S1平面的-π/T~π/T一条横带里;第二步再通过标准变换关系z=es1T将此横带变换到整个Z平面上去。这样就使S平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图1所示。

图1双线性变换的映射关系
为了将S平面的整个虚轴jΩ压缩到S1平面jΩ1轴上的-π/T到π/T段上,可以通过以下的正切变换实现
(1)
式中,T仍是采样间隔。
当Ω1由-π/T经过0变化到π/T时,Ω由-∞经过0变化到+∞,也即映射了整个jΩ轴。将式(1)写成

将此关系解析延拓到整个S平面和S1平面,令jΩ=s,jΩ1=s1,则得

再将S1平面通过以下标准变换关系映射到Z平面
z=es1T
从而得到S平面和Z平面的单值映射关系为:
(2)
(3)
式(2)与式(3)是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换
式(1)与式(2)的双线性变换符合映射变换应满足的两点要求。
首先,把z=ejω,可得
(4)
即S平面的虚轴映射到Z平面的单位圆。
其次,将s=σ+jΩ代入式(4),得

因此

由此看出,当σ<0时,|z|<1;当σ>0时,|z|>1。也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。
双线性变换法优缺点
双线性变换法与脉冲响应不变法相比,其主要的优点是避免了频率响应的混叠现象。这是因为S平面与Z平面是单值的一一对应关系。S平面整个jΩ轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。这个关系如式(4)所示,重写如下:

上式表明,S平面上Ω与Z平面的ω成非线性的正切关系,如图2所示。
由图2看出,在零频率附近,模拟角频率Ω与数字频率ω之间的变换关系接近于线性关系;但当Ω进一步增加时,ω增长得越来越慢,最后当Ω→∞时,ω终止在折叠频率ω=π处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。

图2双线性变换法的频率变换关系
但是双线性变换的这个特点是靠频率的严重非线性关系而得到的,如式(4)及图2所示。由于这种频率之间的非线性变换关系,就产生了新的问题。首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图3所示。

图3双线性变换法幅度和相位特性的非线性映射
对于分段常数的滤波器,双线性变换后,仍得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变,这种频率的畸变,可以通过频率的预畸来加以校正。也就是将临界模拟频率事先加以畸变,然后经变换后正好映射到所需要的数字频率上。

三:课程设计的步骤

1.语音信号的采集:
利用windows下的录音机(开始—程序—附件—娱乐—录音机,文件—属性—立即转换—8000KHz,8位,单声道),录制一段自己的话音“信号”, 时间控制在1秒左右,然后将音频文件保存“xh.wav”
(2)在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。

2..语音信号的频谱分析
①首先画出语音信号的时域波形
z1=wavread('d:\laoA.wav');
plot(z1);
图像输出如图1

图1 语音信号时域波形

②对语音信号进行频谱分析,在MATLAB中,可以利用函数fft对信号进行快速付立叶变换,得到信号的频谱特性
z1=wavread('d:\laoA.wav');
y1=z1(1:8192);
Y1=fft(y1);
n=0:8191;
plot(n,Y1);

图像输出如图2:

图2 语音信号频谱分析图

3. 设计数字滤波器和对信号滤波

(1)窗函数设计低通滤波器
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp=1000;fc=1200;As=100;Ap=1;Fs=8000;
wc=2*pi*fc/Fs; wp=2*pi*fp/Fs;
wdel=wc-wp;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
wn= kaiser(N+1,beta);
ws=(wp+wc)/2/pi;
b=fir1(N,ws,wn);
figure(1);
freqz(b,1);
x=fftfilt(b,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,1000,0,1.0]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

(2)窗函数设计高通滤波器
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp=2800;fc=3000;As=100;Ap=1;Fs=8000;
wc=2*pi*fc/Fs; wp=2*pi*fp/Fs;
wdel=wc-wp;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
wn= kaiser(N,beta);
ws=(wp+wc)/2/pi;
b=fir1(N-1,ws,'high',wn);
figure(1);
freqz(b,1);
x=fftfilt(b,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,1000,0,1.0]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

(3)窗函数设计带通滤波器
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp1=1200 ;fp2=3000 ;fc1=1000 ;fc2=3200 ;As=100 ;Ap=1 ;Fs=8000 ;
wp1=2*pi*fp1/Fs; wc1=2*pi*fc1/Fs; wp2=2*pi*fp2/Fs; wc2=2*pi*fc2/Fs;
wdel=wp1-wc1;
beta=0.112*(As-8.7);
N=ceil((As-8)/2.285/wdel);
ws =[(wp1+wc1)/2/pi,(wp2+wc2)/2/pi];
wn= kaiser(N+1,beta);
b=fir1(N,ws,wn);
figure(1);
freqz(b,1)
x=fftfilt(b,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,2000,0,0.0003]);
title('滤波后信号频谱')
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

(4)双线性变换法设计低通滤波器

①选用butter
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp=1000;fc=1200;As=100;Ap=1;Fs=8000;
wc=2*fc/Fs; wp=2*fp/Fs;
[N,ws]=buttord(wc,wp,Ap,As);
[b,a]=butter(N,ws);
figure(1);
freqz(b,a,512,Fs);
x=filter(b,a,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,1000,0,1.0]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析

②选用cheby1
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp=1000;fc=1200;As=100;Ap=1; ;Fs=8000;
wc=2*fc/Fs;wb=2*fp/Fs;
[n,wp]=cheb1ord(wc,wb,Ap,As);
[b,a]=cheby1(n,Ap,wp);
figure(1);
freqz(b,a);
x=filter(b,a,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,4000,0,0.03]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

(5),双线性变换法设计高通滤波器

①选用butter
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fc=2800 ;fp=3000 ;As=100;Ap=1;Fs=8000;
wc=2*fc/Fs; wp=2*fp/Fs;
[N,ws]=buttord(wc,wp,Ap,As);
[b,a]=butter(N,ws,'high');
figure(1);
freqz(b,a,512,Fs);
x=filter(b,a,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,1000,0,1.0]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

②选用cheby1
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fc=2800 ;fp=3000 ;As=100;Ap=1; Fs=8000;
wc=2*fc/Fs;wb=2*fp/Fs;
[n,wp]=cheb1ord(wc,wb,Ap,As);
[b,a]=cheby1(n,Ap,wp,'high');
figure(1);
freqz(b,a);
x=filter(b,a,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,4000,0,0.03]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

(6),双线性变换法设计带通滤波器

①选用butter
程序设计如下
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp1=1200 ;fp2=3000; fc1=1000 ;fc2=3200 ;As=100;Ap=1; Fs=8000;
wc=[2*fc1/Fs,2* fc2/Fs];wp=[2*fp1/Fs,2*fp2/Fs];
[N,ws]=buttord(wc,wp,Ap,As);
[b,a]=butter(N,ws,'stop');
figure(1);
freqz(b,a,512,Fs);
x=filter(b,a,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,1000,0,1.0]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

②选用cheby1
程序设计如下:
clear;close all
[z1,fs,bits]=wavread('d:\laoA.wav')
y1=z1(1:8192);
Y1=fft(y1);
fp1=1200 ;fp2=3000; fc1=1000 ;fc2=3200 ;As=100;Ap=1; Fs=8000;
wc=[2*fc1/Fs,2* fc2/Fs];wb=[2*fp1/Fs,2*fp2/Fs];
[n,wp]=cheb1ord(wc,wb,Ap,As);
[b,a]=cheby1(n,Ap,wp,'stop');
figure(1);
freqz(b,a);
x=filter(b,a,z1);
X=fft(x,8192);
figure(2);
subplot(2,2,1);plot(abs(Y1));axis([0,1000,0,1.0]);
title('滤波前信号频谱');
subplot(2,2,2);plot(abs(X));axis([0,4000,0,0.03]);
title('滤波后信号频谱');
subplot(2,2,3);plot(z1);
title('滤波前信号波形');
subplot(2,2,4);plot(x);
title('滤波前信号波形');
sound(x,fs,bits);

图形分析如下:

四、结果分析:

双线性变换法分析:
双线性变换的主要优点:双线性变换不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象。
双线性变换法的缺点:会产生频率混碟现象,使数字滤波器的频响偏移模拟滤波器的频响。
窗函数法分析:
窗函数法:相位响应有严格的线性,不存在稳定性问题, 设计简单。

五.实验思考

1.双线性变换法中Ω和ω之间的关系是非线性的,在实验中你注意到这种非线性关系了吗?从哪几种数字滤波器的幅频特性曲线中可以观察到这种非线性关系?

答:在双线性变换法中,模拟频率与数字频率不再是线性关系,所以一个线性相位模拟器经过双线性变换后得到的数字滤波器不再保持原有的线性相位了。如以上实验过程中,采用双线性变化法设计的butter和cheby1数字滤波器,从图中可以看到这种非线性关系。

2.能否利用公式完成脉冲响应不变法的数字滤波器设计?为什么?

答:IIR数字滤波器的设计实际上是求解滤波器的系数 和 ,它是数学上的一种逼近问题,即在规定意义上(通常采用最小均方误差准则)去逼近系统的特性。如果在S平面上去逼近,就得到模拟滤波器;如果在z平面上去逼近,就得到数字滤波器。但是它的缺点是,存在频率混迭效应,故只适用于阻带的模拟滤波器。

六.设计体会
在之前数字信号与处理的学习以及完成课后的作业的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。 以及其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。

六、参考文献:
1.《数字信号处理》丁玉美,高西全等编著,西安:西安电子科技大学出版社
2.《数字信号处理》A.V.奥本海姆,R.W.谢弗著,北京:科学出版社
3.《数字信号处理——理论、算法与实现(第二版)》胡广书编著,北京:电子工业出版社

4.《数字信号处理(第二版)学习指导书》高西全,丁玉美编著,西安:清华大学出版社
5.《数字信号处理实验指导书(MATLAB版)》孙洪,余翔宇等译,北京:电子工业出版社
6.《基于MATLAB的系统分析与设计——信号处理》楼顺天,李博菡编著,西安:西安电子科技大学出版社