云大数字信号实验五

合集下载

大学数字实验报告

大学数字实验报告

实验名称:数字信号处理实验实验日期:2023年3月15日实验地点:大学计算机实验室实验目的:1. 理解数字信号处理的基本概念和原理。

2. 掌握数字滤波器的设计和实现方法。

3. 学会使用数字信号处理软件进行实验和分析。

4. 培养实验操作能力和数据分析能力。

实验原理:数字信号处理(Digital Signal Processing,DSP)是利用计算机或专用处理硬件对数字信号进行操作的一门技术。

它包括信号的采样、量化、滤波、变换、压缩、解压缩等处理过程。

本实验主要涉及数字滤波器的设计和实现。

实验仪器:1. 实验计算机2. 数字信号处理软件(如MATLAB)3. 示波器4. 音频播放器实验内容:一、实验一:数字滤波器的基本概念1. 实验目的:理解数字滤波器的基本概念,掌握滤波器的类型和特点。

2. 实验步骤:a. 在MATLAB中创建一个简单的数字滤波器模型,例如低通滤波器。

b. 使用MATLAB的内置函数进行滤波器的设计,并观察滤波器的频率响应。

c. 分析滤波器的性能,包括通带、阻带、过渡带等。

3. 实验结果:a. 设计了一个低通滤波器,其截止频率为1000Hz。

b. 频率响应显示,在截止频率以下,滤波器对信号有较好的抑制效果;在截止频率以上,滤波器对信号有较好的通过效果。

c. 分析结果表明,该滤波器满足实验要求。

二、实验二:FIR滤波器的设计1. 实验目的:掌握FIR滤波器的设计方法,学会使用MATLAB进行FIR滤波器的设计和实现。

2. 实验步骤:a. 设计一个具有线性相位特性的FIR滤波器,例如汉明窗设计。

b. 使用MATLAB的内置函数进行滤波器的设计,并观察滤波器的频率响应。

c. 对滤波器进行时域和频域分析,评估滤波器的性能。

3. 实验结果:a. 设计了一个具有线性相位特性的低通FIR滤波器,其截止频率为1000Hz。

b. 频率响应显示,该滤波器具有较好的线性相位特性,且在截止频率以下对信号有较好的抑制效果。

实验报告

实验报告

云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:C程序的运行环境和运行C程序的方法实验编号:1 实验日期:2012- 3-21 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的掌握C语言数据类型、运算符和表达式的运算规律二、实验内容例3.1—3.7三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:数据类型、运算符和简单的输入输出实验编号:2 实验日期:2012- 3-28 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:最简单的C程序设计——顺序结构程序设计、数据类型、运算符和表达式选择结构(if语句)程序设计实验实验编号:3 实验日期: 2012-4-11 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:选择结构程序设计实验实验编号:4 实验日期: 2012-4-18 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:循环控制程序设计实验(1)实验编号:5 实验日期: 2012-4-25 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:循环控制程序设计实验(2)实验编号:6 实验日期: 2012-5-2 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:一维数组数组程序设计实验实验编号:8 实验日期: 2012-5-9 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:二维数组、字符数组程序设计实验实验编号:9 实验日期: 2012-5-16 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:函数程序设计实验(1)实验编号:9 实验日期: 2012-5-23 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:函数程序设计实验(2)实验编号:10 实验日期: 2012-5-30 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:函数程序设计实验(3)实验编号:11 实验日期: 2012-6-6 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:指针程序设计实验(1)实验编号:12 实验日期: 2012-6-13 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:用户自己建立数据类型实验实验编号:13 实验日期: 2012-6-20 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:文件操作实验实验编号:14 实验日期:2012-6-27 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结。

云南师范大学通信原理实验-05(脉冲编码调制与调解PCM)

云南师范大学通信原理实验-05(脉冲编码调制与调解PCM)

9
二.实验过程
1、实验现象及结果 ① 按照步骤一的连接好实验实物,如图:
测得 PCM 编码信号(PCMB-OT)的波形如下:
10
与上路帧同步信号对比波形为:
11
两者比较波形如下:
其中上路系带模拟信号(S-IN)与下路 PCM 解调信号(JPCM)波形如下:
12
课后总结及思考: 1、TP3067 PCM 编码器输出的 PCM 码的速率是多少?在本实验中,为什么要给 TP3067 提供 2.048MHz 的时钟? 答:TP3067 PCM 编码器输出的 PCM 码的速率是 64Kb/S,属于国际标准。 由 PCM 帧结构知,l 帧共有 32 路时隙,每路时隙 8bit,每秒有 8000 帧,故 30/32 路 PCM 基群的码率为:8000*32*8=2.048Mb/s,即 TP3067 提供的 PCM 编译码电路的时钟 频率。 2、在脉码调制中,选用折叠二进码为什么比选用自然二进码好? 答:采用折叠二进码可以大为简化编码的过程,而且在传输过程中如果出现误码,对 小信号的影响较小,有利于减小平均量化噪声。 3、脉冲编码调制系统的输出信噪比与哪些因素有关? 答:均匀量化器的输出信号量噪比为 S/Nq=M2。对于 PCM 系统,解码器中具有这个 信号量噪比的信号还要通过低通滤波器。用 N 位二进制码进行编码时,上式可写为 S/Nq=22N。这表明,PCM 系统的输出信号蓐噪比仅和编码位数 N 有关,且随 N 按指数 规律增大。对于一个频带限制在 f 的低通信号,按抽样定理,有 S/Nq=22(B/f) ,即 PCM 系统的输出信号晕噪比随系统的带宽 B 按指数规律增长。
2
低功耗工作电流 30mA,备用状态时只有 100pA 出,与 TTL 电平兼容。 一般商业品工作温度范围为 0-70℃,工业品为-40-+85℃。 实物图如下:

云师大 数字信号处理实验 05 第一篇 实验五 利用DFT分析模拟信号频谱

云师大 数字信号处理实验 05 第一篇 实验五  利用DFT分析模拟信号频谱

本科学生实验报告学号124090380 姓名赵玲学院物电学院专业、班级12电子实验课程名称数字信号分析与处理教师及职称和伟开课学期2014 至2015学年下学期填报时间2015 年 4 月23 日云南师范大学教务处编印实验序号 第一篇 实验五 实验名称 利用DFT 分析模拟信号频谱实验时间2015-4-22实验室同析楼三栋313实验室1.实验目的应用离散傅里叶变换DFT 分析模拟信号()t x 的频谱,深刻理解利用DFT 分析模拟信号频谱的原理、分析工程中出现的现象及解决方法。

2. 实验原理、实验流程或装置示意图连续周期信号相对离散周期信号,连续非周期子信号相对于离散非周期信号,都可以通过时域抽样定理建立相互关系,因此,在离散信号DFT 分析方法的基础上,增加时域抽样的步骤,就可以实现连续信号的DFT 分析。

【例1.5.1】 已知周期信号()()()t t t x ππ18sin 210cos +=,计算其频谱。

[解]信号基频πω20= rad/s ,周期10=Ts ;最高次谐频为πω1890= rad/s ,所以()19192=+⨯≥N 。

T0=1;N=19;T=T0/N;%周期T0=1、FFT 的点数N 、时域抽样间隔Tt=0:T:T0;x=cos(2*pi*5*t)+2*sin(2*pi*9*t);%周期信号 Xm=fft(x,N)/N;%利用FFT 计算频谱 f=(-(N-1)/2:(N-1)/2)/N/T;%若N 为偶数f=1/T/N*(-N/2:(N/2-1)) stem(f,abs(fftshift(Xm)));% 画出幅度谱xlabel('f(Hz)');ylabel('Magnitude');title('幅度谱'); 运行结果如图1.5.1所示-10-8-6-4-2024681000.10.20.30.40.50.60.70.80.91f(Hz)M a g n i t u d e幅度谱图1.5.1 信号的幅度谱一、验设计方案【例1.5.2】 利用DFR 近似分析连续信号()()t u e t x t -=的幅度谱并与理论值比较。

云南大学-软件学院--汇编实验5

云南大学-软件学院--汇编实验5

实验五 80x86分支,循环,子程序,宏程序设计姓名:学号:序号:班级:分数:1.编写设计一个2,10,16进制的码制转换程序,要求:①程序有友好的运行界面;②输入任意类型进制的数据,转换为其余两种进制类型;③要求程序有方便的输入输出功能;④要求程序能够处理基本的错误信息;⑤程序的基本结构采用子程序结构;源程序:.8086.model small.datastr db 0ah,0dh,'please input 1 to 8 to choise the function',0ah,0dhdb '1.btd',0ah,0dhdb '2.bth',0ah,0dhdb '3.dth',0ah,0dhdb '4.dtb',0ah,0dhdb '5.htb',0ah,0dhdb '6.htd',0ah,0dhdb '7.again',0ah,0dhdb '8.end',0ah,0dh,'$'b db 'Please input a Binary number',0ah,0dh,'$'d db 'Please input a decimal number',0ah,0dh,'$'h db 'Please input a Hexadecimal number',0ah,0dh,'$'agai db 'Please input again',0ah,0dh,'$'wr db 'A wrong number!',0ah,0dh,'$'num db 6,?,6 dup (?)num1 db 16,?,16 dup (?).codestart:mov ax,@datamov ds,axchoice:lea dx,strmov ah,9int 21hmov ah,1int 21hjmp C1mov ah,2int 21hmov dl,0dhmov ah,2int 21hjmp choiceMo: mov dx,offset agai mov ah,9int 21hjmp choiceC1: cmp al,'1'jnz C2call btdjmp againC2: cmp al,'2'jnz C3call bthjmp againC3: cmp al,'3'jnz C4call dthjmp againC4: cmp al,'4'jnz C5call dtbjmp againC5: cmp al,'5'jnz C6call htbjmp againC6: cmp al,'6'jnz C7call htdjmp againC7: cmp al,'7'jnz C8jmp Mojnz wrongen: mov ah,4chint 21hwrong:lea dx,wrmov ah,9int 21hjmp Mobtd procmov dx,offset bmov ah,9int 21hmov dx,offset num1mov ah,0ahint 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov di,offset num1mov ch,[di+1]zq2: mov dl,[di+2]cmp dl,39hjg zqsub dl,30hjmp zq1zq: sub dl,37hzq1: mov dh,0or bx,dxcmp ch,1jz zq3rol bx,1zq3: inc didec chjnz zq2jj1: cmp bx,10000 jc jjsub bx,10000inc sijmp jj1jj: mov dx,siand dx,0fhadd dl,30hmov ah,2int 21hxor si,siL1: cmp bx,1000jc L2sub bx,1000inc sijmp L1L2: mov dx,siand dx,0fhadd dl,30hmov ah,2int 21hxor si,siL3: cmp bx,100jc L4sub bx,100inc sijmp L3L4: mov dx,siand dx,0fhadd dl,30hmov ah,2int 21hxor si,siL5: cmp bx,10jc L6sub bx,10inc sijmp L5L6: mov dx,simov ah,2int 21hxor dx,dxmov dx,bxand dx,0fhadd dl,30hmov ah,2int 21hretbtd endpbth procmov dx,offset bmov ah,9int 21hmov dx,offset num1mov ah,0ahint 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov di,offset num1mov ch,[di+1]K1: mov al,[di+2]sub al,30hor bl,alrol bx,1inc didec chjnz K1ror bx,1mov ch,4mov cl,4K4: rol bx,clmov dl,bland dl,0fhadd dl,30hjmp K3K2: add dl,37hK3: mov ah,2int 21hdec chjnz K4retbth endpdth proclea dx,dmov ah,9int 21hmov dx,offset nummov ah,0ahint 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov di,offset nummov cl,[di+1]add di,2mov dl,[di]sub dl,30hmov al,10mul dlmov ch,0dec cxI: inc dimov dl,[di]sub dl,30hmov dh,0add ax,dxcmp cx,1jz I1mov bx,axI1: loop Imov bx,axmov si,offset nummov ch,[si+1]inc chinc chmov cl,4O: rol bx,clmov dl,bland dl,0fhcmp dl,9jg MMadd dl,30hjmp PPMM: add dl,37h PP: mov ah,2int 21hdec chjnz Oretdth endpdtb proclea dx,dmov ah,9int 21hmov dx,offset nummov ah,0ahint 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov di,offset nummov cl,[di+1]add di,2mov al,10mul dlmov ch,0dec cxc: inc dimov dl,[di]sub dl,30hmov dh,0add ax,dxcmp cx,1jz ccmov bx,10mul bxmov bx,axcc: dec cxjnz cmov bx,axmov cx,16x: rol bx,1mov dl,bland dl,01hadd dl,30hmov ah,2int 21hloop xretdtb endphtb procmov dx,offset hmov ah,9int 21hmov dx,offset nummov ah,0ahint 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov ch,[di+1]Z1: mov bl,[di+2]cmp bl,39hjg ZZsub bl,30hjmp ZXZZ: sub bl,37hZX: mov cl,4mov bh,4shl bl,clZ: rol bl,1mov dl,bland dl,01hadd dl,30hY: mov ah,2int 21hdec bhjnz Zinc didec chjnz Z1rethtb endphtd procmov dx,offset hmov ah,9int 21hmov dx,offset nummov ah,0ahint 21hmov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hmov di,offset nummov ch,[di+1]u2: mov dl,[di+2]sub dl,30hjmp u1u: sub dl,37h u1: mov dh,0or bx,dxcmp ch,1jz Rmov cl,4rol bx,cl R: inc didec chjnz u2xor si,sis1: cmp bx,1000jc s2sub bx,1000inc sijmp s1s2: mov dx,siand dx,0fhadd dl,30hmov ah,2int 21hxor si,sis3: cmp bx,100jc s4sub bx,100inc sijmp L3xor si,sis4: cmp bx,10jc s5sub bx,10inc sijmp s3s5: mov dx,siand dx,0fhadd dl,30hmov ah,2int 21hmov dx,bxand dx,0fhadd dl,30hmov ah,2int 21hrethtd endpend start实验结果:。

云南大学软件学院数据结构实验报告五

云南大学软件学院数据结构实验报告五

云南大学软件学院数据结构实验报告(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □学期:2012秋季学期任课教师:实验题目: 树及其应用小组长:联系电话:完成提交时间:2012年12月10日云南大学软件学院2012学年秋季学期《数据结构实验》成绩考核表学号: 20111120 姓名:本人承担角色:小组长综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。

)云南大学软件学院2012学年秋季学期《数据结构实验》成绩考核表学号: 20111120 姓名:人承担角色:组员综合得分:(满分100分)指导教师:年月日(注:此表在难度为C时使用,每个成员一份。

)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)本实验要求设计一个哈夫曼编码译码器,要求通过统计一段电文中的各字符频率编写哈夫曼码并进行翻译。

首先要解决如何进行哈夫曼编码,然后设计对电文进行编码,最后还有有译码过程。

本程序使用二叉树进行哈夫曼编码,使用文本文档保存电文处理。

利用程序设计的相关知识:贯彻设计程序所必需的五大步骤,目标分析->设计算法->程序编写->后期调试->售后服务的流程完成这个项目。

利用算法设计相关知识:该算法具有有穷性、确定性、可行性、有0个或多个输入、有一个或多个输出、正确性、可读性、健壮性的特性。

离散数学相关知识:正确合理使用与或非之间的关系,进行程序分支判断,保证程序正常进行,以及二叉树的使用。

二、【实验设计(Design)】(20%)本次实验使用C进行编写,自定义函数7个:void SortHufmtree(hufmtree *tree){//将哈夫曼树n个叶子结点由大到小排序Codetype* HuffmanCode(hufmtree *tree){//哈弗曼编码的生成hufmtree* BuildHuffmanTree(hufmtree *tree){//构建叶子结点已初始化的哈夫曼树hufmtree* CreateHuffmanTreeFromSourceFile(){//通过解析源文件建立哈夫曼树hufmtree* Encoding(hufmtree *tree){//对源文件进行编码并保存hufmtree* Decoding(hufmtree *tree)//对存有编码的源文件进行译码并保存主函数为功能选择界面三、【实现描述(Implement)】(30%)主函数显示开始界面,选择相应的功能进行哈夫曼编码译码。

数字信号处理实验报告一

数字信号处理实验报告一

实验报告课程名称:数字信号处理实验任课教师:杨鉴实验名称:离散时间信号的时域分析年级、专业:2015级通信工程学号:*********姓名:***日期:2017 年9 月18 日云南大学信息学院一、实验目的1. 复习信号与系统的知识并熟悉MATLAB软件的使用2.了解调幅信号与调频信号的产生,扫频信号的产生二、实验内容1. 调整载波信号xH[n]和调制信号xl[n]的频率和调制指数m以产生调幅信号y[n],观察m,wH和wL的关系2. 编程序来实现调频3. 调整程序实现扫频信号三、主要算法与程序Q1.34% Program P1_6% Generation of amplitude modulated sequenceclf;n = 0:150;m = 0.4;fH = 0.1; fL = 0.01;xH = sin(2*pi*fH*n);xL = sin(2*pi*fL*n);y = (1+m*xL).*xH;stem(n,y);grid;xlabel('Time index n');ylabel('Amplitude');编写程序产生调频信号:% Program P1_6% Generation of amplitude modulated sequenceclf;n = 0:150;k = 1;fH = 0.1; fL = 0.01;xH = sin(2*pi*fH*n);xL = sin(2*pi*fL*n);y = sin(2*pi*fL*n+k*xH);stem(n,xL);grid;xlabel('Time index n');ylabel('Amplitude');stem(n,xH);grid;xlabel('Time index n');ylabel('Amplitude');stem(n,y);grid;xlabel('Time index n');ylabel('Amplitude');Q1.38% Program P1_7% Generation of a swept frequency sinusoidal sequencen = 0:100;a = pi/500;b = 0.2*pi;arg = a*n.*n + b*n;x = cos(arg);clf;stem(n, x);axis([0,100,-1.5,1.5]);title('Swept-Frequency Sinusoidal Signal');xlabel('Time index n');ylabel('Amplitude');grid; axis;算法如下:解法一:f=w/2pi=(2a*n+b)/2pi=[0.1,0.3],当n=0时,b>=0.2pi;当n=100时,2a*200+b<=0.6pi,取b=0.2pi ,得a=pi/500;故取a=pi/500,b=0.2pi 才能产生一个最小频率为01,最大频率为0.3的扫频正弦信号。

(完整word版)数字信号课程设计实验报告-(2)(word文档良心出品)

(完整word版)数字信号课程设计实验报告-(2)(word文档良心出品)

题目一: 采样定理的验证1.课程设计目的及要求:1).掌握利用MATLAB分析系统频率响应的方法, 增加对仿真软件MATLAB的感性认识, 学会该软件的操作和使用方法。

2). 掌握利用MATLAB实现连续信号采用与重构的方法, 加深理解采样与重构的概念。

.).初步掌握线性系统的设计方法, 培养独立工作能力。

2.4).学习MATLAB中信号表示的基本方法及绘图函数的调用, 实现对常用连续时间信号的可视化表示, 加深对各种电信号的理解。

3.5).验证信号与系统的基本概念、基本理论,掌握信号与系统的分析方法。

4.6).加深对采样定理的理解和掌握,以及对信号恢复的必要性;掌握对连续信号在时域的采样与重构的方法。

详细设计过程及调试结果:1).设, 利用filter函数求出的源程序:n=0:49;xn=0.8.^nsubplot(1,2,1);stem(n,xn,'.');axis([0 49 0 1]);title('输入xn图');xlabel('n');ylabel('xn');grid on;B=1;A=[1,-0.8];yn=filter(B,A,xn);n=0:length(yn)-1;subplot(1,2,2);stem(n,yn,'.');axis([0 49 0 2.5]); title('输出yn图');xlabel('n');ylabel('yn');grid on; 本题验结果及分析:2): 模拟信号, 间隔采样得到:a.每一个画出的源程序:t=0:0.01:1;T1=0:0.01:1;T2=0:0.05:1;T3=0:0.1:1;xt=sin(20*pi*t);xn1=sin(20*pi*T1);xn2=sin(20*pi*T2);xn3=sin(20*pi*T3);subplot(4,1,1);plot(t,xt);title('模拟信号xt图');xlabel('t');ylabel('xt');grid on;subplot(4,1,2);stem(T1,xn1,'.');title('0.01s采样图');xlabel('n');ylabel('xn1');grid on;subplot(4,1,3);stem(T2,xn2,'.');axis([0 1 -1 1]);title('0.05s采样图');xlabel('n');ylabel('xn2');grid on;subplot(4,1,4);stem(T3,xn3,'.');axis([0 1 -1 1]);title('0.1s采样图');xlabel('n');ylabel('xn3');grid on;调试结果分析:b.采用内插从样本重建模拟信号的源程序:t=0:0.01:1;T0=0.1;xt=sin(20*pi*t);T1=0.01;n1=0:100;T2=0.05;n2=0:20;T3=0.1;n3=0:10;xt=sin(20*pi*t);subplot(4,1,1);plot(t,xt);title('原信号xt模拟图');xlabel('t');ylabel('xt');grid on; xn1=sin(20*pi*n1*T1);xn2=sin(20*pi*n2*T2);xn3=sin(20*pi*n3*T3);t1=0:T1:1;t2=0:T2:1;t3=0:T3:1;tn1=ones(length(n1),1)*t1-n1'*T1*ones(1,length(t1));tn2=ones(length(n2),1)*t2-n2'*T2*ones(1,length(t2));tn3=ones(length(n3),1)*t3-n3'*T3*ones(1,length(t3));yt1=xn1*sinc(tn1*pi/T1);subplot(4,1,2);plot(t1,yt1);axis([ 0 1 -1 1]); title('sinc内插0.01恢复的xt1图');xlabel('n');ylabel('xt1');grid on; yt2=xn2*sinc(tn2*pi/T2);subplot(4,1,3);plot(t2,yt2);axis([ 0 1 -1 1]); title('sinc内插0.05恢复的xt2图');xlabel('n');ylabel('xt2');grid on; yt3=xn3*sinc(tn3*pi/T3);subplot(4,1,4);plot(t3,yt3);axis([ 0 1 -1 1]); title('sinc内插0.1恢复的xt3图');xlabel('n');ylabel('xt3');grid on; 调试结果分析:c.采用三次样条内插从样本重建模拟信号源程序: t=0:0.01:1;xt=sin(20*pi*t);T1=0.01;n1=0:100;T2=0.05;n2=0:20;T3=0.1;n3=0:10;T1=0:T1:1;T2=0:T2:1;T3=0:T3:1;xt=sin(20*pi*t);xn1=sin(20*pi*T1);xn2=sin(20*pi*T2);xn3=sin(20*pi*T3);yt1=spline(T1,xn1,t);yt2=spline(T2,xn2,t);yt3=spline(T3,xn3,t);subplot(4,1,1);plot(t,xt);title('原信号xt模拟图');xlabel('t');ylabel('xt');grid on;subplot(4,1,2);plot(t,yt1);axis([ 0 1 -1 1]);title('三次样条0.01恢复的xt1图');xlabel('n');ylabel('xt1');grid on; subplot(4,1,3);plot(t,yt2);axis([ 0 1 -1 1]);title('三次样条0.05恢复的xt2图');xlabel('n');ylabel('xt2');grid on; subplot(4,1,4);plot(t,yt3);axis([ 0 1 -1 1]);title('三次样条0.1恢复的xt3图');xlabel('n');ylabel('xt3');grid on; 调试结果分析:总结体会:连续信号是指自变量的取值范围是连续的, 且对于一切自变量的取值, 除了有若干个不连续点以外, 信号都有确定的值与之对应。

DSP实验报告一

DSP实验报告一
phase = 0;
A = 1.5;
arg = 2*pi*f*n - phase;
x = A*cos(arg);
clf; % Clear old graph
stem(n,x); % Plot the generated sequence
axis([0 40 -2 2]);
grid;
title('Sinusoidal Sequence');
subplot(2,1,1);
plot(m,d','r-',m,s,'g--',m,x,'b-.');
xlabel('Time index n');ylabel('Amplitude');
legend('d[n] ','s[n] ','x[n] ');
x1 = [0 0 x];x2 = [0 x 0];x3 = [x 0 0];
1.3修改程序P1.1,以产生带有延时11个样本的延迟单位样本序列ud[n]。运行修改的程序并显示产生的序列。
1.6运行程序P1.2,以产生复数值得指数序列。
1.7哪个参数控制该序列的增长或衰减率?哪个参数控制该序列的振幅?
1.17运行程序P1.4,以产生正弦序列并显示它。
1.18该序列的频率是多少?怎样可以改变它?哪个参数控制该序列的相位?哪个参数控制该序列的振幅?该序列的周期是多少?
title('Real part');
subplot(2,1,2);
stem(n,imag(x));
xlabel('Time index n');ylabel('Amplitude');

数字信号实验

数字信号实验

数字信号实验报告实验三 离散傅立叶变换及其应用一、 实验目的:1.进一步加深DFT 算法的原理和基本性质的理解;2.学习用FFT 对信号进行谱分析的方法,并分析其误差及其原因;3.学习利用DFT 计算程序计算IDFT 的方法。

二、实验原理:1.N 点序列的DFT 和IDFT 变换定义式如下:kmNN kW k x m X ∑-==1][][, km N N mW m X Nk x --=∑=1][1][ 利用旋转因子kmN W 具有周期性,可以得到快速算法(FFT )。

在MATLAB 中,可以用函数X=fft(x) %计算N 点的DFT ,N 为序列x[k]的长度,即N=length (x ); X=fft (x ,N )%计算序列x[k]的N 点DFT ;x=ifft (X ) %计算N 点的IDFT ,N 为序列x[m]的长度; x=ifft (X ,N )%计算序列x[m]的N 点IDFT ;2. impz 函数是求解离散系统单位脉冲响应,并绘制其时域波形,其调用格式为: impz(b,a)例如:某离散LTI 系统的差分方程为:)()2(8.0)1()(k x k y k y k y =-+--,则对应的向量为a=[1,-1,0.8],b=[1],则该系统的单位脉冲响应)(k h 的波形,MATLAB 的程序如下:a=[1,-1,0.8]; b=[1]; impz(b,a); 其运行结果为:01020304050607080-0.8-0.6-0.4-0.200.20.40.60.81n (samples)A m p l i t u d eImpulse Response3.MATLAB 计算循环卷积函数的调用格式:y=circonv(x,h)4.求有限长序列的DTFT ,并画出它的幅度谱,相位谱,实部和虚部。

clear all x=[1,2,3,4,5]; k=-1:3;w=linspace(0,2*pi,512); H=x*exp(-j*k'*w);subplot(2,2,1);plot(w,abs(H));ylabel('幅度'); %画幅度特征曲线 subplot(2,2,2);plot(w,angle(H));ylabel('相角'); %画相位特征曲线 subplot(2,2,3);plot(w,real(H));ylabel('实部'); %画幅度实部特征曲线 subplot(2,2,4);plot(w,imag(H));ylabel('虚部'); %画幅度虚部特征曲线 其程序运行结果如下:2468051015幅度02468-4-2024相角2468-5051015实部02468-10-50510虚部三、实验内容:1.假设现含有3种频率成分,Hz f 201=,Hz f 5.202=,Hz f 403=,)2sin()2sin()2sin()(321t f t f t f t x πππ++=,取采样频率Hz f s 100=对)(t x 进行等间隔采样得)(k x ,对)(k x 加长度为128的矩形窗进行截断得有限长序列)(1k x ,对)(1k x 做128点的DFT ,画出原信号此时的频谱图,然后对)(1k x 做512的DFT ,画出原信号此时的频谱图,分析两副图的特点,总结实验中的主要结论。

云南师范大学-DSP(数字信号处理)实验报告3

云南师范大学-DSP(数字信号处理)实验报告3

2
%Hamming…… clc,clear,close all N = 51; w = hamming(N); W = fft(w,256); subplot(2,1,1); stem([0:N-1],w); subplot(2,1,2); plot([-128:127],abs(fftshift(W)))
本科学生实验报告
学号 学院
114090395 物电学院
姓名
李华福
专业、班级 11 电子
实验课程名称 教师及职称
数字信号处理(实验) 李宏宁 下 学期 26 日
开课学期 第三 至 第四 学年 填报时间 2014 年 3 月
云南师范大学教务处编印
实验序号 实验时间
03
实验名称 实验室
窗函数的特性分析 云南师范大学同析 3 栋数字信号处理实 验室
11 9 k )+cos( k ),使用 fft 函数分析其频谱。 20 20
clc,clear,close all N=20; k=0:N-1; x=0.5*cos(11*pi*k/20)+cos(9*pi*k/20); w=ones(1,N); y=x.*w; Y=fft(y,512); subplot(3,2,1); stem([0:N-1],y); title('抽样信号'); xlabel('F'); ylabel('H'); subplot(3,2,2); Y0=abs(fftshift(Y)); plot([-256:255], Y0);
4
clc,clear,close all N = 51; w = Kaiser(N); W = fft(w,256); subplot(2,1,1); stem([0:N-1],w); subplot(2,1,2); plot([-128:127],abs(fftshift(W)))

云南大学计算机网络工程实验

云南大学计算机网络工程实验

云南大学计算机网络工程实验引言计算机网络工程实验是云南大学计算机网络工程专业的重要实践环节,旨在帮助学生通过实际操作掌握计算机网络相关的实验技能和知识。

本文档将介绍云南大学计算机网络工程实验的基本内容和实施步骤。

实验目的计算机网络工程实验的主要目的是培养学生的实验能力和动手能力,加深对计算机网络概念的理解,提升对计算机网络原理的应用能力。

通过实验,学生将能够掌握计算机网络的基本概念、网络协议的原理和应用,以及网络设备的配置和管理等技能。

实验内容云南大学计算机网络工程实验内容包括以下几个方面:1. 网络配置实验该实验主要包括网络连接配置、IP地址配置、子网划分和路由器配置等内容。

学生将学习如何配置网络设备,正确连接计算机网络,配置IP地址和子网掩码,实现网络间的通信。

2. 网络安全实验网络安全实验主要涉及网络攻击与防御的知识和技能。

学生将学习如何识别和应对常见的网络攻击方式,如DDoS攻击、SQL注入攻击等,并学习安全策略的制定和实施。

3. 网络性能实验网络性能实验主要针对网络带宽、延迟、丢包率等性能指标的测试与优化。

学生将学习使用网络性能测试工具,分析网络性能数据,并提出优化方案,改善网络的性能。

4. 网络应用实验在网络应用实验中,学生将学习如何配置和管理网络应用服务,如Web服务器、邮件服务器和文件传输服务器等。

通过实际操作,学生将了解如何搭建和管理各种网络应用服务。

实施步骤云南大学计算机网络工程实验的具体步骤如下:1.实验准备:根据实验要求,准备所需的实验设备和软件工具。

确保实验环境的正常运行。

2.实验设置:按照实验要求,配置实验环境。

包括网络设备的连接和配置,计算机的IP地址和子网掩码的配置等。

3.实验操作:根据实验指导书的要求,进行实验操作。

实验过程中需按照实验要求记录实验数据和结果。

4.实验分析:根据实验数据和结果,进行实验分析。

通过分析,找出问题所在,提出解决方案。

5.实验总结:总结实验过程中的经验和教训,归纳实验中的关键点和要点。

数字信号处理实验 (云南大学)实验报告一

数字信号处理实验 (云南大学)实验报告一

《数字信号处理》·实验一实验题目:离散时间信号的时域分析教师:杨鉴专业:电子信息科学与技术学号:姓名:Q1.29 运行程序P 1.5,以产生所有相关的信号MATLAB 程序代码如下:%程序 p1.5 通过平均的信号平滑 clf; R=51;d=0.8*(rand(R,1)-0.5); m=0:R-1;s=2*m.*(0.9.^m); x=s+d';subplot(2,1,1);plot(m,d','r-',m,s,'g--',m,x,'b-.'); xlabel('时间序号n'); ylabel('振幅'); legend('d[n]','s[n]','x[n]');x1=[0 0 x]; x2=[0 x 0]; x3=[x 0 0]; y=(x1+x2+x3)/3; subplot(2,1,2);plot(m,y(2:R+1),'r-',m,s,'g--'); legend('y[n]','s[n]');xlabel('时间序号n'); ylabel('振幅');5101520253035404550-50510时间序号n振幅d[n]s[n]x[n]051015202530354045502468时间序号n振幅y[n]s[n]Q 1.30 未污染的信号s[n]是什么样的形式?加性噪声d[n] 是什么样的形式? 信号s[n] 的MATLAB 程序代码如下:clf; R=51; m=0:R-1;s=2*m.*(0.9.^m); plot(m,s,'b-.'); xlabel('时间序号n'); ylabel('振幅');legend('未污染信号s[n]');510152025303540455001234567时间序号n振幅未污染信号s[n]信号d[n]的MATLAB 程序代码如下: clf; R=51;d=0.8*(rand(R,1)-0.5); m=0:R-1;plot(m,d','r-'); xlabel('时间序号n'); ylabel('振幅');legend('加性噪声d[n]');05101520253035404550-0.4-0.3-0.2-0.100.10.20.30.4时间序号n振幅加性噪声d[n]Q 1.31使用语句x=s+d 能产生被噪声污染的信号吗?若不能,为什么?答:不能,因为s 和d 均是 矩阵,d 与s 要想相加必须匹配,而矩阵d 本身与矩阵s 不匹配,必须把d 转置变为d'才能与s 进行相加。

云南大学 软件学院 计网实验5

云南大学 软件学院 计网实验5

云南大学软件学院实验报告课程:计算机网络原理实验任课教师:姓名:学号:专业:成绩:实验五、传输层可靠传输协议GBN编程实验报告一、实验目的:1、编程实现简单可靠的数据传输GBN协议,模拟可靠数据传输2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。

二、实验指导:参考教材。

三、实验要求:编程实现一个GBN传输协议,采用编程语言不限,要求能将发送――接收流程以及处理方法表现出来.附源代码及注释并附上实验结果截图。

#include <stdio.h>/* ******************************************************************ALTERNATING BIT AND GO-BACK-N NETWORK EMULATOR: VERSION 1.1 J.F.KuroseThis code should be used for PA2, unidirectional or bidirectionaldata transfer protocols (from A to B. Bidirectional transfer of datais for extra credit and is not required). Network properties:- one way network delay averages five time units (longer if thereare other messages in the channel for GBN), but can be larger- packets can be corrupted (either the header or the data portion)or lost, according to user-defined probabilities- packets will be delivered in the order in which they were sent(although some can be lost).**********************************************************************/#define BIDIRECTIONAL 0 /* change to 1 if you're doing extra credit *//* and write a routine called B_output *//* a "msg" is the data unit passed from layer 5 (teachers code) to layer */ /* 4 (students' code). It contains the data (characters) to be delivered */ /* to layer 5 via the students transport level protocol entities. */ struct msg {char data[20];};/* a packet is the data unit passed from layer 4 (students code) to layer */ /* 3 (teachers code). Note the pre-defined packet structure, which all */ /* students must follow. */struct pkt {int seqnum;int acknum;int checksum;char payload[20];};/********* STUDENTS WRITE THE NEXT SEVEN ROUTINES *********/#define WINDOWSIZE 8#define MAXBUFSIZE 50#define NOTUSED 0#define NACK -1#define TRUE 1#define FALSE 0#define A 0#define B 1int expectedseqnum; /* expected sequence number at receiver side */ int nextseqnum; /* next sequence number to use in sender side */ int base; /* the head of sender window */struct pkt winbuf[WINDOWSIZE]; /* window packets buffer */int winfront,winrear; /* front and rear points of window buffer */ int pktnum; /* packet number of window buffer */struct msg buffer[MAXBUFSIZE]; /* sender message buffer */int buffront,bufrear; /* front and rear pointers of buffer */int msgnum; /* message number of buffer */int packet_lost =0;int packet_corrupt=0;int packet_sent =0;int packet_correct=0;int packet_resent =0;int packet_timeout=0;void ComputeChecksum(packet){ int checksum; int i; checksum = checksum + packet->acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet->payload[i]); checksum = 0-checksum;packet->checksum = checksum;}struct pkt packet;{int checksum;int i;checksum = packet.seqnum;checksum = checksum + packet.acknum;for ( i=0; i<20; i++ )checksum = checksum + (int)(packet.payload[i]);if ( (packet.checksum+checksum) == 0 )return (FALSE);elsereturn (TRUE);}/* called from layer 5, passed the data to be sent to other side */A_output(message){ int i;struct pkt sendpkt;/* if window is not full */if ( nextseqnum < base+WINDOWSIZE ) {printf("----A: New message arrives, send window is not full, send new messge to layer3!\n");/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = message.data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;pktnum ++;winbuf[winrear] = sendpkt;for (i=0; i<20; i++)winbuf[winrear].payload[i]= sendpkt.payload[i];/* if it is the first packet in window, start timeout */if ( base == nextseqnum ) {starttimer(A,RTT);printf("----A: start a new timer!\n");}/* update state variables */nextseqnum = nextseqnum+1;}/* if window is full */else {printf("----A: New message arrives, send window is full,");/* if buffer full, give up and exit*/if ( msgnum == MAXBUFSIZE) {printf (" Error: Sender buffer is full! \n");exit (1);}/* otherwise, buffer the message */else {printf("buffer new message!\n");bufrear = (bufrear+1) % MAXBUFSIZE;for (i=0; i<20; i++)buffer[bufrear].data[i] = message.data[i];msgnum ++;}} }B_output(message) /* need be completed only for extra credit */struct msg message;{}/* called from layer 3, when a packet arrives for layer 4 */A_input(packet){ int i;/* if received packet is not corrupted and ACK is received */if ( (CheckCorrupted(packet) == FALSE) && (packet.acknum != NACK) ) { printf("----A: ACK %d is correctly received,",packet.acknum);packet_correct++;/* delete the acked packets from window buffer */winfront = (winfront+(packet.acknum+1-base)) % WINDOWSIZE;pktnum = pktnum - (packet.acknum+1-base);/* move window base */base = packet.acknum+1;stoptimer(A);if ( base < nextseqnum) {starttimer(A,RTT);printf ("send new packets!\n");}/* if buffer is not empty, send new packets */while ( (msgnum!=0) && (nextseqnum<base+WINDOWSIZE) ) {/* create packet */sendpkt.seqnum = nextseqnum;sendpkt.acknum = NOTUSED;buffront = (buffront+1) % MAXBUFSIZE;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = buffer[buffront].data[i];/* computer checksum */ComputeChecksum (&sendpkt);/* if it is the first packet in window, start timeout */ if ( base == nextseqnum ){starttimer(A,RTT);printf ("send new packets!\n");}/* send out packet */tolayer3 (A, sendpkt);/* copy the packet to window packet buffer */winrear = (winrear+1)%WINDOWSIZE;winbuf[winrear] = sendpkt;pktnum ++;/* update state variables */nextseqnum = nextseqnum+1;/* delete message from buffer */msgnum --;}}elseprintf ("----A: NACK is received, do nothing!\n");}/* called when A's timer goes off */{int i;printf("----A: time out,resend packets!\n");/* start timer */starttimer(A,RTT);/* resend all packets not acked */for ( i=1; i<=pktnum; i++ ) {packet_resent++;tolayer3(A,winbuf[(winfront+i)%WINDOWSIZE]);}}/* the following routine will be called once (only) before any other */ /* entity A routines are called. You can use it to do any initialization */ A_init(){buffront = 0;bufrear = 0;msgnum = 0;winfront = 0;winrear = 0;pktnum = 0;}/* Note that with simplex transfer from a-to-B, there is no B_output() *//* called from layer 3, when a packet arrives for layer 4 at B*/B_input(packet){ int i;/* if not corrupted and received packet is in order */if ( (CheckCorrupted(packet) == FALSE) && (packet.seqnum == expectedseqnum)){ printf("----B: packet %d is correctly received, send ACK!\n",packet.seqnum);/* send an ACK for the received packet *//* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = expectedseqnum;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (B, sendpkt);/* update state variables */expectedseqnum = expectedseqnum+1;/* deliver received packet to layer 5 */tolayer5(B,packet.payload);}/* otherwise, discard the packet and send a NACK */else {printf("----B: packet %d is corrupted or not I expects, send NACK!\n",packet.seqnum);/* create packet */sendpkt.seqnum = NOTUSED;sendpkt.acknum = NACK;for ( i=0; i<20 ; i++ )sendpkt.payload[i] = '0';/* computer checksum */ComputeChecksum (&sendpkt);/* send out packet */tolayer3 (B, sendpkt);}}/* called when B's timer goes off */{}{expectedseqnum = 0;}/********************************************************************************** NETWORK EMULATION CODE STARTS BELOW ***********The code below emulates the layer 3 and below network environment:- emulates the tranmission and delivery (possibly with bit-level corruption and packet loss) of packets across the layer 3/4 interface- handles the starting/stopping of a timer, and generates timerinterrupts (resulting in calling students timer handler).- generates message to be sent (passed from later 5 to 4)THERE IS NOT REASON THAT ANY STUDENT SHOULD HAVE TO READ OR UNDERSTANDTHE CODE BELOW. YOU SHOLD NOT TOUCH, OR REFERENCE (in your code) ANYOF THE DATA STRUCTURES BELOW. If you're interested in how I designedthe emulator, you're welcome to look at the code - but again, you should have to, and you defeinitely should not have to modifyint eventity; /* entity where event occurs */struct pkt *pktptr; /* ptr to packet (if any) assoc w/ this event */ struct event *prev;struct event *next;};struct event *evlist = NULL; /* the event list *//* possible events: */#define TIMER_INTERRUPT 0#define FROM_LAYER5 1#define FROM_LAYER3 2#define OFF 0#define ON 1#define A 0#define B 1int TRACE = 1; /* for my debugging */int nsim = 0; /* number of messages from 5 to 4 so far */ int nsimmax = 0; /* number of msgs to generate, then stop */ float time = 0.000;float lossprob; /* probability that a packet is dropped */float corruptprob; /* probability that one bit is packet is flipped */ float lambda; /* arrival rate of messages from layer 5 */ int ntolayer3; /* number sent into layer 3 */int nlost; /* number lost in media */int ncorrupt; /* number corrupted by media*/main(){char c;init();A_init();B_init();while (1){eventptr = evlist; /* get next event to simulate */if (eventptr==NULL)goto terminate;evlist = evlist->next; /* remove this event from event list */ if (evlist!=NULL)evlist->prev=NULL;if (TRACE>=2){printf("\nEVENT time: %f,",eventptr->evtime);printf(" type: %d",eventptr->evtype);if (eventptr->evtype==0)printf(", timerinterrupt ");else if (eventptr->evtype==1)printf(", fromlayer5 ");elseprintf(", fromlayer3 ");printf(" entity: %d\n",eventptr->eventity);}time = eventptr->evtime; /* update time to next event time */ if (nsim==nsimmax)break; /* all done with simulation */ if (eventptr->evtype == FROM_LAYER5 ){generate_next_arrival(); /* set up future arrival *//* fill in msg to give with string of same letter */j = nsim % 26;for (i=0; i<20; i++)msg2give.data[i] = 97 + j;if (TRACE>2) {printf(" MAINLOOP: data given to student: ");for (i=0; i<20; i++)printf("%c", msg2give.data[i]);printf("\n");}nsim++;if (eventptr->eventity == A)A_output(msg2give);elseB_output(msg2give);}else if (eventptr->evtype == FROM_LAYER3){pkt2give.seqnum = eventptr->pktptr->seqnum;pkt2give.acknum = eventptr->pktptr->acknum;pkt2give.checksum = eventptr->pktptr->checksum;for (i=0; i<20; i++)pkt2give.payload[i] = eventptr->pktptr->payload[i];if (eventptr->eventity ==A) /* deliver packet by calling */A_input(pkt2give); /* appropriate entity */elseB_input(pkt2give);free(eventptr->pktptr); /* free the memory for packet */ }else if (eventptr->evtype == TIMER_INTERRUPT){if (eventptr->eventity == A)A_timerinterrupt();elseB_timerinterrupt();}else{printf("INTERNAL PANIC: unknown event type \n");}free(eventptr);}terminate:printf(" Simulator terminated at time %f\n after sending %d msgs from layer5\n",time,nsim);printf(" correctly sent pkts: %d \n", packet_correct);printf(" resent pkts: %d \n", packet_resent);}init() /* initialize the simulator */{int i;float sum, avg;float jimsrand();FILE *fp;fp = fopen ("parameter.txt","r");printf("----- Stop and Wait Network Simulator Version 1.1 -------- \n\n"); printf("Enter the number of messages to simulate: ");fscanf(fp,"%d",&nsimmax);scanf("%d",&nsimmax);printf("Enter packet loss probability [enter 0.0 for no loss]:");fscanf(fp, "%f",&lossprob);scanf("%f",&lossprob);printf("Enter packet corruption probability [0.0 for no corruption]:");fscanf(fp,"%f",&corruptprob);scanf("%f",&corruptprob);printf("Enter average time between messages from sender's layer5 [ > 0.0]:"); fscanf(fp,"%f",&lambda);scanf("%f",&lambda);printf("Enter TRACE:");fscanf(fp,"%d",&TRACE);scanf("%d",&TRACE);srand(9999); /* init random number generator */sum = 0.0; /* test random number generator for students */for (i=0; i<1000; i++)sum=sum+jimsrand(); /* jimsrand() should be uniform in [0,1] */avg = sum/1000.0;if (avg < 0.25 || avg > 0.75) {printf("It is likely that random number generation on your machine\n" ); printf("is different from what this emulator expects. Please take\n");printf("a look at the routine jimsrand() in the emulator code. Sorry. \n"); exit(1);}ntolayer3 = 0;nlost = 0;ncorrupt = 0;time=0.0; /* initialize time to 0.0 */generate_next_arrival(); /* initialize event list */}/****************************************************************************//* jimsrand(): return a float in range [0,1]. The routine below is used to *//* isolate all random number generation in one location. We assume that the*//* system-supplied rand() function return an int in therange [0,mmm] *//****************************************************************************/ float jimsrand(){double mmm = 65535; /* largest int 2147483647 65535 - MACHINE DEPENDENT!!!!!!!! */float x; /* individual students may need to change mmm */x = rand()/mmm; /* x should be uniform in [0,1] */return(x);}/********************* EVENT HANDLINE ROUTINES ****2147483647***//* The next set of routines handle the event list *//*****************************************************/generate_next_arrival(){double x,log(),ceil();struct event *evptr;char *malloc();float ttime;int tempint;if (TRACE>2)printf(" GENERATE NEXT ARRIVAL: creating new arrival\n");x = lambda*jimsrand()*2; /* x is uniform on [0,2*lambda] *//* having mean of lambda */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + x;evptr->evtype = FROM_LAYER5;if (BIDIRECTIONAL && (jimsrand()>0.5) )evptr->eventity = B;elseevptr->eventity = A;insertevent(evptr);}struct event *p;{struct event *q,*qold;if (TRACE>2){printf(" INSERTEVENT: time is %lf\n",time);printf(" INSERTEVENT: future time will be %lf\n",p->evtime);}q = evlist; /* q points to front of list in which p struct inserted */ if (q==NULL){ /* list is empty */evlist=p;p->next=NULL;p->prev=NULL;}else{for (qold = q; q !=NULL && p->evtime > q->evtime; q=q->next)qold=q;if (q==NULL){ /* end of list */qold->next = p;p->prev = qold;p->next = NULL;}else if (q==evlist){ /* front of list */p->next=evlist;p->prev=NULL;p->next->prev=p;evlist = p;}else{ /* middle of list */p->next=q;p->prev=q->prev;q->prev->next=p;q->prev=p;}}}{struct event *q;int i;printf("--------------\nEvent List Follows:\n");for(q = evlist; q!=NULL; q=q->next) {printf("Event time: %f, type: %d entity: %d\n",q->evtime,q->evtype,q->eventity);}printf("--------------\n");}int AorB; /* A or B is trying to stop timer */{struct event *q,*qold;if (TRACE>2)printf(" STOP TIMER: stopping timer at %f\n",time);/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) ) {/* remove this event */if (q->next==NULL && q->prev==NULL)evlist=NULL; /* remove first and only event on list */else if (q->next==NULL) /* end of list - there is one in front */q->prev->next = NULL;else if (q==evlist) { /* front of list - there must be event after */ q->next->prev=NULL;evlist = q->next;}else { /* middle of list */q->next->prev = q->prev;q->prev->next = q->next;}free(q);return;}printf("Warning: unable to cancel your timer. It wasn't running.\n");starttimer(AorB,increment)int AorB; /* A or B is trying to stop timer */float increment;{struct event *q;struct event *evptr;char *malloc();if (TRACE>2)printf(" START TIMER: starting timer at %f\n",time);/* be nice: check to see if timer is already started, if so, then warn */ /* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==TIMER_INTERRUPT && q->eventity==AorB) ) {printf("Warning: attempt to start a timer that is already started\n"); return;}/* create future event for when timer goes off */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtime = time + increment;evptr->evtype = TIMER_INTERRUPT;evptr->eventity = AorB;insertevent(evptr);}tolayer3(AorB,packet)int AorB; /* A or B is trying to stop timer */struct pkt packet;{struct pkt *mypktptr;struct event *evptr,*q;char *malloc();float lastime, x, jimsrand();int i;ntolayer3++;/* simulate losses: */if (jimsrand() < lossprob){nlost++;if (TRACE>0)printf(" TOLAYER3: packet being lost\n");return;}/* make a copy of the packet student just gave me since he/she may decide */ /* to do something with the packet after we return back to him/her */ mypktptr = (struct pkt *)malloc(sizeof(struct pkt));mypktptr->seqnum = packet.seqnum;mypktptr->acknum = packet.acknum;mypktptr->checksum = packet.checksum;for (i=0; i<20; i++)mypktptr->payload[i] = packet.payload[i];if (TRACE>2){printf(" TOLAYER3: seq: %d, ack %d, check: %d ", mypktptr->seqnum, mypktptr->acknum, mypktptr->checksum);for (i=0; i<20; i++)printf("%c",mypktptr->payload[i]);printf("\n");}/* create future event for arrival of packet at the other side */evptr = (struct event *)malloc(sizeof(struct event));evptr->evtype = FROM_LAYER3; /* packet will pop out from layer3 */evptr->eventity = (AorB+1) % 2; /* event occurs at other entity */evptr->pktptr = mypktptr; /* save ptr to my copy of packet *//* finally, compute the arrival time of packet at the other end.medium can not reorder, so make sure packet arrives between 1 and 10time units after the latest arrival time of packetscurrently in the medium on their way to the destination */lastime = time;/* for (q=evlist; q!=NULL && q->next!=NULL; q = q->next) */for (q=evlist; q!=NULL ; q = q->next)if ( (q->evtype==FROM_LAYER3 && q->eventity==evptr->eventity) ) lastime = q->evtime;evptr->evtime = lastime + 1 + 9*jimsrand();/* simulate corruption: */if (jimsrand() < corruptprob){ncorrupt++;if ( (x = jimsrand()) < .75)mypktptr->payload[0]='Z'; /* corrupt payload */else if (x < .875)mypktptr->seqnum = 999999;elsemypktptr->acknum = 999999;if (TRACE>0)printf(" TOLAYER3: packet being corrupted\n");}if (TRACE>2)printf(" TOLAYER3: scheduling arrival on other side\n");insertevent(evptr);}int AorB;char datasent[20];{int i;if (TRACE>2) {printf(" TOLAYER5: data received: ");for (i=0; i<20; i++)printf("%c",datasent[i]);printf("\n");}}函数结构解释:函数其他部分定义在每个函数后面一坐定义,此处只给出main函数部分的函数结构。

数字信号的实验报告总结

数字信号的实验报告总结

一、实验背景数字信号处理是现代通信、电子技术、计算机科学等领域的重要基础。

随着科技的不断发展,数字信号处理技术已经广泛应用于各个领域。

为了更好地理解和掌握数字信号处理技术,我们进行了数字信号实验,通过实验加深对数字信号处理理论知识的理解和实际应用。

二、实验目的1. 理解数字信号与模拟信号的区别,掌握数字信号的基本特性。

2. 掌握数字信号的采样、量化、编码等基本过程。

3. 熟悉数字信号处理的基本方法,如滤波、变换等。

4. 提高动手实践能力,培养创新意识。

三、实验内容1. 数字信号的产生与观察首先,我们通过实验软件生成了一些基本的数字信号,如正弦波、方波、三角波等。

然后,观察这些信号在时域和频域上的特性,并与模拟信号进行对比。

2. 数字信号的采样与量化根据奈奎斯特采样定理,我们选取合适的采样频率对模拟信号进行采样。

在实验中,我们设置了不同的采样频率,观察信号在时域和频域上的变化,验证采样定理的正确性。

同时,我们还对采样信号进行了量化,观察量化误差对信号的影响。

3. 数字信号的编码与解码为了便于信号的传输和存储,我们对数字信号进行了编码。

在实验中,我们采用了两种编码方式:脉冲编码调制(PCM)和非归一化脉冲编码调制(A律PCM)。

然后,我们对编码后的信号进行解码,观察解码后的信号是否与原始信号一致。

4. 数字信号的滤波与变换数字滤波是数字信号处理中的重要环节。

在实验中,我们分别实现了低通滤波、高通滤波、带通滤波和带阻滤波。

通过对滤波前后信号的观察,我们了解了滤波器的作用和性能。

此外,我们还进行了离散傅里叶变换(DFT)和快速傅里叶变换(FFT)实验,掌握了信号在频域上的特性。

5. 实际应用案例分析为了更好地理解数字信号处理在实际中的应用,我们选取了两个实际案例进行分析。

第一个案例是数字音频处理,通过实验软件对音频信号进行滤波、压缩等处理。

第二个案例是数字图像处理,通过实验软件对图像进行边缘检测、图像增强等处理。

云南大学数字信号处理作业实验一

云南大学数字信号处理作业实验一

Name:Section:Laboratory Exercise 1DISCRETE-TIME SIGNALS: TIME-DOMAIN REPRESENTATION 1.1 GENERATION OF SEQUENCESProject 1.1 Unit sample and unit step sequencesA copy of Programis given below.clf;n=-10:20;u=[zeros(1,10) 1 zeros(1,20)];stem(n,u);xlabel('时间序列n');ylabel('振幅');title('单位样本序列');axis([-10 20 0 1.2]);Answers:Q1.1The unit sample sequence u[n] generated by running Program P1_1 is shown below:Q1.2The purpose of clf command is-The purpose of axis command is -The purpose of title command is -The purpose of xlabel command is -The purpose of ylabel command is -Q1.3The modified Program P1_1 to generate a delayed unit sample sequence ud[n]with a delay of 11 samples is given below along with the sequence generated by running this program.clf;n=-10:20;u=[zeros(1,10) 1 zeros(1,20)];m=n+11;stem(m,u);xlabel('n');ylabel('时间序号');title('单位样本序号');axis([-2 32 0 1.2]);Q1.4The modified Program P1_1 to generate a unit step sequence s[n]is given below along with the sequence generated by running this program.< Insert program code here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >Q1.5The modified Program P1_1 to generate a unit step sequence sd[n] with an advance of 7 samples is given below along with the sequence generated by running this program.< Insert program code here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. > Project 1.2 Exponential signalsA copy of Programs P1_2 and P1_3 are given below.clf;c=-(1/12)+(pi/6)*i;k=2;n=0:40;x=k*exp(c*n);subplot(2,1,1);stem(n,real(x));xlabel('时间序号n');ylabel('振幅');title('实部');subplot(2,1,2);stem(n,imag(x));xlabel('时间序列n');ylabel('振幅');title('虚部');Answers:Q1.6The complex-valued exponential sequence generated by running Program P1_2 is shown below:Q1.7The parameter controlling the rate of growth or decay of this sequence is -The parameter controlling the amplitude of this sequence is -Q1.8The result of changing the parameter c to(1/12)+(pi/6)*i is -Q1.9The purpose of the operator real is -The purpose of the operator imag is -Q1.10The purpose of the command subplot is -Q1.11The real-valued exponential sequence generated by running Program P1_3 is shown below:< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >Q1.12The parameter controlling the rate of growth or decay of this sequence is -The parameter controlling the amplitude of this sequence is -Q1.13The difference between the arithmetic operators^and.^is -Q1.14The sequence generated by running Program P1_3 with the parameter a changed to 0.9 and the parameter K changed to 20 is shown below:< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >Q1.15The length of this sequence is -It is controlled by the following MATLAB command line:It can be changed to generate sequences with different lengths as follows (give an examplecommand line and the corresponding length):Q1.16The energies of the real-valued exponential sequences x[n]generated in Q1.11 and Q1.14 and computed using the command sum are-Project 1.3Sinusoidal sequencesA copy of Program P1_4 is given below.n=0:40;f=0.1;phase=0;A=1.5;arg=2*pi*f*n-phase;x=A*cos(arg);clf;stem(n,x);axis([0 40 -2 2]);grid;title('正弦序列');xlabel('时间序列');ylabel('振幅');Answers:Q1.17 The sinusoidal sequence generated by running Program P1_4 is displayed below.Q1.18The frequency of this sequence is– 0.1It is controlled by the following MATLAB command line:fA sequence with new frequency __phase___ can be generated by the following command line:The parameter controlling the phase of this sequence is-The parameter controlling the amplitude of this sequence is-AThe period of this sequence is - 10Q1.19 The length of this sequence is -It is controlled by the following MATLAB command line:A sequence with new length _____ can be generated by the following command line:Q1.20 The average power of the generated sinusoidal sequence is-Q1.21 The purpose of axis command is -The purpose of grid command is -Q1.22 The modified Program P1_4 to generate a sinusoidal sequence of frequency 0.9 is given below along with the sequence generated by running it.< Insert program code here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >A comparison of this new sequence with the one generated in Question Q1.17 shows -A sinusoidal sequence of frequency 1.1 generated by modifying Program P1_4 is shown below.< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >A comparison of this new sequence with the one generated in Question Q1.17 shows -Q1.23 The sinusoidal sequence of length 50, frequency 0.08, amplitude 2.5, and phase shift of 90 degrees generated by modifying Program P1_4 is displayed below.The period of this sequence is -Q1.24 By replacing the stem command in Program P1_4 with the plot command, the plot obtained is as shown below:< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. > The difference between the new plot and the one generated in Question Q1.17 is -Q1.25 By replacing the stem command in Program P1_4 with the stairs command the plot obtained is as shown below:< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. > The difference between the new plot and those generated in Questions Q1.17 and Q1.24 is- Project 1.4 Random signalsAnswers:Q1.26 The MATLAB program to generate and display a random signal of length 100 with elements uniformly distributed in the interval [–2, 2] is given below along with the plot of the random sequence generated by running the program:< Insert program code here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >Q1.27 The MATLAB program to generate and display a Gaussian random signal of length 75 with elements normally distributed with zero mean and a variance of 3 is given below along with the plot of the random sequence generated by running the program:< Insert program code here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >Q1.28The MATLAB program to generate and display five sample sequences of a random sinusoidal signal of length 31{X[n]} = {A cos(ωo n + φ)}where the amplitude A and the phaseφare statistically independent random variables with uniform probability distribution in the range0≤A≤4for the amplitude and in the range0 ≤φ≤2πfor the phase is given below. Also shown are five sample sequences generated byrunning this program five different times.< Insert program code here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >1.2 SIMPLE OPERATIONS ON SEQUENCESProject 1.5Signal SmoothingA copy of Program P1_5 is given below.clf;R=51;d=0.8*(rand(R,1)-0.5);m=0:R-1;s=2*m.*(0.9.^m);x=s+d';subplot(2,1,1);plot(m,d','r-',m,s,'g--',m,x,'b-.');xlabel('时间序列n');ylabel('振幅');legend('d[n] ','s[n] ','x[n] ');x1=[0 0 x];x2=[0 x 0];x3=[x 0 0];y=(x1+x2+x3)/3;subplot(2,1,2);plot(m,y(2:R+1),'r-',m,s,'g--');legend('y[n] ','s[n] ');xlabel('时间序号n');ylabel('振幅');Answers:Q1.29 The signals generated by running Program P1_5 are displayed below:Q1.30 The uncorrupted signal s[n]is -The additive noise d[n]is -Q1.31The statement x = s + d CAN / CANNOT be used to generate the noise corrupted signal because -Q1.32The relations between the signals x1, x2, and x3, and the signal x are -矩阵x1的第三个到最后一个元素由x组成;矩阵x2的第二个到倒数第二个元素由x组成;矩阵x3的第一个到倒数第三个元素由x组成Q1.33The purpose of the legend command is -Project 1.6Generation of Complex SignalsA copy of Program P1_6 is given below.< Insert program code here. Copy from m-file(s) and paste. >Answers:Q1.34 The amplitude modulated signals y[n]generated by running Program P1_6 for various values of the frequencies of the carrier signal xH[n]and the modulating signal xL[n], and various values of the modulation index m are shown below:< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. >Q1.35The difference between the arithmetic operators*and.*is -A copy of Program P1_7 is given below.n = 0:100;a = pi/2/100;b = 0;arg = a*n.*n+b*n;x = cos(arg);clf;stem(n,x);axis([0,100.-1.5,1.5]);title('扫频正弦信号');xlabel('时间序号n');ylabel('振幅');grid;axis;Answers:Q1.36 The swept-frequency sinusoidal sequence x[n]generated by running Program P1_7 is displayed below.Q1.37The minimum and maximum frequencies of this signal are - 0 and 0.5Q1.38The Program 1_7 modified to generate a swept sinusoidal signal with a minimum frequency of0.1 and a maximum frequency of 0.3 is given below:< Insert program code here. Copy from m-file(s) and paste. >1.3 WORKSPACE INFORMATIONQ1.39The information displayed in the command window as a result of the who command is -Q1.40The information displayed in the command window as a result of the whos command is -1.4 OTHER TYPES OF SIGNALS (Optional)Project 1.8 Squarewave and Sawtooth SignalsAnswer:Q1.41MATLAB programs to generate the square-wave and the sawtooth wave sequences of the type shown in Figures 1.1 and 1.2 are given below along with the sequences generated by running these programs:< Insert program codes here. Copy from m-file(s) and paste. >< Insert MATLAB figure(s) here. Copy from figure window(s) and paste. > Date: Signature:。

云大信号与系统实验五

云大信号与系统实验五

t 单位:sf(t)F(j ω)ω 单位:pit 单位:sfs(t)ω 单位:piFs(j ω)11.2 设有限频带信号)4cos()2cos(5)(t t t f ππ++=,(1)计算该信号的奈奎斯特频率;(2)以不同的采样频率对该信号进行采样,画出采样前和采样后信号的频谱,对比观察和分析信号临界采样、过采样和欠采样情况下,信号频谱有何变化。

解 该信号在ω0=±4π(rad/s)的地方有近似于冲激信号的谱线。

根据奈奎斯特采样定理,该信号的临界采样角频率为ωs=2×ω0=8π(rad/s),临界采样频率为Hz f s s42==πω,临界采样周期T S =0.25s 。

采样周期小于0.25,过采样;采样周期大于0.25,欠采样。

display('奈奎斯特周期0.25秒,Ts<0.25,过采样,Ts>0.25,欠采样'); display('Please input the value of sample period'); Ts = input('Ts = '); t = 0:0.01:40;y = 5+2*cos(2*pi*t)+cos(4*pi*t); subplot(221); plot(t,y); axis([0 8 1 9]); xlabel('t 单位:s','Fontsize',8); title('f(t)');line([0 8],[0 0],'color',[0 0 0]); %数值求解余弦信号的频谱 N = 300; W = 2*pi*5; k = -N:N; w = k*W/N;Y = 0.01*y*exp(-j*t'*w); Y = abs(Y); subplot(222); plot(w/pi,Y)axis([-10,10,0,pi*35+0.2]); title('F(j\omega)');xlabel('\omega 单位:pi'); %采样后的余弦信号 subplot(223); plot(t,y,'b:');hold on t2=0:Ts:40;y2=5+2*cos(2*pi*t2)+cos(4*pi*t2);stem(t2,y2); axis([0 8 1 9]); xlabel('t 单位:s','Fontsize',8); title('fs(t)'); hold off%采样后余弦信号的频谱Y2 = Ts*y2*exp(-j*t2'*w); Y2 = abs(Y2); subplot(224);plot(w/pi,Y,'b')xlabel('\omega 单位:pi'); title('Fs(j\omega)'); hold onplot(w/pi,Y2,'r');axis([-10,10,0,pi*35+0.2]); hold off临界采样 Ts=0.25s过采样 Ts=0.2st 单位:sf(t)F(j ω)ω 单位:pit 单位:sfs(t)ω 单位:piFs(j ω)欠采样 Ts=0.4st 单位:sf(t)F(j ω)ω 单位:pit 单位:sfs(t)ω 单位:piFs(j ω)欠采样的信号发生混叠,不能恢复成原信号;临界采样和过采样信号都没有发生混叠,都能恢复出原信号,但相比之下,过采样使抽样信号频率波形中产生空隙,更容易恢复出原信号。

数字信号处理实验1

数字信号处理实验1

数字信号处理实验1云南大学信息学院数字信号处理实验报告实验一离散时间信号的时域分析实验室名称:计算机基础实验室(信息学院2202)实验时间: 2021 年 9 月17 日姓名:王凤琼学号:20131060114 专业:电子信息工程指导教师:柏正尧成绩教师签名:年月日 1云南大学信息学院数字信号处理实验报告一、实验目的 1、了解认识序列信号; 2、利用MATLAB仿真分析序列信号; 3、提高MATLAB编程能力。

4、熟悉MATLAB中产生信号和绘制信号的基本命令。

二、实验内容 1.5 序列的产生Q1.1运行程序P1.1,以产生单位样本序列u[n]并显示它。

Q1.2 命令clf,axis,title,xlabel和ylabel的作用是什么? Q1.3 修改程序P1.1,产生带有延时11个样本的延迟单位样本序列ud[n]。

运行修改的程序并显示产生的序列。

Q1.6 运行程序P1.2,以产生复数值得指数序列。

Q1.7 哪个程序参数控制该序列的增长或衰减?哪个参数控制该序列的振幅? Q1.17 运行程序P1.4,以产生正弦序列并显示它。

Q1.18 该序列的频率是多少?怎样可以改变它?哪个参数控制该序列的相位?哪个参数控制该序列的振幅?该序列的周期是多少? Q1.23 修改上述程序,以产生长度为50、频率为0.08、振幅为2.5、相移90°的一个正弦序列并显示它。

该序列的周期是多少? 1.6序列的简单运算。

Q1.29 运行程序P1.5,以产生所有相关的信号。

Q1.32 信号x1,x2和x3与信号x之间的关系是什么? 2 云南大学信息学院数字信号处理实验报告三、实验器材及软件1. 微型计算机1台 2. MATLAB 7.0软件 3云南大学信息学院数字信号处理实验报告四、实验原理序列以向量的形式存储,并且所有的信号被限定为因果的和有限长的。

产生长度为N的单位样本序列u=[1 zeros(1,N-1)];延时M个样本且长度为N的单位样本序列ud=[zero (1,M) 1 zeros(1 N-M-1)];产生长度为N的单位阶跃序列s=[ones(1,N)]; \\基本离散时间系列是指数序列,可用运算上程序p1.4,截图保存。

数字信号课后上机实验

数字信号课后上机实验

实验报告专业班级电子1241姓名赫思远学号1204451118成绩评定电气与信息学院和谐勤奋求是创新实验教学考核和成绩评定办法1.课内实验考核成绩,严格按照该课程教学大纲中明确规定的比重执行。

实验成绩不合格者,不能参加课程考试,待补做合格后方能参加考试。

2.单独设立的实验课考核按百分制评分,考核内容应包括基本理论、实验原理和实验。

3.实验考核内容包括:1)实验预习;2)实验过程(包括实验操作、实验记录和实验态度、表现);3)实验报告;权重分别为0.2 、0.4 、0.4;原则上根据上述三个方面进行综合评定。

学生未取得1)和2)项成绩时,第3)项成绩无效。

4.实验指导教师应严格按照考核内容分项给出评定成绩,并及时批改实验报告,给出综合成绩,反馈实验中出现的问题。

实验成绩在教师手册中有记载。

实验报告主要内容一.实验目的二.实验仪器及设备三.实验原理四.实验步骤五.实验记录及原始记录六.数据处理及结论七. 思考题八.实验体会(可选项)注:1. 为了节省纸张,保护环境,便于保管实验报告,统一采用A4纸,实验报告建议双面打印(正文采用宋体五号字)或手写,右侧装订。

2. 实验类别指验证、演示、综合、设计、创新(研究)、操作六种类型实验。

3. 验证性实验:是指为了使学生巩固课程基本理论知识而开设的强调演示和证明,注重实验结果(事实、概念或理论)的实验。

4. 综合性实验:是指实验内容涉及本课程的综合知识或本课程相关的课程知识的实验。

5. 设计性实验:是指给定实验目的、要求和实验条件,由学生自行设计实验方案并加以实现的实验。

一、实验目的1. 掌握求系统响应的方法2. 掌握时域离散系统的时域特性3. 分析、观察及检验系统的稳定性二、实验原理与方法在时域中,描写系统特性的方法是差分方程和单位脉冲响应。

已知输入信号, 可以由差分方程、单位脉冲响应或系统函数求出系统对于该输入信号的响应,本实验仅在时域求解。

在计算机上适合用递推法求差分方程的解,最简单的方法是采用MATLAB语言的工具箱函数filter函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五 离散时间信号的频域分析
一、实验目的
(1)学习DFT 与DTFT 的关系。

(2)学习DFT 与IDFT 的计算。

(3)学习DFT 的若干性质。

二、实验内容 2.1 求给定序列求DTFT
1、给定了序列X[n]=[1 3 5 7 9 11 13 15]。

按照书上3,1的程序,通过修改num 使其等于给出序列,同时den 为1就可以求出了。

结果如图1、图2。

-2
-1.5-1-0.5
00.51 1.52
-50050
100 H(e j ω)的实部
ω /π振幅
-2
-1.5
-1
-0.5
00.5
1
1.5
2
-100-50050
100 H(e j ω)的虚部
ω /π
振幅
-2
-1.5-1-0.500.51 1.52
020
406080 |H(e j ω)|的幅度谱
ω /π振幅
-2
-1.5
-1
-0.5
0.5
1
1.5
2
-4-2024[H(e j ω)]的相位谱
ω /π
以弧度为单位的相位
图1 序列DTFT 后的实部和虚部 图2 序列DTFT 后的幅度谱和相位谱
2.2 求DTFT ,Wk=2*pi*k/8的8个值
1、根据题意可以看出,W 的范围是0—2pi ,间隔是pi/4,根据2.1的方法,可以求出结果,结果见图3、图4。

我们可以看出,由于间隔取的很大,所以根本无法像2.1反映出DTFT 细节结果,存在很大误差。

所以在利用函数求DTFT 时候我们必须将W 的间隔取的小一些。

但是我们却可以通过这个大概反应出下面要计算的DFT 的变化。

00.20.40.60.8
1 1.
2 1.4 1.6 1.82
-50
050
100 H(e j ω)的实部
ω /π
振幅
0.2
0.4
0.6
0.8
1 1.2
1.4
1.6
1.8
2
-20-10010
20 H(e j ω)的虚部
ω /π
振幅
0.2
0.4
0.6
0.8
1 1.2
1.4
1.6
1.8
2
0204060
80 |H(e j ω)|的幅度谱
ω /π
振幅
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2
-4-2024[H(e j ω)]的相位谱
ω /π
以弧度为单位的相位
图3 8个点DTFT 后的实部和虚部 图4 8个点DTFT 后的幅度谱和相位谱
2.3 用FFT 求X[n]的DFT
1、利用FFT 函数可以很顺利的求出X[n]的幅度谱和相位谱。

结果如图5所示。

同时与利用DTFT 取较大W 间隔求出的幅度谱相位谱(图4)进行比较,我们可以发现,两个图形的样子是非常像的,只是一个是连续的,一个是离散的。

可以得出结论DFT 是将DTFT 的到的结果进行离散化,也就是DTFT 中的W=2k*pi/N 这与理论课上学的是一致的。

1
2
3
4
5
6
7
020406080离散傅里叶变化的幅度谱
1
2
3
4
5
6
7
-4-2024离散傅里叶变化的相位谱
图5 利用FFT 求出X[n]的相位谱、幅度谱
2.4 用IFFT 求离散傅里叶逆变换
1、利用2.3中的序列求出的FFT 结果,利用IFFT 语句可以求出原序列,也就是X[n]=[1 3 5 7 9 11 13 15],结果见图6。

01234567
050100离散傅里叶变化的幅度谱
01234567
-505离散傅里叶变化的相位谱
01234567
1020离散傅里叶逆变化的结果
图6 IFFT 的结果
2.5 验证有限长序列圆周移位的概念
1、圆周移位的原理相当于钟表的原理,移动始终在一个圆周内进行。

我用的序列X[n]=[0 1 2 3 4 5 6 7 8 9],然后圆周移位4位。

结果如图7。

可以看出每个样本左移4个单位。

移到最左边再需要左移跳到最右边。

1
2
3
4
5
6
7
8
9
02468原序列
1
2
3
4
5
6
7
8
9
02468圆周移位 4个样本得到的序列
图7 圆周移位4个样本
2.6 验证DFT 圆周时移性质
1、利用2.1给出的序列X[n],完成DFT 同时完成圆周移位后的DFT 。

发现幅度没有发生变化,相位发生圆周时移。

结果如图8所示。

时移序列长度或其整数倍,则会发现相位不变。

时移8个样本,结果见图9所示。

可以证明理论课上学的圆周时
移性质:设x (n )是长度为N 的有限长序列,y (n )为x (n )的循环移位,即

其中
2
4
6
8
020406080原序列的离散傅里叶变换的幅度0
2
4
6
8
020406080圆周移位后序列的离散傅里叶变换的幅度0
2
4
6
8
-4-2024原序列的离散傅里叶变换的相位0
2
4
6
8
-4-2024圆周移位后序列的离散傅里叶变换的相位
2
4
6
8
020406080原序列的离散傅里叶变换的幅度0
2
4
6
8
020406080圆周移位后序列的离散傅里叶变换的幅度
2
4
6
8
-4-2024原序列的离散傅里叶变换的相位0
2
4
6
8
-4-2024圆周移位后序列的离散傅里叶变换的相位
图8 DFT 圆周时移性质(1) 图9 圆周时移性质(2)
2.7 验证DFT 圆周卷积性质
1、设定两个序列g1=[1 2 3 4 5 6],g2=[1 -2 3 3 -2 1],然后分别作圆周卷积和离散傅里叶变换乘积的离散傅里叶逆变换。

得到结果如图10,发现结果相同。

可以发现圆周卷积性质:两个序列做DFT 后相乘等于两个序列作圆周卷积后再作DFT 。

图10 DFT 圆周卷积结果
三、实验总结
(1)通过本次实验,熟悉了MATLAB 中的相关函数。

尤其熟悉了freqz 和fft 以及circonv 的用法。

(2)深刻理解了DTFT 和DFT 的联系和区别。

也就是DTFT 中的W=2k*pi/N 变为DFT 。

(3)加深理解了DFT 的圆周时移性质和圆周卷积性质。

相关文档
最新文档