dsp-软件实验报告共12页文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字信号处理
MATLAB 仿真实验报告
学院: 电子工程学院 班级: 2011211203 学号: 2011210876 姓名: 孙月鹏
班内序号: 04 一、实验一:数字信号的 FFT 分析 1、实验内容及要求 (1) 离散信号的频谱分析:
设信号
此信号的0.3pi 和 0.302pi 两根谱线相距很近,谱线 0.45pi 的幅度很小,请选择合适的序列长度 N 和窗函数,用 DFT 分析其频谱,要求得到清楚的三根谱线。 (2) DTMF 信号频谱分析
用计算机声卡采用一段通信系统中电话双音多频(DTMF )拨号数字 0~9的数据,采用快速傅立叶变换(FFT )分析这10个号码DTMF 拨号时的频谱。
2、实验结果
x(n)的时域图与频谱:得到三根清晰的谱线 号码9的频谱 号码8的频谱
00010450303024
().*cos(.)sin(.)cos(.)
x n n n n π
πππ=+--
号码7的频谱号码6的频谱3、实现代码及分析
(1)第一小题:
k=1000; %DFT点数
n=[1:1:k]; %对时域信号进行采样
x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4); subplot(2,1,1);stem(n,x,'.'); %用.画出时域图title('时域序列');xlabel('n');ylabel('x(n)');
xk=fft(x,k); %进行K点DFT变换
w=2*pi/k*[0:1:k-1]; %数字角频率subplot(2,1,2);stem(w/pi,abs(xk)); %画出频谱图
axis([0.2,0.5,0,2]); %设置窗函数的宽度与限幅
title('1000点dft');xlabel('数字频率');ylabel('|xk(k)|');
% 此题关键在于DFT点数N的确定。经过计算和实验,当N=1000时能满足题目要求,看到3条清晰地谱线
(2)第二小题
clear;
close all;
f=[941 1336;697 1209;697 1336;697 1477;
770 1209;770 1336; 770 1477;852 1209;
852 1336;852 1477] %0-9的频率
n=1:400;fs=4000; %取样频率为4000hz
fprintf('请输入数字(0 to 9):\n')
k=input ('')
f1=f(k+1,1); %因为从0开始计算,+1得输
f2=f(k+1,2); %入数字的两个频率
N=400;
x1=sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs); %DTMF的输入信号时域
xn=[x1,zeros(1,400)]; %补零
subplot(2,1,1);plot(xn) %画出时域图xlabel('n')
ylabel('xn')
subplot(2,1,2);
fn=fs*n/N; %取样点的频率
plot(fn,abs(fft(xn(1:400)))); %400点fft变换,画出频谱图
axis([0,4000,0,300])
xlabel('f')
ylabel('FFT')
二、实验二: DTMF 信号的编码
1、实验内容及要求
1)把您的联系电话号码通过DTMF 编码生成为一个 .wav 文件。
技术指标:
根据 ITU Q.23 建议,DTMF 信号的技术指标是:传送/
接收率为每秒 10 个号码,或每个号码 100ms。
每个号码传送过程中,信号存在时间至少 45ms,且不
多于 55ms,100ms 的其余时间是静音。
2)对所生成的DTMF文件进行解码。
由于只需要知道 8 个特定点的频谱值,因此采用一种称为Goertzel 算法的 IIR 滤波器可以有效地提高计算效率。其
传输函数为
2、实验结果
输入号码界面
生成的时域图(占空比为50%)
电话号码的FFT图:每个数字都有两条主谱线
显示检测到的号码
3)实验代码及分析
%第一部分,产生编码
tm=[49,50,51,65; 52,53,54,66;55,56,57,67;42,48,35,68];
%DTMF表中的ASCII码
f1=[697,770,852,941]; %行频率向量f2=[1209,1336,1477,1633]; %列频率向量d=input('please enter number: ','s') %输入电话号码sum=length(d); %电话号码长度
total_x=[]; %电话号码信号
sum_x=[];
sum_x=[sum_x,zeros(1,800)];
for a=1:sum %循环sum次 symbol=abs(d(a)); %求输入的ASCII码
for p=1:4;
for q=1:4;
if tm(p,q)==abs(d(a)); break,end%检测码相符的列号q
end
if tm(p,q)==abs(d(a));break,end%检测码相符的
end
n=1:400;
x=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2(q)/8000);%构成双频信号
x=[x,zeros(1,400)]; %加长序列,增加静音
sum_x=sum_x+x;
total_x=[total_x,x]; %将所有编码连接起来
end
sound(total_x); %播放声音t=total_x/2;
wavwrite(t,'我的手机号码'); %生成声音文件
plot(total_x);
title('DTMF信号时域波形');
%代码主要分成三部分,即根据输入的数字确定双频率、产生正弦信号和生成文件以及绘图。在产生正弦信号的过程中有增加静音和连接运算。整体上用循环对电话号码的每一位进行相同处理。
%第二部分,检测端
k=[18,20,22,25,32,35,38];
N=210;