数字信号处理专业课程设计报告书Word格式.docx
《数字信号处理专业课程设计报告书Word格式.docx》由会员分享,可在线阅读,更多相关《数字信号处理专业课程设计报告书Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
④判断出每个频率对应的DFT的频率采样点。
提示:
各键对应的ASCII码为0—9对应48—57,A—D对应65—68,#对应35,*对应42。
1.实验目的
实现两个数字序列信号的叠加,实现对DTMF信号进行DFT变换
2.实验原理
FFT是DFT快速算法,如果用算法执行这个DFT的计算,计算的次数是Nlog2N.
在这种情况下,如果仅想计算DFT中的M个点,M<
log2N,那么直接计算DFT更有效,利用DFT对输入信号进行检测。
3.实验步骤简述
生成两个信号,同时将两个进行叠加生成DTMF。
将十六个键符转换成ASCII码值,将8个频率对应的采样点数算出。
利用两重循环判断输入的键符是否为十六个键符之一,同时确定其对应的两个频率和采样点数。
调用自定义的gfft函数进行DFT变换。
调用绘图子程序进行绘图。
4.
程序框图
5.实验源程序
functionXF=gfft(x,N,k)
iflength(x)<
N
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:
ifpm(p,q)==a;
break,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));
va=abs(Fx);
subplot(212);
stem(k,va);
²
É
Ñ
ù
ã
k'
|X(k)|'
l1=80;
l2=7.8;
fors=5:
ifva(s)>
l2;
forr=1:
ifva(r)>
l1;
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
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,'
figure
(1)
subplot(2,1,1)
stem(n,x_n)
axis([0500-5050])
holdon
生成信号x_n的波形'
subplot(2,1,2)
stem(n,s_n)
生成噪声信号s_n的波形'
figure
(2)
subplot(1,1,1)
stem(lags/Fs,Rpx)
Rpx[n]'
生成信号y_n的波形'
figure(3)
stem(n,i_n)
生成信号i_n的波形'
stem(lags/Fs,c)
生成信号c的波形'
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<
n≤99;
x(n)=0,其他。
令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))
Y=Y(:
M:
N)'
y=(Y(:
))'
/*重叠相加法的子程序:
function[y]=ovrlpadd(x,h,N)
%Overlap-Addmethodofblllockconvolution
%[y]=ovrlpadd(x,h,N)
%N=blocklength>
=2*length(h)-1
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)
)=conv(xk,h)
fork=1:
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:
yy=Y(Block_Nums+1,:
y=[(XY(:
yy]
y=y(1:
Lenx+M-1)
%主程序:
N=4
n=0:
50;
xn1=n/5
n=51:
99;
xn2=20-n/5
xn=[xn1xn2]
99
figure
(1)
stem(n,xn)
);
x(n)'
/*'
输入信号x(n)*/
h=[10.50.25]
stem(n,h)
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)
stem(y1)
y1'
/*'
快速卷积后的输出y1*/
figure(4)
stem(y2)
/*用重叠保留法后的输出y2*/
figure(5)
stem(y3)
/*运用重叠相加法后的输出y3*/
(1)输入信号x(n)
(2)系统函数信号h(n)
(3)快速卷积后的输出y1
(4)运用重叠保留法后的输出y2
(5)运用重叠相加法后的输出y3
本题实现了用重叠保留法`重叠相加法和快速卷积法,通过计算循环卷积,而计算出线性卷积的过程。
通过运行结果的图形可以知道,用快速卷积,重叠保留法和重叠相加法计算后,输出的波形相同,即尽管运算方法不同,但是线性卷积的结果是相同的,“殊途同归”。
由于实现本题时,我已经比较熟练的掌握了Matlab函数的功能及其一些基本的用法,因此在应用方面没有遇到大的问题,关键在于重叠保留法和重叠相加法的学习,并将这两种方法的子程序编写出来。
在这个过程中,指导老师给了我很大帮助,并且纠正了我原先学习数字信号处理的一些错误认识,收获很多。
我不仅认真的复习掌握了数字信号处理所学的知识,而切对循环卷积和线性卷积有了更深刻的理解,相信这是很有益的。