现代信号处理课设报告分析.docx
《现代信号处理课设报告分析.docx》由会员分享,可在线阅读,更多相关《现代信号处理课设报告分析.docx(61页珍藏版)》请在冰点文库上搜索。
现代信号处理课设报告分析
中南大学
本科生课程设计报告
课程名称
现代信号处理
指导教师
赵亚湘
学院
信息科学与工程学院
专业班级
通信工程班
姓名
学号
题目一语音信号去噪处理
1、设计要求
1)在windows系统下的录音机录制一段1s左右的语音信号作为原声信号,在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数;
2)画出语音信号的时域波形,对采样后的语音进行fft变换,得到信号的频谱特性;对语音信号分别加入正弦噪声和白噪声,画出加噪信号的时域波形和频谱图;
3)根据对加噪语音信号谱分析结果,确定滤除噪声滤波器的技术指标,设计合适的数字滤波器,并画出滤波器的频域响应;
4)用所设计的滤波器对加噪的信号进行滤波,在同一个窗口画出滤波前后信号的时域图和频谱图,对滤波前后的信号进行对比,分析信号变化;
5)利用sound(x)回放语音信号,验证设计效果。
2、设计思想和系统功能分析
1、
对语音信号进行读取
设计原理
加正弦/高斯白噪声
对比分析加噪声前后信号时域、频域图
设计滤波器
滤波,与原信号比较
2、本课题的研究基本步骤如下:
①确定已知声音信号的存储路径。
②在MATLAB平台上读入语音信号。
③绘制频谱图并回放原始语音信号。
④利用MATLAB编程加入一段正弦波噪音,设计滤波器去噪。
⑤利用MATLAB编程加入一段随机噪音信号,设计FIR和IIR滤波器去噪,并分别绘制频谱图、回放语音信号。
⑥通过仿真后的图像以及对语音信号的回放,对比两种去噪方式的优缺点。
3、设计中关键部分的理论分析与计算,关键模块的设计思路
1、语言的录入及处理
在MATLAB软件平台下,利用函数wavread( )对语音信号采集,并记录采样频率和采样点数。
将语音信号转换成计算机能够运算的有限长序列。
用FFT(傅里叶变换)对其作谱分析。
对信号添加噪声,然后通过窗函数法设计滤波器滤掉该语音信号的噪声,对比滤波前后的语音波形和频谱。
2、时域信号的FFT分析
FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。
函数FFT用于序列快速傅立叶变换,其调用格式为y=fft(x),其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT且和x相同长度;若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
如果x长度是2的幂次方,函数fft执行高速基-2FFT算法,否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。
函数FFT的另一种调用格式为y=fft(x,N),式中,x,y意义同前,N为正整数。
函数执行N点的FFT,若x为向量且长度小于N,则函数将x补零至长度N;若向量x的长度大于N,则函数截短x使之长度为N;若x 为矩阵,按相同方法对x进行处理。
3、滤波方法
将信号中特定波段频率滤除的操作称为滤波,它是抑制和防止干扰的一项重要措施。
若有用信号和无用信号在频谱上可区分,则可采用滤波的方法来衰减甚至消除无用信号。
传统的滤波方法是使用滤波器,比如低通、高通、带通、带阻滤波器等,通常按典型的滤波器原型来设计。
典型的滤波器原型有Butterworth, Chebyshev和elliptical等几种。
本次设计采用巴特沃斯低通滤波器实现对加正弦噪声信号的滤波处理,采用海明窗实现对加高斯白噪声信号的滤波处理。
4、测试数据、测试输出结果,及必要的理论分析和比较
1、加正弦噪声
(1)由上图中的时域明显看出加正弦噪声前后信号的改变,频域图更是可以轻易选择低通滤波器去滤掉噪声恢复原声音信号。
(2)滤波后,效果明显,听声音也可以看出,此次操作的成功。
2、加高斯白噪声
(1)下面两幅图信号时域和频域的对比也能明显看出加噪声前后的差异之处。
而且可以看出,巴特沃斯高通、低通、带通滤波器都不能够滤去这种噪声,因此想到窗函数,而我选择的是海明窗。
(2)滤波之后的声音信号显然不适合原声音信号一样,但声音效果还是差不多的。
五、总结,包括设计过程中遇到的问题和解决方法,设计心得与体会等
Matlab是一套高性能的数值计算和可视化软件。
打开matlab 软件,新建new M-File,输入程序代码,代码分为四大块:
原始信号程序;噪声信号程序;巴特沃斯低通滤波器设计程序;对信号进行滤波处理程序,当然每个程序包括画图程序。
在编写程序的过程中,有很多需要注意的,比如在利用windows进行录音的时候,windows7录音的格式是.wma格式的,开始是不注意,导致程序一开始运行时就出错,需要用改成.wav格式的,之后对于滤波器性能指标的设计,时域和频谱波形的画图程序显示也需要注意,否则很容易出错,或是显示不了波形。
用巴特沃斯低通滤波器滤除噪声之后,实验总是存在误差,无法完全滤除噪声。
低通滤波后,声音稍微有些发闷、低沉,原因是高频分量被低通滤波器衰减。
但是很接近原来的声音。
如果用高通滤波后,只有少许杂音,原因是低频分量被高通滤波器衰减,而人声部分正好是低频部分,所以只剩下杂音,或者发出高频杂音但人的耳朵听不到。
MATLAB7.0功能十分强大且操作起来比较简单,可以在短时间内掌握其操作要领,同时加深了数字信号处理理论联系实际的学习和运用。
在编程过程中,MATLAB7.0对格式要求非常严格,不能识别中文标点符号,在使用时容易出现错误,导致整个程序不能运行。
在以往,我们都是通过课本来感性的认知语音信号,通过本次的课程设计,让我对语音信号有了一个较为实际的认识。
于此同时,让我们再次把数字信号处理及数字滤波器的设计方法重新进行了复习和学习。
最为重要的是,本次课程设计让我重新审视了学习的过程:
只去做实验是不行的,首先还是要思考,遇到了问题查书籍,XX搜索也只是一种手段,更加重要的是要去想,去理解,只有这样才能真正的做好实验。
6、参考文献
[1]高西全,丁玉美.数字信号处理(第三版)[M].西安:
西安电子科技大学出版社,
[2]周玲.基于MATLAB的语音信号数字滤波处理[J].安庆师范学院学报.
[3]王薇,张明敏.基于MATLAB的FIR数字滤波器典型设计[J].火力与指挥控制.
七、程序源代码清单
%第一题(正弦)
%信号采样
[x,fs,bit]=wavread('C:
\Users\ASUS\Desktop\信号课设\相关资料\相关资料\Sounds\bat.wav');
M=size(x,1);%提取采样信号的长度
t=(0:
length(x)-1)/fs;%计算样本时刻
f=fs*(0:
(M+1)/2-1)/M+1;
x=x(:
1);%只取单声道
X=fft(x,M+1);
figure
(1)
subplot(2,1,1);
plot(t,x)
title('原始信号时域图');
xlabel('time(s)');
ylabel('幅度');
subplot(2,1,2);
plot(f,abs(X(1:
(M+1)/2)));
title('原始信号频谱图')
xlabel('Hz');
ylabel('幅度');
%加正弦白噪声及滤波
a=0.02;
f1=5000;
ts=0:
1/fs:
(size(x)-1)/fs;%将所加噪声信号的点数调整到与原始信号相同
noise=a*sin(2*pi*f1*ts)';%噪声为5000Hz的正弦信号
z=x+noise;
Z=fft(z,M+1);%进行N+1点FFT变换
fp=3500;%通带截止频率
fc=4500;%阻带下限截止频率
Rp=3;%通带波纹
Rs=30;%阻带波纹
Wp=fp/fs*2*pi;
Ws=fc/fs*2*pi;%计算对应的数字频率
T=2;Fs=1/T;%定义采样间隔
wp1=2/T*tan(Wp/2);
ws1=2/T*tan(Ws/2);%截止频率预畸变
[N,wn]=buttord(wp1,ws1,Rp,Rs,'s');%计算滤波器介数和截止频率
[cs,ds]=butter(N,wn,'s');%计算滤波器系统函数分子分母系数
[b,a]=bilinear(cs,ds,Fs);%双线性变换得到数字滤波器系统函数分子分母系数
[H,W]=freqz(b,a);
y=filter(b,a,z);%对加噪信号进行滤波
Y=fft(y,M+1);%对滤波后进行N+1点FFT变换
figure
(2)
subplot(2,1,1);%画滤波前信号波形图和频谱图
plot(t,z)
title('滤波前信号时域图');
xlabel('time(s)');
ylabel('幅度');
subplot(2,1,2);
plot(f,abs(Z(1:
(M+1)/2)));
title('滤波前信号频谱图')
xlabel('Hz');
ylabel('幅度');
figure(3)
subplot(2,1,1);%画滤波后信号波形图和频谱图
plot(t,y)
title('滤波后信号时域图');
xlabel('time(s)');
ylabel('幅度');
subplot(2,1,2);
plot(f,abs(Y(1:
(M+1)/2)));
title('滤波后信号频谱图')
xlabel('Hz');
ylabel('幅度');
figure(4)%绘制滤波器频率响应
plot(W/pi,20*log10(abs(H)))
title('频率响应')
xlabel('w/pi');
ylabel('幅度');
sound(5*x,fs)
pause;
sound(20*x,fs)
pause;
sound(20*z,fs)
pause;
sound(20*y,fs)%滤波后的语音信号
%第一题(高斯)
%信号采样
[x,fs,bit]=wavread('C:
\Users\ASUS\Desktop\信号课设\相关资料\相关资料\Sounds\bat.wav');
M=size(x,1);%提取采样信号的长度
t=(0:
length(x)-1)/fs;%计算样本时刻
f=fs*(0:
(M+1)/2-1)/M+1;
x=x(:
1);%只取单声道
X=fft(x,M+1);
figure
(1)
subplot(2,1,1);
plot(t,x)
title('原始信号时域图');
xlabel('time(s)');
ylabel('幅度');
subplot(2,1,2);
plot(f,abs(X(1:
(M+1)/2)));
title('原始信号频谱图')
xlabel('Hz');
ylabel('幅度');
%加高斯白噪声及滤波
z2=awgn(x,20);%对信号加信噪比为10的高斯白噪声
N2=size(z2,1);%提取采样信号的长度
t2=(0:
length(z2)-1)/fs;%计算样本时刻
f2=fs*(0:
(N2+1)/2-1)/N2+1;
X2=fft(x,N2+1);
Z2=fft(z2,N2+1);%进行N+1点FFT变换
fp=1000;%通带截止频率
fc=2000;%阻带起始频率
Wp=fp/fs*2*pi;
Ws=fc/fs*2*pi;%计算对应的数字频率
detaw=Ws-Wp;
n=ceil(1*pi/detaw);
wc=(Wp+Ws)/2;
b=fir1(n-1,wc/pi,hamming(n));%选择海明窗,并归一化
[H,w]=freqz(b);
ma=20*log10(abs(H));
v=conv(b,z2);%对加噪信号进行滤波
t1=(0:
length(v)-1)/fs;
V=fft(v,N2+1);%对滤波后进行N+1点FFT变换
figure
(2)
subplot(2,1,1);%画滤波前信号波形图和频谱图
plot(t,z2)
title('滤波前信号时域图');
xlabel('time(s)');
ylabel('幅度');
subplot(2,1,2);
plot(f2,abs(Z2(1:
(N2+1)/2)));
title('滤波前信号频谱图')
xlabel('Hz');
ylabel('幅度');
figure(3)
subplot(2,1,1);%画滤波后信号波形图和频谱图
plot(t1,v)
title('滤波后信号时域图');
xlabel('time(s)');
ylabel('幅度');
subplot(2,1,2);
plot(f2,abs(V(1:
(N2+1)/2)));
title('滤波后信号频谱图')
xlabel('Hz');
ylabel('幅度');
figure(4)%绘制滤波器频率响应
plot(w/pi,ma)
title('频率响应')
xlabel('Hz');
ylabel('幅度');
sound(5*x,fs)
pause;
sound(5*x,fs)
pause;
sound(5*z2,fs)
pause;
sound(5*v,fs)%滤波后的语音信号
题目二语音信号的延时和混响
一.设计要求
1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样;
2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图;
3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较;
4)设计几种特殊类型的滤波器:
单回声滤波器,多重回声滤波器,全通结构的混响器,并画出滤波器的频域响应;
5)用自己设计的滤波器对采集的语音信号进行滤波;
6)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;
7)回放语音信号。
二、设计思想和系统功能分析
2.1原始信号
用windows的录音机录制一段我的语音信号,要用MATLAB对其进行处理,首先要读入这段语音信号,可以调用软件自带的wavread()函数,找到正确的文件路径就行,但是这个命令只能对*.wav文件处理,所以如果不是的话,要转化格式。
回放语音信号,也是可以直接调用软件自带的sound()函数,它的参数的选择和读入函数是一样的,不过随着采样频率的不同,读出来的效果差别很大。
用软件的绘图工具绘制语音信号的时域和频域的图形,时域的图形和简单就是把读入的信号按时间和音量的大小绘制一张图即可,但是频域的图形,就要先对语音信号进行傅里叶变换才可以得到频谱图,不过考虑到MATLAB软件自带的快速傅里叶变换函数,所以就直接调用fft()就行,当然还用到了fftshift()函数对频谱的中心进行搬移。
2.2延时和混响
延时的处理就是利用向量(矩阵)的补零,然后使得有效的数据被押后,显示的时候,就会有延时效果,因为开始的零数据没有意义,即没有有用信息,然后零数据的多少,由需要被延时的时间决定。
混响的处理就是利用向量(矩阵)的加法运算,使得两个不同的信号进行相互叠加,即我们说的混响效果。
首先是产生两个不同的信号矩阵,一个就用延时后的信号,另一个处理的方式差不多,就是利用补零方法,不过补零的措施不同于延时处理,而是在原始信号的后面补零,其实没有什么实质上的意义,因为不能改变什么,但是由于矩阵的加法要求相加的矩阵的形状一样,即元素的个数一样,所以补零。
3、设计中关键部分的理论分析与计算,关键模块的设计思路
滤波器的设计按要求有四种,还要自己设计一种。
考虑到实际生活中的回声类型,比较接近IIR滤波器,即下面公式:
Y(n)=x(n)+a1*y(n-d1)+a2*y(n-d2)+a3*y(n-d3)+a4*y(n-d4)+a5*y(n-d5)+a6*y(n-d6)+a7*y(n-d7)+a8*y(n-d8)+a9*y(n-d9)+10*y(n-d10)+a11*y(n-d11)-----------公式1
不过,原理大都是一致的,在MATLAB中,都是调用filter()函数,但是,最最重要的是确定这个函数的两个主要参数a和b。
确定了这两个参数就可以进行滤波了,所以只用设计参数a和b,a为传递函数分母系数向量,b为传递函数分子系数向量。
单回声滤波器的设计就是取a和b向量分别为[1,zeros(1,4410),0.2]和全1。
然后进行滤波就可以了。
多重回声滤波器,无限回声滤波器以及全通结构的滤波器的设计都只是改变a和b向量的参数而已。
多重回声滤波器的a和b向量取值为[1,1,1,1,1,1,1,1,1,1,1]和[1,0,0,0,0,0,0,0,0,0,0.2],正好和单回声滤波器的a和b取值相反。
无限回声滤波器的a和b取值为[0,0,0,0,0,0,0,0,0,0,1]和[1,0,0,0,0,0,0,0,0,0,-0.5]。
还有全通结构的a和b的取值为[0.5,0,0,0,0,0,0,0,0,0,1]和[1,0,0,0,0,0,0,0,0,0,0.5]。
我设计的滤波器是一个IIR低通滤波器,是在巴特沃斯滤波器的基础上设计的,参数的设计没有实际的意义,比方说采样频率ft和通带截止频率fp以及阻带截止频率fs和通带,阻带的衰减参数都是随便设定的,只是为了检测一下设计出来的滤波器的性能是否可以达到。
首先把几个自己设定的频率归一化,然后计算巴特沃斯滤波器的参数wp和ws,再利用函数的调用,和参数以及衰减的要求,把滤波器的阶数和参数wc求出来,最后调用butter()函数,就可以求出滤波器的参数a和b向量了,不过要进行双线性变换下,使得模拟的低通滤波器变成数字的低通滤波器,当然,也要相应把模拟域下的频率变成数字域下的频率,最后用设计好的滤波器滤波,再绘制图形即可。
4、测试数据、测试输出结果,及必要的理论分析和比较
对语音信号进行采样后,用MATLAB对其进行处理,利用其绘图工具,绘制语音信号的时域和频域波形图,图形如下图一。
从图形可以看出,语音信号的频率主要集中在低频段,分布呈金字塔状,但是接近零频率的附近的频率成分也很少。
延时的处理和混响的处理,处理后的结果的时域和频域的图形,如下图所示:
从原始信号和处理后的延时图可以看出,延时并没有真正意义上改变语音信号,只是把信号的时域推后了,频谱图也可以看出,只是频谱的位置变化了,而且是线性搬移的。
从原始信号和处理后的混响的图可以看出,混响改变了语音信号的时域特性,音量有叠加的成分,其频谱也有改变,从图可见,混响的低频段呈明显的凹状分布,说明零频段的频率成分在语音信号中占得比例非常少,本来看不出来,但是混响使得频谱相同部分叠加了,就显得很明显了。
按要求设计五类滤波器,并用这五类滤波器分别进行滤波,滤波的结果如下图:
从单回声滤波器的处理图可以看出,对原始语音信号的改变并不是很明显,只是频谱上可以发现低频段的细微变化,时域上几乎没有改变,所以回放语音信号基本上是听不出差别的。
多重回声和无限回声滤波器的处理来看,就可以明显看到对时域和频域的改变,不过如果是人去听回放的语音信号的话,还是听不出有什么特别的差别,只是会比较舒服,圆润,因为从频谱上可以看出来,语音信号的频谱变得均匀了一些,所以会有这种效果。
全通结构的滤波器的处理来看,对时域的改变还是比较明显的,但是从频谱的角度来说,他的效果和无限回声滤波器没有本质上的差别,或者说两者的目的是一样的,所以看起来很相似,甚至相近。
至于我设计的滤波器,由于只是截取语音的一个狭窄的频段进行滤波,所以看起来变化很大,其实是和前面几个滤波器的效果大同小异,没有什么本质上的差别,只是频带变小 ,如果把前面几个的滤波的图放大到这一频带段上来看,还是比较接近的,因为原理都是简单的滤波过程。
5、总结,包括设计过程中遇到的问题和解决方法,设计心得与体会等
这次课程设计的成功,很大方面都要归功于网络上的资料和我的课本,但是最该感谢的毫无疑问是我自己的努力,因为很多的程序网上是给出来了,但是看懂是另外一回事,而且要把它变成自己的就更加靠自己了。
做课程设计是为了加深我们对平时学习的理论知识的理解,在理论和实验教学基础上进一步巩固所学基本理论和提高应用所学知识并加以综合应用的能力,培养学生将所学知识应用于实际的思想,提高分析和解决问题的能力,增强学生的综合能力,开发学生的智力,激发学生的创新精神,为毕业设计和以后工作打下必要基础。
这次为期数日的综合课程设计,使我们弄明白了不少的知识,也学到了不少的东西。
首先我们认识到了MATLAB工具箱的强大的功能和方便的操控性,通过软件可以使设计简化,运算简单,而且可以使设计者腾出时间来把重点放在一些困难概念的理解和掌握上。
MATLAB的功能很强大,可用于电子,通信,图像等领域的信号处理与系统设计。
要精通MATLAB并不是件很容易的事,这得花较多的时间来研究和分析。
通过使用软件,我们不仅加深了对书本知识的了解,还将理论与实际相结合,提高了自己实际思考问题、独立分析问题、冷静解决问题的能力,对数字信号处理这门课也更加充满了兴趣。
设计滤波器是数字信号处理中最为重要的应用之一,因此学好滤波器的设计及分析,对于我们大学生来说是十分重要的。
这次设计我们最大的收获是掌握了滤波器设计的步骤和方法,比如用到双线性变换法,可以在确定滤波器的系统函数后,用双线性变换公式带入而求得结果。
我自己设计的最后一个滤波器就是用这种方法做的。
还有就是学习过程中的不足,这主要体现在做课程设计的过程中,我们深深感觉到自身所学知识的有限,书本上没有提及的环节,我们基本都没有去研究过,做的过程有时突然间觉得有点茫然,虽然通过查阅可以解决问题,但还是浪费了许多时间,这一点是我们在以后的学习中必须加以改进的地方,同时在以后的学习过程中也要督促自己不断地完善自我,超越自我。
另外要提的一点,就是团队精神,在这次课程设计中我们遇到问题都是聚在一起讨论,一起思考、寻找解决问题的方法,讨论的过程也是互相学习互相促进的过程。
所谓”当局者迷,旁观者清”,有些问题自己写的是时候感觉没什么错误,偏偏运行的时候就是有错误,让队友帮忙看了一下,才发现其实是个很小的错误。
还有就是分工要明确,大家根据个人的优势分工,干起事情来才有效率。
所以说,团队精神是很重要的一点。
通过这次的课程设计,我们深深地体会到数字信号处理的有用性和重要性。
同时也发现了自身存在的不少不足之处,这给今后的学习敲响了警钟,也提供了经验教训。
做设计就如做人一样,都是要扎扎实实、一步一个脚印去做,天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难矣。
所以说我们做什么事都要认真、踏实地去做,无论成功与否,只要自己曾经努力过,就可以无悔了,而你在做事过程中的经历是任何人都不会有的宝贵的财富。
6、参考文献
[1] 谢自美.电子电路设计.实验.测试.武昌:
华中理工大学出版社,1994 [2]《数字信号处理的原理和实现》 第二版,刘泉 主编,武汉理工大学出版社 [3] 《数字信号处理教程》 程佩青,清华大学出版社
[4] 《数字信号处理》丁玉美、高西全编著,西安电子科技大学出版社
[5]数理统计与MATLAB工程数据分析,王岩,隋思涟,王爱青,清华大学出版社
7、程序源代码清单