数字信号处理专业课程设计报告书.docx

上传人:b****3 文档编号:5230639 上传时间:2022-12-14 格式:DOCX 页数:17 大小:235.74KB
下载 相关 举报
数字信号处理专业课程设计报告书.docx_第1页
第1页 / 共17页
数字信号处理专业课程设计报告书.docx_第2页
第2页 / 共17页
数字信号处理专业课程设计报告书.docx_第3页
第3页 / 共17页
数字信号处理专业课程设计报告书.docx_第4页
第4页 / 共17页
数字信号处理专业课程设计报告书.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数字信号处理专业课程设计报告书.docx

《数字信号处理专业课程设计报告书.docx》由会员分享,可在线阅读,更多相关《数字信号处理专业课程设计报告书.docx(17页珍藏版)》请在冰豆网上搜索。

数字信号处理专业课程设计报告书.docx

数字信号处理专业课程设计报告书

实验报告

实验五:

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函数的功能及其一些基本的用法,因此在应用方面没有遇到大的问题,关键在于重叠保留法和重叠相加法的学习,并将这两种方法的子程序编写出来。

在这个过程中,指导老师给了我很大帮助,并且纠正了我原先学习数字信号处理的一些错误认识,收获很多。

我不仅认真的复习掌握了数字信号处理所学的知识,而切对循环卷积和线性卷积有了更深刻的理解,相信这是很有益的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1