中南大学数字信号处理课程设计.docx
《中南大学数字信号处理课程设计.docx》由会员分享,可在线阅读,更多相关《中南大学数字信号处理课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
中南大学数字信号处理课程设计
中南大学
数字信号处理课程设计报告
专业班级:
电信1303
指导老师:
姓名:
学号:
一、课程设计要求
二、设计过程
(1)设计题目
(2)设计源代码
(3)设计结果
(4)结果分析
三、设计总结与心得体会
四、课程设计指导书
一、课程设计要求
1、课程设计指导书
①《数字信号处理(第二版)》,丁玉美等,西安电子科技大学出版社;
②《MATLAB及在电子信息课程中的应用》,陈怀琛等,电子工业出版社。
2、课程设计题目
⑴、信号发生器
用户根据测试需要,可任选以下两种方式之一生成测试信号:
①、直接输入(或从文件读取)测试序列;
②、输入由多个不同频率正弦信号叠加组合而成的模拟信号公式(如式1-1所示)、采样频率(Hz)、采样点数,动态生成该信号的采样序列,作为测试信号。
⑵、频谱分析
使用FFT对产生的测试信号进行频谱分析并展示其幅频特性与相频特性,指定需要滤除的频带,通过选择滤波器类型(IIR/FIR),确定对应的滤波器(低通、高通)技术指标。
⑶、滤波器设计
根据以上技术指标(通带截止频率、通带最大衰减、阻带截止频率、阻带最小衰减),设计数字滤波器,生成相应的滤波器系数,并画出对应的滤波器幅频特性与相频特性。
①IIRDF设计:
可选择滤波器基型(巴特沃斯或切比雪夫型);
②FIRDF设计:
使用窗口法(可选择窗口类型,并比较分析基于不同窗口、不同阶数
所设计数字滤波器的特点)。
⑷、数字滤波
根据设计的滤波器系数,对测试信号进行数字滤波,展示滤波后信号的幅频特性与相频特性,分析是否满足滤波要求(对同一滤波要求,对比分析各类滤波器的差异)。
①IIRDF:
要求通过差分方程迭代实现滤波(未知初值置零处理);
②FIRDF:
要求通过快速卷积实现滤波(对于长序列,可以选择使用重叠相加或重叠
保留法进行卷积运算)。
⑸、选做内容
将一段语音作为测试信号,通过频谱展示和语音播放,对比分析滤波前后语音信号的变化,进一步加深对数字信号处理的理解。
3、具体要求
⑴、使用MATLAB(或其它开发工具)编程实现上述内容,写出课程设计报告。
⑵、课程设计报告的内容包括:
①课程设计题目和题目设计要求;
②设计思想和系统功能结构及功能说明;
③设计中关键部分的详细描述和介绍,采用流程图描述关键模块的设计思路;
④总结,包括设计过程中遇到的问题和解决方法,心得体会等;
⑤参考文献;
⑥程序源代码清单。
4、考核方式
课程考核分三部分,一部分是上机率,占20%;第二部分是检查成绩,最后两次上机为
检查时间,占50%;第三部分为课程设计报告,占30%。
注意:
⑴、使用GUI界面或混合编程实现仿真程序,酌情加分;
⑵、若发现程序或课程设计报告雷同,一律不及格。
⑶、主要参考资料
[1]S.K.Mitra.DigitalSignalProcessing:
AComputerBasedApproach,3rdEdition[M],NewYork,
USA:
McGraw-Hill,2000
[2]R.G.Lyons.UnderstandingDigitalSignalProcessing,2ndEdition[M].NewJersey,USA:
PrenticeHall,2005
[3]程佩青.数字信号处理教程,第二版[M].北京:
清华大学出版社,2001
[4]赵树杰等.数字信号处理[M].西安:
西安电子科技大学出版社,1997
[5]丁玉美等.数字信号处理—时域离散随机信号处理[M].西安:
西安电子科技大学出版社,
2002
[6]陈怀琛等.MATLAB及在电子信息课程中的应用[M],北京:
电子工业出版社出版,2002
⑷、课程设计进度安排
序号阶段内容合计(天)
一设计准备1
二方案选择及初步设计2
三目标项目设计实现及调试3
四撰写课程设计报告2
五上机检查成绩2
总计(2周)10
二.设计过程
第一题:
信号
⑴、信号发生器
用户根据测试需要,可任选以下两种方式之一生成测试信号:
①、直接输入(或从文件读取)测试序列;
②、输入由多个不同频率正弦信号叠加组合而成的模拟信号公式(如式1-1所示)、采样频率(Hz)、采样点数,动态生成该信号的采样序列,作为测试信号。
100sin(2πf1t)+100sin(2πf2t)+....+100sin(2πfnt)(1-1)
⑵、源代码
1.动态获得
function[ft,t]=sig(fs)
figure;
t=0:
1/fs:
0.1;
f1=50;f2=150;f3=250;
ft=100*sin(2*pi*f1*t)+100*sin(2*pi*f2*t)+100*sin(2*pi*f3*t);
plot(t,ft);
gridon;
xlabel('t'),ylabel('ft');
title('原信号波形')
end
2.静态获得
ft=load('E:
\test.txt');
figure;
subplot(2,1,1);
plot(ft);
title('信号原波形');
⑶、结果
动态
静态
⑷分析
对于动态生成信号的方式,在给定的时域内,生成了含有三个不同频率的混合信号波形。
对于静态生成信号的方式,先在txt文档中输入数据,通过load函数读取txt文档到ft中,得到的ft相当于经过采样后的信号。
第二题
⑴、频谱分析
使用FFT对产生的测试信号进行频谱分析并展示其幅频特性与相频特性,指定需要滤除的频带,通过选择滤波器类型(IIR/FIR),确定对应的滤波器(低通、高通)技术指标。
⑵、源代码
1.
function[]=DFT(ft,t,fs)
figure;
[w,m]=freqz(ft,512);
h=abs(w);
plot(m/pi*fs/2,h);
N=5000;
subplot(3,1,1);
stem(t,ft,'.');gridon;
xlabel('t'),ylabel('ft');
title('实际抽样信号');
k=0:
N-1;
Fw=fft(ft,N);
subplot(3,1,2);
[w,m]=freqz(ft,512);
h=abs(w);
plot(m/pi*fs/2,h);
title('抽样信号幅度谱')
subplot(3,1,3);
plot((k-1)*fs/N,angle(Fw));gridon;
axis([0350-44]);
title('抽样信号相位谱')
end
⑶、结果
⑷分析
谱分析即对信号做DFT处理,再根据得到的频率谱和相位谱分析信号,找到需要的频率段,滤除不需要的。
通过对原信号(这里以动态信号为例)进行谱分析可知,信号中存在三种频率的信号,50Hz、150Hz、250Hz,可以对其进行滤波消除其中的一个或者几个频率。
第三题
⑴、题目
滤波器设计
根据以上技术指标(通带截止频率、通带最大衰减、阻带截止频率、阻带最小衰减),设计数字滤波器,生成相应的滤波器系数,并画出对应的滤波器幅频特性与相频特性。
①IIRDF设计:
可选择滤波器基型(巴特沃斯或切比雪夫型);
②FIRDF设计:
使用窗口法(可选择窗口类型,并比较分析基于不同窗口、不同阶数
所设计数字滤波器的特点)。
⑵、源代码
1.FIR
function[hd,N]=FIR(windows,freq)
figure;
switchfreq
case0
frq='high';
wp=pi*0.45;
ws=pi*0.40;
wc=(wp+ws)/2/pi;
Bt=wp-ws;
case1
frq='stop';
wpu=pi*0.44;
wpl=pi*0.14;
wsu=pi*0.40;
wsl=pi*0.18;
wc=[(wsl+wpl)/2/pi,(wsu+wpu)/2/pi];
Bt=wsl-wpl;
case2
wp=pi*0.2;
ws=pi*0.15;
wc=(wp+ws)/2/pi;
Bt=wp-ws;
case3
wsu=pi*0.44;
wsl=pi*0.14;
wpu=pi*0.40;
wpl=pi*0.18;
wc=[(wsl+wpl)/2/pi,(wsu+wpu)/2/pi];
Bt=wpl-wsl;
otherwise
end
switchwindows
case0
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
iffreq>1
hd=fir1(N-1,wc,hanning(N));
else
hd=fir1(N-1,wc,frq,hanning(N));
end
wn=hanning(N);
n=0:
1:
N-1;
subplot(2,1,1)
stem(n,hd,'.')
title('汉宁窗')
ylabel('h(n)')
subplot(2,1,2)
stem(n,wn,'.')
ylabel('w(n)')
case1
N0=ceil(1.8*pi/Bt);
N=N0+mod(N0+1,2);
iffreq>1
hd=fir1(N-1,wc,boxcar(N));
else
hd=fir1(N-1,wc,frq,boxcar(N));
end
wn=boxcar(N);
n=0:
1:
N-1;
subplot(2,1,1)
stem(n,hd,'.')
title('矩形窗')
ylabel('h(n)')
subplot(2,1,2)
stem(n,wn,'.')
ylabel('w(n)')
otherwise
end
figure;
freqz(hd);
end
2.IIR
function[BH,AH]=IIR(rp,rs,pattern,freq)
figure;
ifpattern==0
iffreq==0
wpz=0.45;
wsz=0.40;
[N,wc]=buttord(wpz,wsz,rp,rs);
[BH,AH]=butter(N,wc,'high');
elseiffreq==1
wpz=[0.15,0.44];
wsz=[0.18,0.40];
[N,wc]=buttord(wpz,wsz,rp,rs);
[BH,AH]=butter(N,wc,'stop');
elseiffreq==2
wpz=0.2;
wsz=0.15;
[N,wc]=buttord(wpz,wsz,rp,rs);
[BH,AH]=butter(N,wc);
elseiffreq==3
wsz=[0.15,0.44];
wpz=[0.18,0.40];
[N,wc]=buttord(wpz,wsz,rp,rs);
[BH,AH]=butter(N,wc);
end
[Bk,Bw]=freqs(BH,AH);
plot(Bw,20*log10(abs(Bk)));
gridon;
xlabel('频率(kHz)');
ylabel('幅度(dB)');
elseifpattern==1
[N1,wp1]=cheb1ord(wp,ws,rp,rs');
[B1,A1]=cheby1(N1,rp,wp1,'high');
[Bk,Bw]=freqs(B1,A1);
plot(Bw,20*log10(abs(Bk)));
gridon;
xlabel('频率(kHz)');
ylabel('幅度(dB)');
end
end
⑶、结果
FIR
FIR
IIR
⑷、分析
根据谱分析的结果进行滤波,可选择高通、低通、带通、带阻,汉宁窗、矩形窗、切比雪夫、巴特沃斯。
根据w=f*2*pi/fs计算参数,通过查看工具箱文档,带阻与带通的w与高通、低通不同,需要用两个个矩阵表示,设置过渡带,设计滤波器。
第四题
(1)题目
数字滤波
根据设计的滤波器系数,对测试信号进行数字滤波,展示滤波后信号的幅频特性与相频特性,分析是否满足滤波要求(对同一滤波要求,对比分析各类滤波器的差异)。
①IIRDF:
要求通过差分方程迭代实现滤波(未知初值置零处理);
②FIRDF:
要求通过快速卷积实现滤波(对于长序列,可以选择使用重叠相加或重叠
保留法进行卷积运算)。
(2)源代码
1.FIR
function[yn]=flit(hd,ft,freq,t,windows)
figure;
subplot(2,1,1);
yn=conv(hd,ft);
plot(yn);
ifwindows==0
axis([701551.1*min(yn)1.1*max(yn)]);
elseifwindows==1
axis([401001.1*min(yn)1.1*max(yn)]);
end
title('滤波后图像')
subplot(2,1,2);
iffreq==0
yy=100*sin(2*pi*250*t);
plot(t,yy);
title('理想滤波后图像')
elseiffreq==1
yy=100*sin(2*pi*250*t)+100*sin(2*pi*50*t);
plot(t,yy);
title('理想滤波后图像')
elseiffreq==2
yy=100*sin(2*pi*50*t);
plot(t,yy);
title('理想滤波后图像')
elseiffreq==3
yy=100*sin(2*pi*100*t);
plot(t,yy);
title('理想滤波后图像')
end
end
2.IIR
function[yn]=flit1(ft,BH,AH)
ys=0;
xi=filtic(BH,AH,ys);
yn=filter(BH,AH,ft,xi);
n=0:
length(yn)-1;
figure;
plot(n,yn);
xlabel('n');
ylabel('y(n)');
end
(3)结果
FIRFIR
IIR
(4)分析
FIR通过对信号和生成的窗函数进行卷积,得到滤波后的波形,可以画出理想滤波的波形,对比两幅图可以看出滤波效果较为理想
IIR将生成的滤波器系数A、B与原信号输入filter函数中可得到滤波后图像对比理想滤波波形,可以看出滤波效果较为理想
第五题
(1)题目
将一段语音作为测试信号,通过频谱展示和语音播放,对比分析滤波前后语音信号的变化,进一步加深对数字信号处理的理解。
(2)源代码
function[]=voice()
[x,fs]=audioread('E:
\test.wav');%原信号
n=size(x,1);%提取采样信号的长度
t=(0:
length(x)-1)/fs;%计算样本时刻
figure;
subplot(2,1,1);
stem(t,x,'.');gridon;
xlabel('t'),ylabel('x');
title('实际抽样信号');
k=0:
n-1;
Fw=fft(x,n);
subplot(2,1,2);
plot((k-1)*fs/n,abs(Fw));gridon;
title('抽样信号幅度谱')
pp=7000;
ss=5000;
wp=pi*pp*2/fs;
ws=pi*ss*2/fs;
wc=(wp+ws)/2/pi;
Bt=wp-ws;
N0=ceil(6.2*pi/Bt);
N=N0+mod(N0+1,2);
hd=fir1(N-1,wc,hanning(N));
wn=hanning(N);
n=0:
1:
N-1;
subplot(2,1,1)
stem(n,hd,'.')
title('汉宁窗')
ylabel('h(n)')
subplot(2,1,2)
stem(n,wn,'.')
ylabel('w(n)')
figure;
X=[x(:
1)',x(:
2)'];
yn=conv(hd,X);
plot(yn);
DFT2(yn,fs);
sound(yn);
(3)结果
(4)分析
使用audioread读入wav音频文件,将声音信息存储在一个矩阵中,对信号进行谱分析和滤波的步骤与动态信号相同。
使用sound函数播放滤波后的音频比较与原音频的区别
第六题
(1)题目
设计GUI界面
(2)源代码
clearall
closeall
clc
globalh_axes1;
globalh_axes2;
interface=figure('name','信号滤波演示系统','position',[100,40,1200,800]);
clfreset;
set(interface,'defaultuicontrolfontsize',12);
set(interface,'defaultuicontrolfontname','宋体');
h_axes1=axes('parent',interface,'position',[0.20.280.250.56],'Unit','normalized','visible','off');
h_axes2=axes('parent',interface,'position',[0.550.280.250.56],'Unit','normalized','visible','off');
figcolor=get(interface,'color');
button_voice=uicontrol(interface,'style','radio','string','音频信号','position',[1905010030],'callback','wav_sig=0');
button_sig=uicontrol(interface,'style','radio','string','普通信号','position',[3205010030],'callback','wav_sig=1');
button_pick_way=uicontrol(interface,'style','popup','string','选择读入信号方式|动态|静态','position',[4505010030],'callback',...
'pick_way=GUI_order(button_pick_way);');
button_freq=uicontrol(interface,'style','popup','string','选择频率|高通|带阻|低通|带通','position',[5705010030],'callback',...
'freq=GUI_order(button_freq);');
button_FIR_IIR=uicontrol(interface,'style','popup','string','选择滤波器|FIR|IIR','position',[6905010030],'callback',...
'choose=GUI_order(button_FIR_IIR);');
button_windows=uicontrol(interface,'style','popup','string','FIR相关设置|汉宁窗|矩形窗','position',[8105010030],'callback',...
'windows=GUI_order(button_windows);');
button_pattern=uicontrol(interface,'style','popup','string','IIR相关设置|巴特沃斯|切比雪夫','position',[9305010030],'callback',...
'pattern=GUI_order(button_pattern);');
button_execuse=uicontrol(interface,'style','push','string','执行','position',[10505010050],'callback','main');
function[result]=GUI_order(ss)
p=[9,0,1,2,3];
result=p(get(ss,'value'));
(3)结果
(4)分析
在做GUI界面时对callback和get函数的应用有些不清楚。
直接在callback后对句柄函数使用get,导致出错。
后来将get函数写入一个新的函数中,再用callback调用,解决了此问题。
三、设计总结与心得体会
本次课设对信号的处理有了更深层的理解,不仅仅知道怎样用,还了解了原理。
掌握了用DFT对信号进行谱分析的原理和方法。
知道了如何设计FIR和IIR滤波器,如何设置参数,如何进行频率转换。
除了对课本知识的深入理解,通过本次课程设计还锻炼了我的MATLAB编程能力。
编写多个函数文件,调用函数,以及对工具箱的使用。
这次还自己设计了GUI界面,因为是第一次做界面,编程中出现了很多问题,不过还是顺利的完成了。
本次课程设计不但让我又学到了一些知识,而且也提高了我的综合能力。
使我在各个方面都得到了锻炼,以后有这样的机会一定会更加的很好利用,它不仅可以提高学习的针对性而且可以很好的锻炼动手能力以及自己的逻辑设计能力和处理问题的能力,希望在以后这方面的能力会很好的加强。
四、课程设计指导书
[1]《数字信号处理(第二版)》.丁玉美等西安电子科技大学出版社
[2]《数字信号处理及其MATLAB实现》,陈怀琛等译,电子工业出版社;
[3]《MATLAB及在电子信息课程中的应用》,陈怀琛等,电子工业出版社