数字信号处理专业课程设计报告书.docx
- 文档编号:6343082
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:24
- 大小:164.86KB
数字信号处理专业课程设计报告书.docx
《数字信号处理专业课程设计报告书.docx》由会员分享,可在线阅读,更多相关《数字信号处理专业课程设计报告书.docx(24页珍藏版)》请在冰豆网上搜索。
数字信号处理专业课程设计报告书
西安邮电学院
数字信号处理专业课程设计报告书
院系名称
:
电子工程学院
学生姓名
:
专业名称
:
电子信息工程
班级
:
电子0805
实习时间
:
2011年4月11日至2011年4月22日
题目五
1、设计内容
1209Hz
1336Hz
1447Hz
1663Hz
697
1
2
3
A
770
4
5
6
B
852
7
8
9
C
941
*
0
#
D
DTMF信号的生成是通过将两个有限长数字序列相加而实现;而对DTMF信号的检测是通过计算DTMF信号的DFT;然后测量在给定8个频率上的能量而实现。
已知采样频率为8KHz,DTMF信号点数N=205,对DTMF信号进行205点DFT。
图一为DTMF数字。
要求:
①通过键盘任意输入16个键之一,生成DTMF信号。
②试实现对该输入信号的检测,并在屏幕上显示。
③试从计算量角度考虑为什么采用DFT而不用FFT进行DTMF信号检测。
④判断出每个频率对应的DFT的频率采样点。
图一:
DTMF信号
2、设计目的
(1)了解双音多频信号(doubletonemulti——frequency,DTMF)的产生与检测原理,熟悉数字信号处理在通信中的应用;
(2)对DFT熟练的掌握并会用MATLAB实现;
(3)对DTMF信号的生成及其检测有所了解,进一步对DFT的定义、物理意义及基本性质有深入了解。
3、设计原理
在DTMF通信系统中共有八个频率,分为四个高频音和四个低频音,用一个高频音和一个低频音的组合来表示一个信号。
这样共能提供16种组合,分别代表16种信号。
DTMF系统可以用模拟或数字手段实现。
当用数字手段实现时,可以通过软件来模拟合成DTMF信号。
当输入某一个数字时,将对应产生两个不同频率的信号,一种简单的产生方法是正弦波方案,在此方案下,产生的时域信号为x(t)=sin(2*pi*Flt)+sin(2*pi*Fht)。
经过Fs的采样后得到离散信号x(n)=sin(2*pi*n*Fl/Fs)+sin(2*pi*n*Fh/Fs)。
离散频率点M的选择:
得到的x(n)的频谱是连续的,由于计算机只能计算一个离散的频率点频谱,并且采用快速算法计算这些频谱,所以这里存在一个频率间隔W如何确定的问题。
设在(0,2*pi)上取M个频率点,则频率间隔W=2*pi/M,我们所能观察到的频率点为Wk=2*pi*k/M(k=0,1,…,M-1)。
在确定M时不能使M太小,M太小将使频率采样间隔变大,从而使信号频率点f与观测频率点fk(fk=wk*fs/2*pi=k*fs/M)间误差变大。
对M=205,fs=8000Hz,各频率f对应的k=f*M/fs值如图二所示:
频率f
k值
取整后k值
频率f
k值
取整后k值
697
17.861
18
1209
30.981
31
770
19.731
20
1336
34.235
34
852
21.833
22
1447
37.848
38
941
24.113
24
1663
42.614
43
图二:
各频率对应的k值
4、设计步骤
(1)设计好自己的思路,画出流程图,如图图三所示;
(2)用键盘输入字符从而获得两个序列的频率;
(3)DTMF信号的产生。
DTMF信号的生成是通过有限长数字序列的相加而实现,通过两频率确定唯一的字母,用该两个信号相加实现DTMF信号;
(4)DTMF信号得到DFT变化。
先对该信号进行205点上的DFT变换,求出其频谱分布;
(5)通过频谱能量值的大小,找到两个最大值对应的2个k值,根据k值检测出输入信号所对应的数字。
设计程序流程图:
图三:
第五题流程图
5、实验程序
clearall;
f1=697;f2=770;f3=852;f4=941;f5=1209;f6=1336;f7=1447;f8=1663;
fs=8000;n=1:
205;
while
(1)
while
(1)
clc
flag=0;%给标志函数赋初值
disp('1209133614471663');
disp('697123A');
disp('770456B');
disp('852789C');
disp('941*0#D');
key=input('请输入按键','s');
switchkey
case['1']
x1=sin(2*pi*n*f1/fs);
b=fft(x1,205);
figure('name','傅里叶变换图');
subplot(4,1,1);stem(b,'.');ylabel('x1')%画出x1DFT变换后的图形
x2=sin(2*pi*n*f5/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')%画出x2DFT变换后的图形
case['2']
x1=sin(2*pi*n*f1/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f6/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['3']
x1=sin(2*pi*n*f1/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f7/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['A']
x1=sin(2*pi*n*f1/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f8/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['4']
x1=sin(2*pi*n*f2/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f5/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['5']
x1=sin(2*pi*n*f2/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f6/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['6']
x1=sin(2*pi*n*f2/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f7/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['B']
x1=sin(2*pi*n*f2/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f8/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['7']
x1=sin(2*pi*n*f3/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f5/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['8']
x1=sin(2*pi*n*f3/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f6/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['9']
x1=sin(2*pi*n*f3/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f7/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['C']
x1=sin(2*pi*n*f3/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f8/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['*']
x1=sin(2*pi*n*f4/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f5/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['0']
x1=sin(2*pi*n*f4/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f6/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['#']
x1=sin(2*pi*n*f4/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f7/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
case['D']
x1=sin(2*pi*n*f4/fs);b=fft(x1,205);subplot(4,1,1);stem(b,'.');ylabel('x1')
x2=sin(2*pi*n*f8/fs);a=fft(x2,205);subplot(4,1,2);stem(a,'.');ylabel('x2')
otherwise
flag=1;%如果输入其他的数值给标志函数赋值1,并且提示出错
clc;
disp('你输入按键错误');
temp=input('是否要继续Y|y---是N|n--否','s');
if(temp==['n']|temp==['N'])flag=0;
end
end;
if(flag==0)break;
end
end
x=x1+x2;
xk=fft(x,205);
k=0:
204;
subplot(413);
stem(k,xk(1:
205),'.');ylabel('xk')
xk=abs(xk);%傅里叶变换后的频谱
subplot(414);
stem(k,xk(1:
205),'.');ylabel('|xk|');title('xk的模值')
max1=1;xmax1=xk
(1);
max2=1;xmax2=xk
(1);
form=1:
50
if(xmax1 xmax1=xk(m);%xmax为xk的最大值 max1=m;%最大值对应的m end end form=1: 50 if(xmax2 xmax2=xk(m); max2=m; end end max1=max1-1%因为横坐标是从0开始的所以要给max1和max2减去1 max2=max2-1 if(max1>max2)%判断max1与max2的大小,并把较小的赋值给max1 k=max1; max1=max2; max2=k; end disp('------------------------经过传输后知道--------------------------------'); switchmax1 case18 switchmax2 case31 disp('输入的是-------1'); case34 disp('输入的是-------2'); case37 disp('输入的是-------3'); case43 disp('输入的是-------A'); end case20 switchmax2 case31 disp('输入的是-------4'); case34 disp('输入的是-------5'); case37 disp('输入的是-------6'); case43 disp('输入的是-------B'); end case22 switchmax2 case31 disp('输入的是-------7'); case34 disp('输入的是-------8'); case37 disp('输入的是-------9'); case43 disp('输入的是-------C'); end case24 switchmax2 case31 disp('输入的是-------*'); case34 disp('输入的是-------0'); case37 disp('输入的是-------#'); case43 disp('输入的是-------D'); end end temp=input('是否要继续按键Y|y---是N|n--退出','s'); if(temp==['n']|temp==['N'])break;; clc; end end 6.实验结果 1209133614471663 697123A 770456B 852789C 941*0#D 请输入按键2 max1= 18 max2= 34 ------------------------经过传输后知道-------------------------------- 输入的是-------2 是否要继续按键Y|y---是N|n--退出n 运行的实验频谱图如图图五所示: 图四: 信号的频谱图 7、实验总结及分析 本题是当输入某一个数字时,将对应产生两个不同频率的信号,一种简单的产生方法是正弦波方案,在此方案下,产生的时域信号为x(t)=sin(2*pi*Flt)+sin(2*pi*Fht)。 经过Fs的采样后得到离散信号x(n)=sin(2*pi*n*Fl/Fs)+sin(2*pi*n*Fh/Fs)。 再通过离散傅立叶变换后得到其频谱,通过测量其对应采样点上的能量值的大小进行信号解码的。 通过本题对对DTMF信号的生成及其检测有所了解,采用DFT对该信号进行检测,由于该题只采样了205点,采样点不太多,故采用DFT,FFT适用于采样点较多的信号的检测。 检测过程通过对几个特殊点上的DFT变换幅值和判断标准进行比较判断,从而确定输入字母。 通过实验对DFT的定义、物理意义及基本性质有了深入了解。 题目六 1、设计内容 (提取淹没在噪声中的周期信号)提取淹没在噪声中的周期信号要求自相关(以判断周期)和互相关(以恢复信号自身)。 (a)生成信号x[n]=sin(0.1*n*pi),0n 499.增加一些均匀分布的随机噪声(其噪声幅度为2,平均值为0)以得到噪声信号s[n]。 作出每个信号随参数n变化的图形。 是否能够从所画的x[n]中判断出任何的周期性? 如果可以,求周期N。 能否由所画得s[n]判断出任何周期性? (b)求x[n]的周期自相关rpx[n]并作图。 能否由所作的rpx[n]判断出任何周期性? 如果可以,求周期N。 这个N是否与x[n]的周期相同? (c)利用上面所求的N值(如果没有,则由x[n]判断)生成一个500样本的冲击 串求出s[n]和i[n]的周期互相关。 (i[n]= 0≤n≤499) 2、设计目的 (1)学会使用Matlab作为画图工具; (2)噪声的产生方法和对信号进行周期性的判断; (3)函数自相关和互相关的概念和对其的求法; (4)冲击串的产生方法; (5)提取淹没在噪声中的信号,并求自相关和互相关,画出图形。 3、设计原理 正弦信号是周期信号,通过它的图形可以确定其周期性,当加上噪声信号以后它不在具有周期性。 函数的自相关函数和互相关函数的波形也具有周期性,通过波形也可以判断其周期。 给一个正弦信号并加均匀分布随机噪声,然后提取淹没在噪声中的信号,计算自相关以判断周期,计算互相关以恢复信号本身。 x[n]的周期N=20,因为s[n]受噪声影响已经没有严格的周期性。 rpx[n]有周期性N=20,与x[n]的周期相同。 也可以从互相关中提取x的周期。 3、设计步骤 (1)设计好自己的思路,画出流程图,如图图五所示; (2)生成正弦信号x[n],并判断其周期性,编写均匀分布的噪声信号,并与原始信号叠加生成信号s[n]; (3)运用卷积得到加噪信号s[n]的自相关函数判断输入信号x[n]的周期; (4)输出冲击串函数,运用互相关函数的调用得到i(n)和x(n)的互相关函数; (5)打印输入信号、加噪信号、自相关函数信号、冲击串信号、互相关信号的波形。 设计程序流程图: b.产生互相关函数 a.产生自相关函数 图五: 第六题的流程图 5、实验程序 clearall %第一小问 n=0: 1: 499; figure('name','噪声信号');subplot(3,1,1);x=sin(0.1*n*pi);plot(n,x,'r'); xlabel('n');ylabel('x(n)');title('原始信号x(n)的图形'); %产生均值为0的均匀分布的噪声 p=4/3;%根据题目所给的均值还有均匀分布的随机矩阵算出所需信号的功率 jun=0;%需要的均值 N=500;y=rand(1,N); temp=var(y);%y序列的方差 c=sqrt((p-jun^2)/var(y));%求系数c d=jun-c*mean(y);%求系数d u=c*y+d;%求均值为jun、功率为P的随机序列u jun_u=mean(u);%求序列u的均值 power_u=dot(u,u)/N;%求随机序列的u的功率,检验u(n)的功率是否满足要求dot subplot(3,1,2);plot(u,'r');gridon; xlabel('n');ylabel('u(n)');title('噪声u(n)的图形'); z=x+u;%噪声与信号的叠加 subplot(3,1,3);plot(n,z,'r');gridon; xlabel('n');ylabel('z(n)');title('噪声信号z(n)的图形'); %第二小问 figure('name','自相关函数');plot(n,z,'r');gridon; x=sin(0.1*n*pi);y=sin(0.1*(n+1)*pi); c=conv(x,y);%x与y的卷积就是自相关函数 plot(c);title('x(n)的自相关函数');gridon; %第三小问 N=20;%N是x(n)的周期 n=0: 499;in=zeros(1,500);%冲击串i(n)的产生 fork=1: 20: 500 in(k)=1; end rh=xcorr(z,in);%s(n)与i(n)的周期互相关 figure('name','互相关函数');subplot(2,1,1); stem(n,in);title('冲击串i(n)的图形'); subplot(2,1,2);plot(rh);title('i(n)和x(n)的互相关函数');gridon; 6.实验结果 一、信号、噪声、噪声信号的波形图如图图六所示: 图六: 信号、噪声、噪声信号图形 二、x(n)的自相关函数的图形如图图七所示: 图七: x(n)的自相关函数图形 三、冲击串i(n)以及其与x(n)的互相关函数的图形如图图八所示: 图八: 冲击串图形以及与x(n)互相关图形 7、实验总结及分析 该题目验证了正弦信号的周期性,函数自相关函数和互相关函数的周期性,并通过其图形判断它们的周期N。 通过图形判断周期正弦信号x[n]的周期性N=20,加噪以后的信号s[n]判断不出任何周期性。 通过所画正弦信号x[n]的自相关函数rpx[n]的图形,求出rpx[n]的周期N,这个周期与原正弦信号x[n]的周期相同。 通过学习,进一步复习了周期信号的周期性的判断,知道了函数自相关周期与原始信号周期的关系。 题目九 1、设计内容(字体大小小四) 设有一长序列x(n) 令x(n)通过一离散系统,其单位抽样响应 试编程序分别用重叠保留法、重叠相加法、快速卷积法实现该系统对x(n)的滤波。 2、设计目的 (1)学习重叠保留法,会用重叠保留法计算线性卷积; (2)复习重叠相加法,会用重叠相加法计算线性卷积; (3)复习快速卷积法,掌握其原理,并用快速卷积法计算线性卷积; (4)比较三种方法的优劣,会选用适当的方法快速准确的计算线性卷积; 3、设计原理 重叠保留法原理(适于N》》M的情况): 假设将序列x(n)分成多段N点序列,滤波器的脉冲响应为M点序列,M《N。 用输入段和脉冲响应之间的N点循环卷积产生该段的输出序列。 由上面的结论,可知其中前(M-1)个样本不是正确的输出值。 若将x(n)简单的分成互不重叠的各段,则输出的序列会有不正确的样本区间存在。 为纠正这个问题,使X(n)分成相互重叠(M-1)个样本的许多段,在卷积的结果中抛弃前面(M-1)个样本,保留后面的(N-M+1)个输出样本,最后将输出的结果连成一个序列。 为了修正第一段中的前(M-1)个样本,将第一段的前(M-1)个样本置零。 重叠相加法原理: 将输入序列x(n)分为互不重叠长度为N的K段,每段分别与长度为M脉冲响应H(n)按N+M-1的长度做循环卷
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 专业课程 设计 报告书