数字信号处理综合实验:
一、实验内容及要求
实验内容:
综合运用课程所学相关知识,根据实际信号的频谱特性,确定数字滤波器设计技术指标,设计相应的数字滤波器,实现DTMF信号的提取。
设计要求:
(1)通过查阅资料,自学电话中DTMF信号的产生与检测方法。
(2)利用Matlab实现DTMF信号的产生与提取。
自行选择数字(0-9),通过数字方法产生该数字的双频信号;拟定采样频率为8000Hz。根据该信号的频率特性,确定滤波器类型及技术指标,将两个单音分别提取出来。画出数字滤波器输入、输出信号的波形及频谱。
(3)利用Matlab GUI设计用户界面,实现拨号界面,包括10个数字键、显示框(显示按下的数字),画出相应的波形。
(4)自拟实验方案及具体实验步骤(要求写出设计方案)。
创新训练拓展内容:
(1)在GUI用户界面中,除设计要求(3)中的内容外,可增加滤波器部分,即实现设计要求(2)中的内容。
(2)利用Labview软件进行DTMF信号的产生与提取。要求给出系统前面板结构、 程序框图等,记录仿真结果。
(3)利用Simulink进行DTMF信号的产生与提取。要求给出系统仿真图,记录系统的各个输出点的波形。
二、实验步骤、结果与分析
1.通过查阅资料,自学电话中DTMF信号的产生与检测方法。利用Matlab实现DTMF信号的产生与提取。自行选择数字(0-9),通过数字方法产生该数字的双频信号;拟定采样频率为8000Hz。根据该信号的频率特性,确定滤波器类型及技术指标,将两个单音分别提取出来。画出数字滤波器输入、输出信号的波形及频谱。
1.通过查阅资料,自学电话中DTMF信号的产生与检测方法。利用Matlab实现DTMF信号的产生与提取。自行选择数字(0-9),通过数字方法产生该数字的双频信号;拟定采样频率为8000Hz。根据该信号的频率特性,确定滤波器类型及技术指标,将两个单音分别提取出来。画出数字滤波器输入、输出信号的波形及频谱。
以数字5为例。
clc;
clear;
n=0:1023;
x=sin(2*pi*n*770/8000)+sin(2*pi*n*1336/8000);%产生DTMF信号
soundsc(x,8000);
subplot(3,2,1)
plot(n,x);
title('DTMF信号')
axis([0,100,-2,2]);
k=512;
X=fft(x,k);
subplot(3,2,2)
plot(abs(X));
title('DTMF信号频谱')
%利用带通滤波器滤出低频分量
fpl=700;fpu=800;
fsl=550;fsu=850;
Fs=8000;
wp=[2*fpl/Fs,2*fpu/Fs];
ws=[2*fsl/Fs,2*fsu/Fs];
rp=1;rs=40;
[N,wpo]=ellipord(wp,ws,rp,rs);
[B,A]=ellip(N,rp,rs,wpo);
y=filter(B,A,x);
soundsc(y,8000);
subplot(3,2,3)
plot(y);
axis([50,100,-1,1]);
title('DTMF信号低频分量')
Y=fft(y,k);
subplot(3,2,4)
plot(abs(Y));
title(' DTMF信号低频分量频谱')
%利用带通滤波器滤出高频分量
fpl1=1200;fpu1=1400;
fsl1=1100;fsu1=1500;
Fs=8000;
wp1=[2*fpl1/Fs,2*fpu1/Fs];
ws1=[2*fsl1/Fs,2*fsu1/Fs];
rp=1;rs=40;
[N1,wpo1]=ellipord(wp1,ws1,rp,rs);
[B1,A1]=ellip(N1,rp,rs,wpo1);
y1=filter(B1,A1,x);
soundsc(y1,8000);
subplot(3,2,5)
plot(y1);
title(' DTMF信号高频分量')
axis([50,100,-1,1]);
Y1=fft(y1,k);
subplot(3,2,6)
plot(abs(Y1));
title(' DTMF信号高频分量频谱')
2.利用Matlab GUI设计用户界面,实现拨号界面,包括10个数字键、显示框(显示按下的数字),画出相应的波形。
设计的GUI界面:
其中有十二个按键,运行时,每按一个键,右侧框图中都会出现相应的波形,每个按键都有自己独立的程序,下面是按键“2”的gui程序:
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n=0:1023;
x=sin(2*pi*n*697/8000)+sin(2*pi*n*1336/8000);
sound(x,8000);
set(handles.edit1,'String',2);
axes(handles.axes1);
plot(x);
axis([0 200 -2 2]);
k=512;
X=fft(x,k);
plot(handles.axes2,abs(X));
sound(x,8000);
%滤出低频分量
fpl=500;fpu=750;
fsl=300;fsu=900;
Fs=8000;
wp=[2*fpl/Fs,2*fpu/Fs];
ws=[2*fsl/Fs,2*fsu/Fs];
rp=1;rs=40;
[N,wpo]=ellipord(wp,ws,rp,rs);
[B,A]=ellip(N,rp,rs,wpo);
y=filter(B,A,x);
soundsc(y,8000);
axes(handles.axes3);
plot(y);
axis([0 200 -2 2]);
Y=fft(y,k);
plot(handles.axes4,abs(Y));
%滤出高频分量
fpl1=1200;fpu1=1400;
fsl1=900;fsu1=1600;
Fs=8000;
wp1=[2*fpl1/Fs,2*fpu1/Fs];
ws1=[2*fsl1/Fs,2*fsu1/Fs];
rp=1;rs=40;
[N1,wpo1]=ellipord(wp1,ws1,rp,rs);
[B1,A1]=ellip(N1,rp,rs,wpo1);
y1=filter(B1,A1,x);
soundsc(y1,8000);
axes(handles.axes5);
plot(y1);
axis([0 200 -2 2]);
Y1=fft(y1,k);
plot(handles.axes6,abs(Y1));
结果图:
3.利用Simulink进行DTMF信号的提取。要求给出系统仿真图,记录系统各个输出点的波形
系统仿真图:
滤波器设计
4.利用Labview软件进行DTMF信号的产生与提取。要求给出系统前面板结构、 程序框图等,记录仿真结果。
LABVIEW前面板布局(以1为例):
程序框图
滤除低频成分
滤除高频