DFT在信号频谱中的应用设计数字信号处理课程设计Word下载.docx
《DFT在信号频谱中的应用设计数字信号处理课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《DFT在信号频谱中的应用设计数字信号处理课程设计Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
1
2
3
770Hz
4
5
6
852Hz
7
8
9
941Hz
*
#
数字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:
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);
forn=1:
100;
t=clock;
%clock%将当前时间作为日期向量返回
a=sin(n)+cos(n);
DFTmatlab(a,n);
dft_time(n)=etime(clock,t);
%etime指消耗的时间
end;
n=1:
subplot(1,2,1);
plot(n,dft_time,'
.'
);
%plot二维曲线图
xlabel('
N'
ylabel('
time/s'
title('
DFT'
fft_time=zeros(1,100);
a1=sin(n)+cos(n);
fft(a1);
fft_time(n)=etime(clock,t);
subplot(1,2,2);
plot(n,fft_time,'
FFT'
1.2.对离散确定信号
作如下谱分析:
(1)截取使成为有限长序列N(),(长度N自己选)写程序计算出的N点DFT,并画出相应的幅频图。
源程序如下:
n=0:
99;
xn=cos(0.48*pi*n)+cos(0.52*pi*n);
Xk=fft(xn,100);
subplot(2,1,1);
stem(n,xn);
grid;
subplot(2,1,2);
stem(n,abs(Xk));
(2)截取使其成为N点序列,补零加长至M点(长度M自己选),编写程序计算的M点DFT,并画出相应的图。
n=0:
19;
xn=cos(0.48*pi*n)+cos(0.52*pi*n);
n1=0:
24;
xn1=[xn,zeros(1,5)];
n2=0:
59;
xn2=[xn,zeros(1,40)];
Xk1=fft(xn1,25);
Xk2=fft(xn2,60);
subplot(3,1,1);
subplot(3,1,2);
stem(n1,abs(Xk1));
subplot(3,1,3);
stem(n2,abs(Xk2));
(3)利用补零DFT计算N点有限长序列频谱并画出相应的幅频图。
9;
n1=0:
xn3=[xn,zeros(1,90)];
Xk3=DFTmatlab(xn3,100);
plot(n1,abs(Xk3));
1.3研究高密度谱与高分辨率频谱。
对连续确定信号
以采样频率fs=32kHz对信号采样得离散信号,分析下列三种情况的幅频特性。
(1)采集数据长度取N=16点,编写程序计算出的16点DFT,并画出相应的幅频图。
T=1/(32*10^3);
t=(0:
15);
xn=cos(2*pi*6.5*10^3*t*T)+cos(2*pi*7*10^3*t*T)+cos(2*pi*9*10^3*t*T);
Xk=fft(xn,16);
stem(t,xn);
grid;
stem(t,abs(Xk));
(2)采集数据长度N=16点,补零加长至M点(长度M自己选),利用补零DFT计算的频谱并画出相应的幅频图。
50;
xn1=[xn,zeros(1,35)];
Xk1=fft(xn1,51);
stem(n1,xn1);
plot(n1,abs(Xk1));
(3)采集数据长度取为M点(注意不是补零至M),编写程序计算出M点采集数据的的频谱并画出相应的幅频图。
t=[0:
50];
Xk2=fft(xn,51);
plot(t,abs(Xk2));
2、双音多频拨号音编解码系统
2.1设计内容
DTMF拨号音编解码系统的技术指标要求如下:
(1)采样频率:
8kHz。
(2)传输速率:
10个数字/秒,或每个数字100ms。
(3)信号存在的时间t必须满足45ms≤t≤55ms,100ms里的其余时间是无声区。
(4)高频分量电平不能小于低频分量电平,且电平差不大于2dB±
ldB。
(5)对于给定的拨号频率,允许的频率偏移为3%。
2.2编写程序:
(1)编写用IIR系统产生余弦振荡波形的函数way—gener.m。
%wav_gener.m
functionh=wav_gener(R,omega,N)
%w1=0;
w2=0;
delta=zeros(1,N);
delta
(1)=1;
%k=R*cos(omega);
h=zeros(1,N);
%forn=1:
N
%w0=delta(n)+2*k*w1-R^2*w2;
%h(n)=w0-k*w1;
w2=w1;
w1=w0;
%end
h=zeros(1,N);
h(n)=R*cos(omega*n);
end
(2)编写产生DTMF信号的函数DTMF.m。
%dtmf.m
functionx=dtmf(key);
fs=8000;
N=0.1*fs;
%信号时间为100ms,N=Tpmin*Fs;
Tpmin根据频率分辨率得到,DTMF信号的最小频率间隔为73HZ,故至少需要110点
R=1;
fl=0;
fh=0;
switchkey
case{'
1'
'
2'
3'
}
fl=697;
4'
5'
6'
fl=770;
7'
8'
9'
fl=852;
*'
0'
#'
fl=941;
fh=1209;
fh=1336;
fh=1477;
x=wav_gener(R,2*pi*fl/fs,N)+wav_gener(R,2*pi*fh/fs,N);
(3)编写带通滤波器函数。
低频滤波器源程序:
%FindLowerFreq.m
functionnumber=FindLowerFreq(Signal)
Freq=[697,770,852,941];
temp=0;
forn=1:
length(Freq)
Wo=Freq(n);
B=DesignLowerFilter(Wo);
%设计带通滤波器,中心频率分别为697Hz,770Hz,852Hz,941Hz,当n=1时