matlab仿真实验报告

更新时间:2023-09-23 12:35:01 阅读量: 自然科学 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB仿真实验报告

院 系:电子工程学院 姓 名:王 力 班 级:2013211207 学 号:2013211006

实验一:数字信号的FFT分析

实验内容及要求

(1) 离散信号的频谱分析:

?设信号 x(n)?0.001*cos(0.45n?)?sin(0.3n?)?cos(0.302n??)4

此信号的0.3pi 和 0.302pi两根谱线相距很近,谱线 0.45pi 的幅度很小,请选择合适的序列长度 N 和窗函数,用 DFT 分析其频谱,要求得到清楚的三根谱线。 (2) DTMF 信号频谱分析P218 -225 4.9.3 双音)用计算机声卡采用一段通信系统中电话双音多频(DTMF)拨号数字 0~9的数据,采用快速傅立叶变换(FFT)分析这10个号码DTMF拨号时的频谱。

实验分析

要得到清晰的三根谱线,用matlab内置函数fft对时域信号进行快速傅里叶变换,需要选好变换点数N,以避免出现频谱模糊现象。程序中选择N=1000

由于谱线0.45pi的幅度很小,在作图时需要对坐标比例进行控制。使用axis函数实现。

1. 代码及注释

频谱分析:

N = 1000; % Length of DFT

n = [0:1:N-1];

xn = 0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4); Xk = fft(xn,N);

xn1=0.001*cos(0.45*n*pi); Xk1 = fft(xn1,N); xn2=sin(0.3*n*pi); Xk2 = fft(xn2,N);

xn3=-cos(0.302*n*pi-pi/4); Xk3 = fft(xn3,N); k=[0:1:N/2]; w=2*pi*k/N; subplot(2,1,1);

stem(w/pi,abs(xn(1:1:(N/2+1))),'.'); title('x(n)');xlabel('w/pi'); axis([0.28,0.50,0,4]);

subplot(2,1,2);stem(w/pi,abs(Xk(1:1:(N/2+1))),'r.');

title('DFT 0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4)'); xlabel('w/pi');axis([0.28,0.50,0,4]); 结果截图:

DTMF频谱分析: clear; close all;

column=[1209,1336,1477,1633]; line=[697,770,852,941]; fs=10000; N=1024; ts=1/fs; n=0:N-1;

f=0:fs/N:fs/N*(N-1); key=zeros(16,N);

key(1,:)=cos(2*pi*column(1)*n*ts)+cos(2*pi*line(1)*n*ts); key(2,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(1)*n*ts); key(3,:)=cos(2*pi*column(3)*n*ts)+cos(2*pi*line(1)*n*ts); key(4,:)=cos(2*pi*column(1)*n*ts)+cos(2*pi*line(2)*n*ts); key(5,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(2)*n*ts); key(6,:)=cos(2*pi*column(3)*n*ts)+cos(2*pi*line(2)*n*ts); key(7,:)=cos(2*pi*column(1)*n*ts)+cos(2*pi*line(3)*n*ts); key(8,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(3)*n*ts); key(9,:)=cos(2*pi*column(3)*n*ts)+cos(2*pi*line(3)*n*ts); key(10,:)=cos(2*pi*column(2)*n*ts)+cos(2*pi*line(4)*n*ts); figure; for i=1:10

subplot(4,4,i),plot(f,abs(fft(key(i,:))))

grid; end

结果截图:

遇到的问题和解决方法

在进行第一题的DFT变换时,不知道该选取多大的取样点数N才能得到清晰的三根谱线。通过计算确定数字信号的最小为1000周期才选定了N=1000。

实验二:DTMF 信号的编码和解码

实验内容及要求

1)把您的联系电话号码通过DTMF 编码生成为一个 .wav 文件。 ? 技术指标:

? 根据 ITU Q.23 建议,DTMF 信号的技术指标是:传送/接收率为每

秒 10 个号码,或每个号码 100ms。

? 每个号码传送过程中,信号存在时间至少 45ms,且不多于 55ms,

100ms 的其余时间是静音。

? 在每个频率点上允许有不超过±1.5% 的频率误差。任何超过给定频

率±3.5% 的信号,均被认为是无效的,拒绝接收。

(其中关键是不同频率的正弦波的产生。可以使用查表方式模拟产生两个不同频率的正弦波。正弦表的制定要保证合成信号的频率误差在±1.5%以内,同时使取样点数尽量少)

2)对所生成的DTMF文件进行解码。

? DTMF 信号解码可以采用 FFT 计算 N 点频率处的频谱值,然后估计出所

拨号码。但 FFT计算了许多不需要的值,计算量太大,而且为保证频率分辨率,FFT的点数较大,不利于实时实现。因此,FFT 不适合于 DTMF 信号解码的应用。

? 由于只需要知道 8 个特定点的频谱值,因此采用一种称为 Goertzel 算法的

IIR 滤波器可以有效地提高计算效率。其传递函数为:fs=8kHz. ? ?j2?k/N?11?ez Hk(z)?1?2cos(2?k/N)z?1?z?2实验分析

DTMF 信号是将拨号盘上的 0~F 共16 个数字,用音频范围的 8 个频率来表示的一种编码方

式。8 个频率分为高频群和低频群两组,分别作为列频和行频。 每个字符的信号由来自列频和行频的两个频率的正弦信号叠加而成。频率组合方式如下图所

示。

根据图片即可得到各个数字对应的DTFM信号。

通过zeros全零矩阵来设置占空比,以达到题目要求。得到信号后,使用sound函数来播放拨号音,writewave将信号写入声音文件。

在解码时,使用Goertzel算法。滤波器调谐到这8个频率之上后,在相应的频率上的频谱值最大,通过与标准值的对比找出在DTMF图中的行和列,再对应出相应的拨号数字。 查阅资料知,205点的FFT最佳,而且每个频率对应的K值都已经给定(如K=18对应696hz;K=20对应770hz;K=22对应852HZ),则根据频谱图上最大值对应的K值,就可以求出相应的频率,从而比对得出数字。

1. 代码及注释

511339257

N=800;fs=8000;%每个号码100ms 800 8000

tm=[49,50,51,65;52,53,54,66;55,56,57,67;42,48,35,68]; n=1:N;%取样点

flow=[697 770 852 941];%低频

fhigh=[1209 1336 1477 1633];%高频

x01=sin(2*pi*flow(1)*n/fs)+sin(2*pi*fhigh(1)*n/fs); %1

本文来源:https://www.bwwdw.com/article/da9d.html

Top