数字信号处理专业课程设计报告书.docx
- 文档编号:7374634
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:17
- 大小:235.74KB
数字信号处理专业课程设计报告书.docx
《数字信号处理专业课程设计报告书.docx》由会员分享,可在线阅读,更多相关《数字信号处理专业课程设计报告书.docx(17页珍藏版)》请在冰点文库上搜索。
数字信号处理专业课程设计报告书
实验报告
实验五:
DTMF信号的生成是通过将两个有限长数字序列相加而实现;而对DTMF信号的检测是通过计算DTMF信号的DFT;然后测量在给定8个频率上的能量而实现。
已知采样频率为8KHz,DTMF信号点数N=205,对DTMF信号进行205点DFT。
右表为DTMF数字。
1209Hz
1336Hz
1447Hz
1663Hz
1
697Hz
1
2
3
A
2
770Hz
4
5
6
B
3
852Hz
7
8
9
C
4
941Hz
*
0
#
D
要求:
①通过键盘任意输入16个键之一,生成DTMF信号。
②试实现对该输入信号的检测,并在屏幕上显示。
③试从计算量角度考虑为什么采用DFT而不用FFT进行DTMF信号检测。
④判断出每个频率对应的DFT的频率采样点。
提示:
各键对应的ASCII码为0—9对应48—57,A—D对应65—68,#对应35,*对应42。
1.实验目的
实现两个数字序列信号的叠加,实现对DTMF信号进行DFT变换
2.实验原理
FFT是DFT快速算法,如果用算法执行这个DFT的计算,计算的次数是Nlog2N.
在这种情况下,如果仅想计算DFT中的M个点,M 3.实验步骤简述 生成两个信号,同时将两个进行叠加生成DTMF。 将十六个键符转换成ASCII码值,将8个频率对应的采样点数算出。 利用两重循环判断输入的键符是否为十六个键符之一,同时确定其对应的两个频率和采样点数。 调用自定义的gfft函数进行DFT变换。 调用绘图子程序进行绘图。 4. 程序框图 5.实验源程序 functionXF=gfft(x,N,k) iflength(x) xe=[xzeros(1,N-length(x))]; else xe=x; end x1=[xe0]; d1=2*cos(2*pi*k/N);W=exp(-i*2*pi*k/N); y=filter(1,[1-d11],x1); XF=y(N+1)-W*y(N); a=input('ÊäÈëÊý×Ö=','s'); sm=abs(a); pm=[49505165;52535466;55565767;42483568]; forp=1: 4; forq=1: 4; ifpm(p,q)==a;break,end end ifpm(p,q)==a;break,end end fprintf('ASCIIÂëÖµAM=%0.f\n',pm(p,q)) f1=[697770852941]; f2=[1209133614471663]; n=0: 204; x=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000); subplot(211); plot(x); xlabel('n'); ylabel('x'); title('DTMFÐźÅ'); k=[1820222431343843]; va=zeros(1,8); form=1: 8; Fx(m)=gfft(x,205,k(m)); end va=abs(Fx); subplot(212); stem(k,va); title('²ÉÑùµã'); xlabel('k'); ylabel('|X(k)|'); l1=80; l2=7.8; fors=5: 8; ifva(s)>l2;break,end end forr=1: 4; ifva(r)>l1;break,end end disp(['²¦ºÅ·ûºÅ=',setstr(pm(r,s-4))]) 6.实验结果及图表 输入数字=7 ASCII码值AM=55 拨号符号=7 7.实验总结: 本题做起来有些难度,特别是实现16个符号的输入以及对应频率,码值等,但是源程序中巧妙运用MATLAB数据的矩阵存储形式。 将字符和信号对应起来,在结合循环程序结构,使得程序简单化。 程序中在进行205点DFT变幻时,由于不能用快速FFT,而采用较快的算法来做DFT变化。 这都是该程序中的优点。 题目中的八个频率样值点是通过W=k*2*pi/N以及W=2*pi*f/fs联力求得的整数解。 通过这个试验,对DFT变涣及其作用有了新的认识,对数字信号的实际运用有了新的了解,同时,也体会到巧妙的构思对MATILAB仿真也有重要的作用。 在这个试验中,老师和同学的帮助与讲解,使得自己的理论知识有了更深的见解 第六题: 一: 实验题目: (提取淹没在噪声中的周期信号)提取淹没在噪声中的周期信号要求自相关(以判断周期)和互相关(以恢复信号自身)。 (1)生成信号x(n)=sin(0.1*n*pi),0≤n≤499.增加一些均匀分布的随机噪声(其噪声幅度为2,平均植为0)以得到噪声信号s(n).作出每个信号随参数n变化的图形。 是否能够从所画的x(n)中判断出任何的周期性? 如果可以,求周期N。 能否由所画的s(n)判断出任何周期性? (2)求x(n)的周期自相关rpx(n)并作图。 能否由所作的rpx(n)判断出任何周期性? 如果可以,求周期N。 这个N是否与x(n)的周期相同? ()利用上面所求的N值(如果没有,则由x(n)判断)生成一个500样本的冲击串i(n)=∑δ(n-kN),0≤n≤499.求出s(n)和x(n)的周期互相关。 二: 实验目的. 提取淹没在噪声中的周期信号 三: 实验原理 已知生成的正弦信号x(n)是周期信号,可以确定其周期,当加上噪声信号h(n)以后它不再具有周期性。 函数的自相关函数y(n)和互相关函数c(n)的波形也具有周期性,通过波形也可以判断其周期。 四: 实验步骤简述 1.生成正弦信号x(n),并判断其周期性 2.生成均匀分布的随机噪声信号h(n),并叠加生成信号s(n)=x(n)+h(n) 3.运用自相关函数的调用得到输入信号的自相关函数y(n) 4.输出冲击串函数,运用互相关函数的调用得到i(n)和s(n)的互相关函数c(n) 五: 程序框图 两次调用绘图子程序,分别绘制x(n),s(n)的图形 closeall clearall A=10 n=0: 499 Fs=0.05 Lag=10 x_n=A*sin(0.1*n*pi) n0=2*rand(1,500) s_n=x_n+n0 [Rpx,lags]=xcorr(x_n,Lag,'unbiased') k=1: 24; i_n=zeros(1,500) i_n(1,k*20)=1 i_n(1,1)=1 [c,lags]=xcorr(x_n,i_n,Lag,'unbiased') figure (1) subplot(2,1,1) stem(n,x_n) axis([0500-5050]) holdon title('生成信号x_n的波形') xlabel('n') subplot(2,1,2) stem(n,s_n) axis([0500-5050]) holdon title('生成噪声信号s_n的波形') xlabel('n') figure (2) subplot(1,1,1) stem(lags/Fs,Rpx) xlabel('n') ylabel('Rpx[n]') holdon title('生成信号y_n的波形') xlabel('n') figure(3) subplot(2,1,1) stem(n,i_n) holdon title('生成信号i_n的波形') xlabel('n') subplot(2,1,2) stem(lags/Fs,c) holdon title('生成信号c的波形') xlabel('n') ylabel('c') 七程序结果及图表 (1)信号X(n)及加噪声后的信号S(n)的波形 (2)生成自相关信号y(n)的波形 (3)信号i(n)j及互相关信号c(n)的波形 八实验总结 本题通过图形判断周期N验证了正弦信号的周期性,函数自相关函数和互相关函数的周期性。 通过学习,进一步复习了周期信号的周期性的判断,知道了函数自相关和互相关的内涵,以及它们所实现的算法实质。 作为初次使用Matlab实现信号处理的题目,在实验过程中,我还是遇到了许多问题,例如对某些Matlab函数的功能不够清晰,对数字信号处理的一些相关知识也有些遗忘,所以在复习数字信号处理后,我积极的向同学和老师请教,在他们的帮助下,我顺利完成了题目要求,并对后续学习Matlab产生了更加浓厚的兴趣。 第九题: 一: 实验题目: 设有一个序列x(n): x(n)=n/5,0≤n≤50;x(n)=20-n/5,50 令x(n)通过一离散系统,其单位抽样响应h(n)=1/2.^n,0≤n≤2;h(n)=0,其他。 试编程序分别用重叠保留法、重叠相加法、快速卷积法实现该系统对x(n)的滤波。 二: 实验目的 1.学习并掌握重叠保留法,会用重叠保留法计算线性卷积。 2.学习并掌握重叠相加法,会用重叠相加法计算线性卷积。 3.复习快速卷积法,掌握其原理,并用快速卷积法计算线性卷积。 4.体会三种方法的优劣,会选用适当的方法快速准确的计算线性卷积 三: 实验原理: 重叠保留法原理(适于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的K段,每段分别与长度为M脉冲响应H(n)按N+M-1的长度做循环卷积,这样所得的K个输出段Y()的长度都是N+M-1。 各段的长度大于间隔,所以各段之间有M-1个重叠的样本,把着K个输出段相加时把重叠的样本叠加在一起就形成了最终的的输出。 快速卷积法原理: 先计算出卷积的长度L,把长度为N输入信号x(n)前面补L-N个0和长度为M的系统函数h(n)前面补L-M个0,然后在对x(n)和h(n)分别作L点DFT变换,再把H(K)和X(K)相乘,最后再作离散傅立叶反变换得到快速卷积的输出y(n). 四: 实验步骤简述 1.编写重叠保留法和重叠相加法的子程序。 2.对定义主程序中应用的变量,并初始化。 编写输入函数x(n)和系统函数h(n),并输出其图形 3.调用子程序实现重叠保留算法和重叠相加算法,计算输入函数x(n)和系统函数h(n)的线性卷积,并输出结果函数的波形。 五: 程序框图 用绘图子程序,绘制x(n) 调用绘图子程序,绘制系统函数信号h(n) 六: 源程序 /*重叠保留法的子程序: */ function[y]=hsolpsav(x,h,N) %High-speedOverlap-SavemethodofblockconvolutionusingFFT %[y]=hsolpsav(x,h,N) %y=outputsequence %x=inputsequence %h=impulseresponse %N=blocklength(mustbeapoweroftwo) N=2.^(floor(log10(N)/log10 (2))) Lenx=length(x) M=length(h);M1=M-1;L=N-M1;h=fft(h,N) x=[zeros(1,M1),x,zeros(1,N-1)] K=floor((Lenx+M1-1)/(L))%munbersofblocks Y=zeros(K+1,N) fork=0: K xk=fft(x(k*L+1: k*L+N)) Y(k+1,: )=real(ifft(xk.*h)) end Y=Y(: M: N)' y=(Y(: ))' /*重叠相加法的子程序: */ function[y]=ovrlpadd(x,h,N) %Overlap-Addmethodofblllockconvolution %[y]=ovrlpadd(x,h,N) %y=outputsequence %x=inputsequence %h=impulseresponse %N=blocklength>=2*length(h)-1 Lenx=length(x) M=length(h) Block_Nums=floor((Lenx)/(N)) x=[x,zeros(1,(Block_Nums+1)*N-Lenx)] Y=zeros(Block_Nums+1,N+M-1) fork=0: Block_Nums xk=x(k*N+1: k*N+N) Y(k+1,: )=conv(xk,h) end fork=1: Block_Nums form=1: M-1 Y(k+1,m)=Y(k+1,m)+Y(k,m+N-1) end end XY=Y(1: Block_Nums,1: N)' yy=Y(Block_Nums+1,: ) y=[(XY(: ))',yy] y=y(1: Lenx+M-1) %主程序: closeall clearall N=4 n=0: 50;xn1=n/5 n=51: 99;xn2=20-n/5 xn=[xn1xn2] n=0: 99 figure (1) stem(n,xn) xlabel('n');ylabel('x(n)');/*'输入信号x(n)*/ h=[10.50.25] n=0: 2 figure (2) stem(n,h) xlabel('n');ylabel('h(n)');/*系统函数信号h(n)*/ M=length(xn) L=length(h)+M-1 xe=fft(xn,L) he=fft(h,L) y1=ifft(xe.*he) y2=hsolpsav(xn,h,N) y3=ovrlpadd(xn,h,N) figure(3) stem(y1) xlabel('n');ylabel('y1');/*'快速卷积后的输出y1*/ figure(4) stem(y2) xlabel('n');ylabel('h(n)');/*用重叠保留法后的输出y2*/ figure(5) stem(y3) xlabel('n');ylabel('h(n)');/*运用重叠相加法后的输出y3*/ 七程序结果及图表 (1)输入信号x(n) (2)系统函数信号h(n) (3)快速卷积后的输出y1 (4)运用重叠保留法后的输出y2 (5)运用重叠相加法后的输出y3 八实验总结 本题实现了用重叠保留法`重叠相加法和快速卷积法,通过计算循环卷积,而计算出线性卷积的过程。 通过运行结果的图形可以知道,用快速卷积,重叠保留法和重叠相加法计算后,输出的波形相同,即尽管运算方法不同,但是线性卷积的结果是相同的,“殊途同归”。 由于实现本题时,我已经比较熟练的掌握了Matlab函数的功能及其一些基本的用法,因此在应用方面没有遇到大的问题,关键在于重叠保留法和重叠相加法的学习,并将这两种方法的子程序编写出来。 在这个过程中,指导老师给了我很大帮助,并且纠正了我原先学习数字信号处理的一些错误认识,收获很多。 我不仅认真的复习掌握了数字信号处理所学的知识,而切对循环卷积和线性卷积有了更深刻的理解,相信这是很有益的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 专业课程 设计 报告书