数字信号处理课程设计.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北科技大学
课程设计报告
学生姓名:张燚学号:090701232 专业班级:电子信息工程092班
课程名称:数字信号处理及应用
学年学期:2 0 1 1—2 0 1 2学年第一学期指导教师:王晓君
2 0 11年12月
课程设计成绩评定表
目录
一、设计题目 (4)
二、设计目的 (4)
1、DFT在信号频谱中的应用设计目的: (4)
2、双音多频拨号音频解码系统设计目的 (4)
三、设计原理 (4)
1、DFT在信号频谱中的应用设计原理 (4)
2、双音多频拨号音编解码系统设计原理 (4)
四、实现方法 (5)
1. DFT在信号频谱中的应用 (5)
2. 双音多频拨号音频解码系统 (5)
五、设计内容及要求 (6)
1、DFT在信号频谱分析中的应用 (6)
2、双音多频拨号音编解码系统 (8)
六、设计结果及改进建议 (21)
1. DFT在信号频谱分析中的应用 (21)
2. 双音多频拨号音编解码系统 (24)
七、回答思考题 (24)
1. DFT在信号频谱分析中的作用 (24)
2. 双音多频拨号音编解码系统 (25)
八、设计体会 (25)
九、参考文献 (26)
一、设计题目
我共选择了两个题目:DFT在信号频谱中的应用和双音多频拨号音频解码系统。
二、设计目的
1、DFT在信号频谱中的应用设计目的:
1.1熟悉DFT的性质。
1.2加深理解信号频谱的概念及性质。
2、双音多频拨号音频解码系统设计目的
本设计是一个综合设计,目的在于了解IIR系统、谱分析方法以及滤波器的设计和具体应用。
三、设计原理
1、DFT在信号频谱中的应用设计原理
1.1学习用DFT和补零DFT的方法来计算信号的频谱。
1.2用MATLAB语言编程来实现,在做课程设计前,必须充分预习课本
DTFT、DFT及补零DFT的有关概念,熟悉MATLAB语言,独立编写
程序。
2、双音多频拨号音编解码系统设计原理
一个双音多频电话机(DTMF, dual-tone multi-frequency touch-tone phone)可以对12个按键编码,每个码都是两个单频正弦之和。这两个单频正弦信号分别来自两个频率组,即列频率组(或称低频率群)与行频率组(或称高频率群),
它们与每个按键的对应关系如下表所示:
数字DTMF接收机通过接收到的双音信号的频谱,再现每个按键所对应的两个频率,从而确认被发送的电话号码。
四、实现方法
1.DFT在信号频谱中的应用
因直接计算DFT变换的运算量很大,因此常用快速傅里叶算法FFT代替DFT变换。此题目用到了Matlab中的FFT函数。
2.双音多频拨号音频解码系统
2.1双音多频信号的产生
假设时间连续的DTMF信号按表选择的两个频率,代表低频带中的一个频率,代表高频带中的一个频率。显然采用数字方法产生DTMF信号,方便而且体积小。
形成上面序列的方法有两种,即计算法和查表法。用计算法求正弦波的序列值很容易,但实际中要占用一些计算时间,影响运行速度。查表法是预先将正弦波的各序列值计算出来,寄存在存储器中,运行时只要按照顺序和一定的速度取出便可。这种方法要占用一定的存储空间,但是速度快。
2.2双音多频信号的检测
在接收端,要对收到的双音多频信号进行检测,检测两个正弦波的频率是多少,以判断所对应的十进制数字或者符号。显然这里仍然要用数字方法进行检测,因此要将收到的时间连续DTMF信号经过A/D变换,变成数字信号进行检测。检测的方法有两种,一种是用一组滤波器提取所关心的频率,根据有输出信号的
2个滤波器判断相应的数字或符号。另一种是用DFT(FFT)对双音多频信号进行频谱分析,由信号的幅度谱,判断信号的两个频率,最后确定相应的数字或符号。当检测的音频数目较少时,用滤波器组实现更合适。
此题目主要用到了Matlab中的FIR滤波器(fir2函数)、FFT函数。
五、设计内容及要求
1、DFT在信号频谱分析中的应用
1.1用MATLAB语言编写计算序列x(n)的N点DFT的m函数文件
DFTmatlab.m。并与MATLAB中的内部函数文件fft.m作比较。
DFTmatlab.m源程序如下:
function[q]=DFTmatlab(xn,N)
n=[0:1:N-1]; %n取0到N-1
k=[0:1:N-1];
WN=exp(-j*2*pi/N); %求WN
nk=n'*k;
WNnk=WN.^nk;
q=xn*WNnk %求出xn的DFT表达式
DFT与FFT计算时间比较的源程序:
dft_time=zeros(1,100);
for n=1:100;
t=clock;%clock %将当前时间作为日期向量返回
a=sin(n)+cos(n);
DFTmatlab(a,n);
dft_time(n)=etime(clock,t);%etime指消耗的时间
end;
n=1:100;
subplot(1,2,1);
plot(n,dft_time,'.'); %plot二维曲线图
xlabel('N');ylabel('time/s');
title('DFT');
fft_time=zeros(1,100);
for n=1:1:100;
t=clock;
a1=sin(n)+cos(n);
fft(a1);
fft_time(n)=etime(clock,t);