dsp-软件实验报告共12页文档

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档