数字信号处理课程设计报告.docx
- 文档编号:9637052
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:42
- 大小:1.18MB
数字信号处理课程设计报告.docx
《数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计报告.docx(42页珍藏版)》请在冰豆网上搜索。
数字信号处理课程设计报告
《数字信号处理》课程设计报告
课程名称
数字信号处理
指导教师
学院
信息科学与工程学院
专业班级
姓名
一、课程设计题目和要求
课程设计选题二:
1、已知序列
1)为了克服频谱泄露现象,试确定DFT计算所需要的信号数据长度N。
2)求
的N点DFT,画出信号的幅频特性。
3)改变信号数据长度,使其大于或小于计算出的N值,观察此时幅频特性的变化。
分析说明变化原因。
2、多采样率语音信号处理
1)读取一段语音信号
2)按抽取因子D=2进行抽取,降低信号采样率,使得数据量减少。
3)按内插因子I=2进行内插,将采样率提高2倍
4)设计模拟低通滤波器恢复出语音信号
5)给出各个设计环节信号的时域波形和频域波形,指出信号频谱的变化,并理论说明。
回放语音信号,比较它们之间的区别。
特别是第4)步恢复出的语音信号与原信号的区别。
3、1)读入一段语音信号(或音乐信号)
2)在语音信号中分别加入以下几种噪声:
(1)白噪声;
(2)单频噪色(正弦干扰);(3)多频噪声(多正弦干扰);
绘出叠加噪声前后的语音信号时域和频域波形图,播放语音信号,从听觉上进行对比,分析并体会含噪语音信号频域和时域波形的改变
3)根据信号的频谱特性,设计IIR或FIR数字滤波器;
4)用所设计的滤波器对被污染的语音信号进行滤波;
5)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;
6)回放语音信号
二、设计内容和步骤
2.1信号DFT处理
●
设计内容
已知序列
1)为了克服频谱泄露现象,试确定DFT计算所需要的信号数据长度N。
2)求
的N点DFT,画出信号的幅频特性。
3)改变信号数据长度,使其大于或小于计算出的N值,观察此时幅频特性的变化。
分析说明变化原因。
●设计思想
(1)因为x(n)是一个周期序列,而x(n)可以看做长度为N的有限长序列的周期延拓序列。
为克服频谱泄漏现象,必须对信号进行整数周期的截取。
可以看出,x(n)是由三个不同频率的正弦信号
,
和
相加而成的,由于
m=0,
式中β为正弦序列的数字角频率,单位为rad。
由上式可见,仅当
为整数时,正弦序列才具有周期
。
当
为有理数时,例如
N和M均为无公因子的整数,正弦序列仍具有周期型,但其周期为
。
而为使x(n)成为周期序列,需使其中三个不同频率的正弦信号都具有周期性,
即对x(n)中三个信号分别计算周期:
故N取三个信号周期的最小公倍数32,作为所需信号的数据长度。
(2)然后根据DFT的定义,即可求得信号x(n)的DFT。
DFT,即离散傅里叶变换。
它的实质是有限长序列傅里叶变换的有限点离散采样,从而实现了频域离散化。
设x(n)是一个长度为M的有限长序列,则定义x(n)的N点离散傅里叶变换(DFT)为
式中,
,N称为DFT变换区间长度,N
M。
取模
可绘出幅频特性曲线。
●设计步骤
(1)根据设计思想
(1),可计算得到为了克服频谱泄露现象,DFT计算所需要的信号数据长度N=32(最小周期)。
(2)根据设计思想
(2),利用MATLAB编程求x(n)的N点DFT,画出信号的幅频特性。
利用MATLAB函数编写DFT和IDFT函数,DFT函数的MATLAB代码如下:
%DFT函数
function[Xk]=dft(xn,N)
%Xk为0<=n<=N-1间的DFT系数数组
%xn=N点有限持续时间序列
%N=DFT的长度
n=[0:
1:
N-1];
k=[0:
1:
N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^nk;
Xk=xn*WNnk;
求得
的N点DFT为:
X(k)={0,0,0,0,0,0,0,16,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,0,0,0,0,0,0}
(3)编写MATLAB代码画出信号x(n)序列图:
编写MATLAB代码,画出N=32的信号的幅频特性图:
N=32;
n=0:
1:
N-1;
xn=cos(7/16*pi.*n)+0.5*cos(9/16*pi.*n)+0.75*cos(0.5*pi.*n);
subplot(2,1,1);stem(n,xn,'.');
title('信号x(n)');xlabel('n');ylabel('x(n)');
axis([0,32,-4,4])
X=dft(xn,N)
magX=abs(X(1:
1:
(N/2+1)));
k=0:
1:
(N/2);w=2*pi/N*k;
subplot(2,1,2);stem(w/pi,magX,'.');
xlabel('\omega/\pi');ylabel('幅度');title('N=32点DFT幅频特性图')
改变信号数据长度为30,使其小于32,画出N=30的信号的幅频特性图:
改变信号数据长度为40,画出N=40的信号的幅频特性图:
(4)观察幅频特性的变化,分析说明变化原因。
改变信号数据长度,使其大于或小于计算出的N值,是非整数周期截取信号,此时信号幅频特性出现频谱泄漏现象。
因为当N为32或32的正整数倍数时,x(n)为一周期序列,其频谱可以清楚地看见三条谱线,三个正弦信号的频率。
而因为应用DFT处理信号时,已经把该信号当成了周期信号。
如果不是对周期信号进行整周期截断,当N不是32或32的正整数倍数的话,那么经周期延拓后,在信号的开始点和结束点就存在跃变,再经过DFT变换,故这样所得频谱(包括频率和幅值)就会出现频谱泄漏现象。
2.2多采样率语音信号处理
●设计内容
1)读取一段语音信号
2)按抽取因子D=2进行抽取,降低信号采样率,使得数据量减少。
3)按内插因子I=2进行内插,将采样率提高2倍
4)设计模拟低通滤波器恢复出语音信号
5)给出各个设计环节信号的时域波形和频域波形,指出信号频谱的变化,并理论说明。
回放语音信号,比较它们之间的区别。
特别是第4)步恢复出的语音信号与原信号的区别。
●设计思想
(1)采样率转换
前面讨论的信号处理的方法都是把采样率Fs视为固定值,即在一个数字系统中只有一种采样频率。
但在实际系统中,要求一个数字系统能工作在“多采样率”状态。
采样率转换通常分为:
抽取和插值。
信号整数抽取的概念:
如果希望将采样率降低到原来的1/D,D为大于1的整数,称为抽取因子。
最简单的方法是对x(nT)信号每D点抽取1点,抽取的样点依次再组成新的序列。
抽取看起来好像很简单,只要每隔D-1个抽取1个就可以了,但是抽取降低了采样频率,可能引起频谱混叠现象。
只有在抽取后仍能满足采样定理时才能恢复出原来的信号,所以通常要先进行抗混叠滤波,即在抽取之前先对信号进行低通滤波。
而信号的整数倍内插,是先在已知采样序列的相邻两个样本点之间等间隔插入I-1个0值点,然后进行低通滤波,即可求得I倍内插的结果。
这里我采用直接抽取和直接内插的方式,改变采样率,而不采用decimate和interp函数,原因是这两个函数都已由MATLAB封装好,先进行滤波再进行抽取和内插,所以这样处理的话,后续的滤波器设计就失去了原本的意义,故这里只采用直接抽取和直接内插的方式。
这里所有的小题不是独立的,首先对输入序列按整数因子D抽取,再对输出序列按整数因子I被内插,达到有理数因子I/D采样率的转换。
(一般来说,先内插后抽取才能最大限度地保留输入序列的频谱成分,但此处按要求先抽取再内插,一般实现方法的原理框图如下:
)
(2)模拟低通滤波器的设计
根据抽取和内插后输出的信号序列波形,估计旁瓣峰值在-30dB左右,过渡带宽度近似值8п/N,阻带最小衰减-50dB左右。
对比几种窗函数的基本参数,这里我选择了有严格线性相位的FIR滤波器,汉宁窗设计低通滤波器进行滤波,设计参数如下:
wp=0.75*pi;
ws=0.125*pi;
rp=0.25;
as=50;
●设计步骤
(1)首先读取一段语音信号‘away.wav’。
编写MATLAB代码,绘出原始语音信号的时域波形和频谱。
(2)然后,按抽取因子D=2进行抽取,降低信号采样率,使得数据量减少。
利用MATLAB编写程序如下,并绘出二倍抽取后的时域波形和频谱:
%对原始信号分别进行D倍的直接抽取
x1=x(1:
2:
end);X1=fft(x1);
N1=length(x1);
n=0:
N1-1;
f1=n*fs/N1;
figure
(2);
subplot(2,1,1)
plot(x1);title('二倍抽取后信号时域波形');xlabel('时间轴n');ylabel('幅值A');
subplot(2,1,2)
stem(f1,abs(X1),'.');title('二倍抽取后的信号频谱幅值');xlabel('频率f');ylabel('幅值A');
sound(x1,fs/2);%回放抽取后的语音信号
这里采用直接抽取的方式,而不选择MATLAB的decimate函数。
因为decimate函数会先对序列进行抗混叠滤波再抽取,就失去了后续自己设计模拟低通滤波器的意义,所以这里采用直接抽取,后续再自行滤除。
分析:
可以看到整数倍抽取后原序列的频谱带宽扩展,已抽样序列x(n)和抽取序列y(n)的频谱差别在频率尺度上不同。
信号的整数2倍抽取,每个1个抽取一个,降低了采样率,会引起频谱混叠现象,这样就无法恢复原信号,所以后续要进行抗混叠滤波。
回放语音信号,由于采样率降低,语音听起来变得沉闷、低沉一些,还是可以清晰地听到“away”这个单词。
3)按内插因子I=2进行内插,将采样率提高2倍
利用MATLAB编写程序如下,并绘出二倍抽取后二倍插值的时域波形和频谱:
%对信号进行L倍直接插值
x2=zeros(1,2*length(x));
x2(1:
2:
end)=x;
X2=fft(x2);
N2=length(x2);
n=0:
N2-1;
f2=n*fs/N2;
figure(3);
subplot(2,1,1)
plot(x2);title('二倍插值后信号时域波形');xlabel('时间轴n');ylabel('幅值A');
subplot(2,1,2)
stem(f2,abs(X2),'.');title('二倍插值后的信号频谱幅值');xlabel('频率f');ylabel('幅值A');
sound(x2,fs);
同抽取一样,这里采用直接内插的方式,而不选择MATLAB的interp函数。
因为interp函数会先对序列进行滤波再内插。
这里采用直接内插,后续再自行滤除。
分析:
整数2倍内插,在相邻两个样点之间等间隔插入1个0值点,然后进行低通滤波,即可求得2倍内插的结果。
往往内插结果,以一定间隔对信号进行采样然后再进行傅里叶变换,频谱出现的变化很明显可以看到镜像频谱。
回放语音信号,感觉语音变得很清晰,听起来跟之前抽取后的信号相比似乎更尖锐些,高频部分更清晰,听得更清楚。
4)设计汉宁窗低通滤波器恢复出语音信号
编写MATLAB代码,绘出滤波器时域和频域波形
%设计汉宁窗低通滤波器的参数
wp=0.75*pi;
ws=0.125*pi;
rp=0.25;
as=50;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
wc=(wp+ws)/2/pi;
hn=fir1(N-1,wc,'low',hanning(N));
%绘出滤波器时域和频域波形
%对抽取插值后的输出信号进行低通滤波
h=conv(hn,x2);
H=fft(h)
figure(5)
N3=length(h);
n=0:
N3-1;
f3=n*fs/N3;
%绘出模拟滤波后信号时域波形和频谱幅值
sound(h,fs*2)%回放语音信号
分析:
与原始信号频谱幅值相对比,可以看出滤波后频谱接近。
通过低通滤波,滤除了镜像频谱,使得抽取之后的抽样率仍满足抽样定理要求时,才不会产生混叠失真。
频谱与原始信号频谱相近。
回放语音信号,可以明显感觉到恢复的语音听起来很自然,声音接近原始语音信号。
2.3信号的加噪与滤除噪声
●设计内容
1)读入一段语音信号(或音乐信号)
2)在语音信号中分别加入以下几种噪声:
(1)白噪声;
(2)单频噪色(正弦干扰);(3)多频噪声(多正弦干扰);
绘出叠加噪声前后的语音信号时域和频域波形图,播放语音信号,从听觉上进行对比,分析并体会含噪语音信号频域和时域波形的改变
3)根据信号的频谱特性,设计IIR或FIR数字滤波器;
4)用所设计的滤波器对被污染的语音信号进行滤波;
5)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;
6)回放语音信号
●设计思想
(1)信号加噪
给信号分别加入白噪声、单频噪声和多频噪声。
这里选用添加高斯白噪声,MATLAB有专门产生高斯白噪声的函数wgn()和添加高斯白噪声的函数awgn()。
自己设定好参数,多次调试即可得到较满意的效果。
单频噪声和多频噪声则分别通过设定不同频率的正弦函数,添加到原信号即可,这里为了后续更方便滤除噪声,正弦噪声的频率设置比较高。
(2)噪声滤除
滤波设计原理:
滤波器的作用是利用离散时间系统的特性,对输入信号波形(或频谱)进行加工与处理,或者说利用数字方法,按预定的要求对信号进行变换。
可以将滤波器理解为一个算法或者程序,将代表输入信号的数字时间序列,转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
从性能上说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用于较低的阶数,以获得高的选择性,所用的存贮单元少,所以经济且效率较高。
但是这个高效率是以牺牲相位的非线性为代价的。
若选择性越好,则相位非线性失真会越严重。
相反,FIR滤波器却可以得到严格的线性相位输出,但由于FIR滤波器传输函数的极点固定在原点,因而只能用较高的阶数以达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,但是成本较高,信号延时也较大;所以如若按相同的选择性和相同的线性要求来说的话,则IIR滤波器就必须加全通网络以进行相位较正,同时要增加滤波器的节数和复杂性。
整体来看,IIR与FIR各有优缺点。
IIR滤波器能达到同样效果,且阶数少,延迟也较低,但是会有稳定性和非线性相位问题;FIR滤波器虽然没有稳定性问题,且线性相位,但阶数多,延迟大。
这里由于对阶数和相位没有特殊的要求,故选用IIR滤波器,巴特沃斯低通滤波器进行设计。
这里我根据之前绘出的信号(加噪)频域波形特性,分别对白噪声和正弦噪声设计了两个低通滤波器,滤波器的参数设置如下:
%设计巴特沃斯低通滤波器1
fp1=1000;%通带截止频率
fs1=1600;%阻带截止频率
rp=0.1;%通带最大衰减
rs=40;%阻带最小衰减
%设计巴特沃斯低通滤波器2
Fp2=1000;%通带截止频率
Fs2=1500;%阻带截止频率
rp=0.1;%通带最大衰减
rs=40;%阻带最小衰减
wp=2*Fp2/fs;ws=2*Fs2/fs;%计算数字滤波器设计指标
●设计步骤
1)首先读入一段语音信号“hello.wav”,编写MATLAB代码,绘出原始信号时域波形和频谱。
2)先在语音信号中加入高斯白噪声,编写MATLAB代码,绘出叠加高斯白噪声的时域信号和频谱,并与原始信号波形进行了对比。
(下只列出部分关键代码)
%向原始语音信号中添加高斯白噪声
snr=30;
x1=awgn(x,snr);
X1=fft(x1,N);
N1=length(x1);
n=0:
N1-1;
f1=n*fs/N1;
%绘制原始信号和叠加高斯白噪声信号后的时域频域波形
sound(x1,fs,nbits);%回放语音信号
分析:
播放语音信号,可以明显听到语音中夹杂有“嘶嘶”嘈杂的噪声。
从波形图上可以看到,时域波形图上,加上高斯白噪声后的信号,在整个信号周期范围内相对一定程度上都有噪声的干扰,波形产生波动;频谱也在整个范围内幅值一定程度增加,主要是高频段频谱变得模糊。
3)在语音信号中加入单频噪声,编写MATLAB代码,绘出叠加单频噪声的时域信号和频谱,并与原始信号波形进行了对比。
(下只列出部分关键代码)
%向原始语音信号中添加单频噪声信号
dt=0.1*sin(2*pi*1500*(1:
size(x))/fs);
x2=x+dt';
X2=fft(x2,N);
N2=length(x2);
n=0:
N2-1;
f2=n*fs/N2;
%绘制原始信号和叠加单频噪声信号后的时域频域波形
sound(x2,fs,nbits);%回放语音信号
分析:
这里我选择加入了单频为1500Hz的正弦噪声,可以明显与原语音区分开来。
播放语音信号,可以明显听到单个略尖锐的噪声夹杂在语音中。
时域波形变模糊,加上了正弦信号的噪声干扰,频域波形在1500Hz处出现了一条明显的峰谱线,可推定为尖锐正弦噪声的谱线。
4)在语音信号中加入多频噪声信号,编写MATLAB代码,绘出叠加多频噪声的时域信号和频谱,并与原始信号波形进行了对比。
(下只列出部分关键代码)
%向原始语音信号中添加多频噪声信号
dt1=0.2*sin(2*pi*1600*(1:
size(x))/fs);
dt2=0.2*sin(2*pi*1700*(1:
size(x))/fs);
x3=x+dt'+dt1'+dt2';
X3=fft(x3,N);
N3=length(x3);
n=0:
N3-1;
f3=n*fs/N3;
%绘制原始信号和叠加多频噪声信号后的时域频域波形
sound(x3,fs,nbits);
分析:
这里的多频正弦噪声,我设置了频率分别为1500Hz、1600Hz和1700Hz,可以明显与原语音区分开来,也方便后续的滤除。
播放语音信号,听到更尖锐的噪声夹杂在语音信号中,且噪声有多个。
从时域波形图上来看,相对单频噪声的影响,多频噪声使波形产生更大幅度的波动,波形变得更模糊;频域波形上看,在频率1500Hz、1600Hz、1700Hz处出现明显的高幅值谱线,即多频噪声谱线。
3)根据信号的频谱特性,设计IIR或FIR数字滤波器
在设计思想中,提到了滤波设计的原理。
从性能上说,IIR滤波器传输函数的极点可位于单位圆内的任何地方,因此可用于较低的阶数,以获得高的选择性,所用的存贮单元少,所以经济且效率较高。
但是选择性越好,则相位非线性失真会越严重。
相反,FIR滤波器却可以得到严格的线性相位输出,但由于FIR滤波器传输函数的极点固定在原点,因而只能用较高的阶数以达到高的选择性;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可以比IIR滤波器高5~10倍,但是成本较高,信号延时也较大;
这里由于对阶数和相位没有特殊的要求,通过观察信号频谱的特性,我在这里选用IIR滤波器,分别对白噪声和正弦噪声设计了两个巴特沃斯低通滤波器。
关键部分代码如下:
%设计巴特沃斯低通滤波器1
fp1=1000;fs1=1600;
rp=0.1;%通带最大衰减
rs=40;%阻带最小衰减
wp=2*fp1/fs;ws=2*fs1/fs;%计算数字滤波器设计指标
[N2,wc]=buttord(wp,ws,rp,rs);
[b,a]=butter(N2,wc,'low');
%设计巴特沃斯低通滤波器2
Fp2=1000;%通带截止频率
Fs2=1500;%阻带截止频率
rp=0.1;%通带最大衰减
rs=40;%阻带最小衰减
wp=2*Fp2/fs;ws=2*Fs2/fs;%计算数字滤波器设计指标
[N1,wc]=buttord(wp,ws,rp,rs);
[b,a]=butter(N1,wc,'low');
%用巴特沃斯低通滤波器滤除单频噪声
%绘出两个低通滤波器的频谱
4)用所设计的滤波器对被污染的语音信号进行滤波,编写MATLAB代码,分别画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化,并回放语音信号,比较变化。
%设计巴特沃斯低通滤波器1
%用巴特沃斯低通滤波器滤除高斯白噪声
z1=filter(b,a,x1);
%滤除白噪声
Nz1=length(z1);
Z1=fft(z1,Nz1);
%设计巴特沃斯低通滤波器2
%用巴特沃斯低通滤波器滤除单频噪声
z2=filter(b,a,x2);
Nz2=length(z2);%计算滤波后的长度
Z2=fft(z2,Nz2);%对滤除噪声后的信号进行DFT变换
%滤除多频噪声
z3=filter(b,a,x3);
Nz3=length(z3);%计算滤波后的长度
Z3=fft(z3,Nz3);%对滤除噪声后的信号进行DFT变换
画出利用巴特沃斯低通滤波器1对叠加高斯白噪声信号进行滤波后的波形,并与叠加噪声后和叠加噪声前的波形进行对比:
观察分析:
使用巴特沃斯低通滤波器保留了信号的低频部分,从时域波形上可看出与叠加噪声后相比,波形波动减小,接近原始信号波形,从频谱上看,频率2000Hz以上幅度较小,但由于高斯白噪声在整个信号周期内都存在,故用低通滤波器没有办法完全将其滤除,播放语音时还是会听到一些轻微的噪声,总体噪声减小。
(3)利用巴特沃斯低通滤波器对叠加单频噪声信号进行滤波,画出利用巴特沃斯低通滤波器2对叠加单频噪声信号进行滤波后的波形,并与叠加噪声后和叠加噪声前的波形进行对比:
观察分析:
使用巴特沃斯低通滤波器滤除了单频噪声,从时域波形上可看出波形波动明显减小,接近原始信号波形,从频谱上看,频率上原先的噪声谱线被滤除,播放语音时没有了原先尖锐的噪声,恢复得到原语音非常接近。
(4)利用巴特沃斯低通滤波器对叠加多频噪声信号进行滤波,画出利用巴特沃斯低通滤波器2对叠加多频噪声信号进行滤波后的波形,并与叠加噪声后和叠加噪声前的波形进行对比:
观察分析:
使用巴特沃斯低通滤波器2滤除了多频噪声,由于使用相同参数的滤波器,得到频谱与滤除单频噪声后的频谱基本一致,从时域波形上可看出波形高频部分的波动明显减小,接近原始信号波形,从频谱上看,频率上原先的噪声谱线被滤除,播放语音时没有了原先尖锐的噪声,恢复后语音与原语音接近,与滤除单频噪声后语音基本一致。
三、设计过程中遇到的问题和解决方案
(1)概念不清晰或淡忘。
对于信号的整数周期截取、DFT等概念,一开始做课程设计的时候对它们都有一点模糊,通过上网查找资料,询问老师和温顾书本的知识以后,才记起具体的概念,对这些概念有了进一步的理解以后我才开始进行设计。
包括多采样率语音信号处理和信号加噪及噪声滤除之前课堂上都没有讲到过,我们都是通过自己查找资料,结合之前所学的滤波器设计才有所掌握,受益匪浅。
(2)在进行信号的整数倍抽取和内插时,一开始我使用的是MATLAB封装好的decimate和interp函数,但是得到内插和抽
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 课程设计 报告