通讯计录课程设计报告- 菜单设计及通信原理课程设计_第1页
通讯计录课程设计报告- 菜单设计及通信原理课程设计_第2页
通讯计录课程设计报告- 菜单设计及通信原理课程设计_第3页
通讯计录课程设计报告- 菜单设计及通信原理课程设计_第4页
通讯计录课程设计报告- 菜单设计及通信原理课程设计_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通讯录菜单设计报告课程名称:C语言程序课程设计实验名称:通讯录菜单设计姓名:学号:指导老师:实践时间:通讯录管理系统设计题目及要求:建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;能够提供添加、删除和修改通讯录信息的功能;能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询;将通讯录保存在文件中;能够按表格方式输出通讯录信息。概要设计系统功能模块图:添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱后,会提示是否继续添加。显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱即可完成修改保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件(2).工作流程图:①添加:添加通讯录记录②显示:显示通讯录记录③删除:删除通讯录记录 ④查询:查询通讯录记录先选择查询方式,以姓名查询方式为例

⑤修改:修改通讯录记录源程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstruct { charscore;/*编号*/ charname[10];/*姓名*/ charnum[15];/*号码*/ charemail[20]; /*邮箱*/ charage[8]; /*年龄*/ charadds[20]; /*住址*/ }Person;Personpe[80];intmenu_select() { charc; do{ system("cls"); printf("\t\t*****通讯录*****\n"); printf("\t\t┌───────┐\n"); printf("\t\t│1.添加记录│\n"); printf("\t\t│2.显示记录│\n"); printf("\t\t│3.删除记录│\n"); printf("\t\t│4.查询记录│\n"); printf("\t\t│5.修改记录│\n"); printf("\t\t│6.保存记录│\n"); printf("\t\t│0.退出程序│\n"); printf("\t\t└───────┘\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0'); }intInput(Personper[],intn){ inti=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+i].score); printf("\t姓名:"); scanf("\t%s",per[n+i].name); printf("\t年龄:"); scanf("\t%s",per[n+i].age); printf("\t电话号码:"); scanf("\t%s",per[n+i].num); printf("\t通讯住址:"); scanf("\t%s",per[n+i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[n+i].email); gets(x); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i);}voidDisplay(Personper[],intn){ inti; printf("----------------------------------------------------------------------\n");/*格式*/ printf("编号姓名年龄电话号码通讯地址电子邮箱\n"); printf("----------------------------------------------------------------------\n"); for(i=1;i<n+1;i++) { printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email); if(i>1&&i%10==0) { printf("\t-----------------------------------\n"); printf("\t"); system("pause"); printf("\t-----------------------------------\n"); } } printf("----------------------------------------------------------------------\n"); system("pause");}intDelete_a_record(Personper[],intn){ chars[20]; inti=0,j; printf("\t请输入想删除记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return(n); } for(j=i;j<n-1;j++) { strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf("\t\t\t已经成功删除!\n"); return(n-1);}voidQuery_a_record(Personper[],intn){ intm; printf("\t\n请选择查询方式:\n");printf("\t┌──────┐\n");printf("\t│1------姓名│\n");printf("\t│2------电话│\n");printf("\t│3------地址│\n");printf("\t│4------返回│\n");printf("\t└──────┘\n");printf("请选择:");scanf("%d",&m);while(m!=1&&m!=2&&m!=3&&m!=4){ printf("输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { chars[20]; inti=0; printf("\t请输入想查询的姓名:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人年龄:%s\n",per[i].age); printf("\t电话号码:%s\n",per[i].num); printf("\t通讯地址:%s\n",per[i].adds); printf("\t电子邮箱:%s\n",per[i].email); }; if(m==2) { chars[20]; inti=0; printf("\t请输入想查询的电话:"); scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t通讯地址:%s\n",per[i].adds); printf("\t电子邮箱:%s\n",per[i].email); }; if(m==3) { chars[20]; inti=0; printf("\t请输入想查询的地址:"); scanf("\t%s",s); while(strcmp(per[i].adds,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t电话号码:%s\n",per[i].num); printf("\t电子邮箱:%s\n",per[i].email); };}voidChange(Personper[],intn){ chars[20]; inti=0; printf("\t请输入想修改的记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n)i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t编号:"); scanf("\t%d",&per[i].score); printf("\t姓名:"); scanf("\t%s",per[i].name); printf("\t年龄:"); scanf("\t%s",per[i].age); printf("\t电话号码:"); scanf("\t%s",per[i].num); printf("\t通讯住址:"); scanf("\t%s",per[i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[i].email); printf("\t修改成功!");}voidWritetoText(Personper[],intn){ inti=0; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t保存到文件\n");/*输入文件名*/ printf("\t请输入所保存的文件名:"); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; } fprintf(fp,"******************************************通讯录******************************************\n"); fprintf(fp,"编号姓名年龄电话号码通讯地址电子邮箱\n"); fprintf(fp,"------------------------------------------------------------------------------------------\n"); while(i<n) { fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email); i++; } fprintf(fp,"------------------------------------------------------------------------------------------\n"); fprintf(fp,"***************************************共有%d条记录****************************************\n",n); fclose(fp);/*关闭文件*/ printf("保存成功!\n");}voidmain()/*主函数*/{ intn=0; for(;;) { switch(menu_select()) { case1: printf("\n\t添加记录到通讯录\n");/*添加记录*/ n=Input(pe,n); break; case2: printf("\n\t\t\t通讯录记录表\n");/*显示记录*/ Display(pe,n); break; case3: printf("\n\t从通讯录中删除记录\n"); n=Delete_a_record(pe,n); /*删除记录*/ printf("\t"); system("pause"); break; case4: printf("\n\t在通讯录中查找记录\n"); Query_a_record(pe,n); /*查找记录*/ printf("\t"); system("pause"); break; case5: printf("\n\t修改通讯录中的记录\n"); Change(pe,n); /*修改数据*/ printf("\t"); system("pause"); break; case6: printf("\n\t保存功能\n"); WritetoText(pe,n); /*保存数据*/ printf("\t"); system("pause"); break; case0: printf("\n\t\t谢谢使用,再见!\n");/*结束程序*/ printf("\n\t\t"); system("pause"); exit(0); } }}测试数据及其结果分析测试:1).显示的主菜单界面2).添加界面:3).显示界面:4).删除界面:删除后,通讯录里的显示记录:5).查询界面:以姓名查询方式为例:6).修改界面:修改后,通讯录里的显示记录:7).保存界面:

课程名称:通信原理设计班级:电-2班学号:姓名:一、实验目的在本实验中使用的软件工具是MATLAB。设计本实验的目的是希望在以下几方面有所收获:1.会MATLAB软件的最基本运用。MATLAB是一种很实用的数学软件,它易学易用。MATLAB对于许多的通信仿真类问题来说是比较合适的。2.了解计算机仿真的基本原理及方法,知道怎样通过仿真的方法去研究通信问题。3.加深对信号与系统和通信原理及其相关课程内容的理解。二、实验特点与硬件实验相比,软件实验具如下一些特点:1.软件实验具有广泛的实用性和极好的灵活性。在硬件实验中改变系统参数也许意味着要重做硬件,而在软件实验中这只是该一两个数据,或者只是在屏幕上按几下鼠标。2.软件实验更有助于我们较为全面地研究通信系统。有许多问题,通过硬件试验来研究可能非常困难,但在软件实验中却易于解决。3.硬件实验的精确度取决于元器件及工艺水平,软件实现的精确度取决于CPU的运算速度或者说是程序的运算量。4.软件实验开发周期短,成本低。三、上机实验要求掌握matlab的基本操作及了解基本的仿真方法,分析运行范例程序。按以下要求编制仿真程序并调试运行基本信号的仿真模拟调制与解调的仿真数字基带传输码型的仿真数字基带系统的仿真数字调制与解调的仿真脉冲编码调制仿真四、实验内容1、编程实现基本信号的仿真(1)产生并绘出以下信号:a单位脉冲序列b单位阶跃序列c正弦信号及其频谱d周期锯齿波sawtooth()e周期方波square()f实指数序列y(n)=2ngsin2πf1t*cos2πf2tf1=50Hzf2=2000Hz(2)产生一条-2到2之间的Sa(200t)曲线。(3)产生下面信号,并绘出频谱t0<t<t0/4s(t)=-t+t0/4t0/4<t<3t0/4假设t0=0.5st-t03t0/4<t<t02、编程实现模拟调制与解调的仿真(DSB必做,SSB\AM\FM选择其中一种)设消息信号m(t)的表达式为:10≤t≤t0/3m(t)=-2t0/3≤t≤2t0/3(注:m(t)也可自己选用其它的信号)0其他(1)DSB中,已调信号的时域表达式:u(t)=m(t)c(t)=Ac*m(t)cos(2πfct)假设用信号m(t)以DSB方式调制载波c(t)=cos(2πfct),所得到的已调信号记为u(t);并假设t0=0.15s和fc=250Hz。绘制调制信号、已调信号和解调信号等各相关点处的时域波形和频谱。(2)以上例中提供的信号进行SSB调制,试绘制调制信号、已调信号和解调信号等各相关处的时域波形和频谱。(提示:上边带调制信号:ussb=m.*c-imag(hilbert(m)).*b;下边带下边带调制信号:lssb=m.*c+imag(hilbert(m)).*b。)(3)以上例中提供的信号进行AM调制,给定的调制指数a=0.8,试绘制调制信号、已调信号和解调信号等各相关处点的时域波形和频谱。AM调制信号的时域表达式为:u(t)=AC[1+amn(t)]cos(2πfct)这里a是调制指数,mn(t)是经过归一化处理的消息信号,式中mn(t)=m/max(abs(m))。(4)以上例中提供的信号进行频率调制,采用载波:c(t)=cos(2πfct)进行调频,fc=200Hz,t0=0.15s,偏移常数KF=50。试绘制调制信号、已调信号和解调信号等各相关点处的时域波形和频谱。调频信号的时域表达式为:M(t)=Accos(5)高斯噪声的产生设高斯噪声限带为(-Bs,Bs),双边带功率谱密度为,则总功率为,设高斯噪声幅度为x,则有:=,所以高斯噪声可表示成x=sqrt(Bs*no)*randn(1,M)M为随机码元个数在模拟调制中加上噪声后波形作对比。3、编程实现数字基带信号的码型的仿真(1)试做单极性归零码、双极性非归零码、单极性非归零码、双极性归零码,占空比50%(选择其中2种);(2)双相码、AMI码、HDB3码等的仿真(选其中2种)。4、数字基带通信系统的仿真(1)一个升余弦频谱的滤波器,已知,画出α等于0.1,0.5,1时的波形。参数要求:,在内仿真10个点,仿真区间为-10ms~10ms。(2)利用matlab的SIMULINK功能建立一个基带传输模型,采用单极性,或双极性码作为基带信号,发送滤波器为上述升余弦滤波器,发送数据率为1000bps,分别观察输出信号在无噪声干扰及有噪声干扰下波形及眼图。注意:必须首先运行实验步骤1中的程序得出h(t)后,才能运行该模型。(3)建立基带接收机模型,观察判决输出,与发送数码进行比较。(选做)5、数字调制与解调的仿真(选择两种调制与解调方式)根据2FSK、2PSK、2DPSK等的调制和解调的原理框图,绘出的各点波形及其频谱或功率谱。加上噪声作对比。(发送的二进制信息序列可自己设定,例如假设发送的二进制信息序列为100110000101,一个码元周期内含有两个载波周期。)6、脉冲编码调制仿真(选作)若输入A律PCM编码器的正弦信号为x(t)=sin(1600πt),抽样序列为x(n)=sin(0.2πn),n=0,1,2…,10,将其进行PCM编码,给出编码器的输出码组序列。绘出译码后的波形(选作)。二.程序及运行结果a单位脉冲序列程序:n=1:50;%定义序列的长度是50x=zeros(1,50);%注意:MATLAB中数组下标从1开始x(1)=1;subplot(3,1,1);stem(x);title('单位冲击信号序列');b单位阶跃序列程序如下:ns=0;nf=10;n0=2;n=[ns:nf];x=[(n-n0)>=0]c正弦信号及其频谱t=-1:0.01:1;

x=5*sin(2*pi*10*t);

N=length(x);

fx=fft(x);

df=100/N;

n=0:N/2;

f=n*df;

subplot(211);

plot(t,x);grid;

subplot(212);

plot(f,abs(fx(n+1))*2/N);grid;d周期锯齿波sawtooth()Fs=10000;t=0:1/Fs:1;x1=sawtooth(2*pi*50*t,0);x2=sawtooth(2*pi*50*t,1);subplot(2,1,1),plot(t,x1),axis([0,0.2,-1,1]);title('锯齿波1');subplot(2,1,2),plot(t,x2),axis([0,0.2,-1,1]);title('锯齿波2')f实指数序列y(n)=2na=2;x=a.^n;stem(n,x);title('实指数序列')e周期方波square()Fs=10000;t=0:1/Fs:1;x1=square(2*pi*50*t,20);subplot(211),plot(t,x1),title('周期方波');axis([0,0.2,-1.5,1.5]);gsin2πf1t*cos2πf2tf1=50Hzf2=2000Hzf1=50;f2=2000;t=0:0.02:10;a=sin(2*pi*f1*t);b=cos(2*pi*f2*t);y=a.*b;plot(t,y);title('sin2pif1t*cos2pif2t')(2)产生一条-2到2之间的Sa(200t)曲线。t=linspace(-2,2);>>y=sinc(200*t);>>plot(t,y);title('y=sa(200t)')(3)产生下面信号,并绘出频谱t0<t<t0/4s(t)=-t+t0/4t0/4<t<3t0/4t-t03t0/4<t<t0假设t0=0.5s源程序:clearall;closeall;clc;t0=0.5;t=0:0.01:0.5;s=t.*(t>0&t<=t0/4)+(-t+t0/4).*(t>=t0/4&t<=3*t0/4)+(t-t0).*(t>=3*t0/4&t<t0);plot(t,s)1.模拟调制与解调的仿真(1)信号的DSB调制与解调clearall;closeall;clc;t0=0.15;dt=0.0001;t=[0:dt:1];fc=250;phi0=0;ct=cos(2*pi*fc*t+phi0);%载波信号fm=10;fun=@(t)1.*(t>=0&t<=t0/3)+(-2).*(t>=t0/3&t<=2*t0/3)+0.*(t>=2*t0/3);mt=fun(t);ut=1.5*mt.*ct;figure(1)subplot(3,1,1),plot(t,mt),title('mt----调制信号')subplot(3,1,2),plot(t,ct),title('ct----载波信号')subplot(3,1,3),plot(t,ut),title('ut----已调信号')[m,n]=size(ut);ni=0.05*randn(m,n);u0=ut+ni;figure(2)subplot(3,1,1),plot(t,ni),title('ni----高斯白噪声')subplot(3,1,2),plot(t,u0),title('u0=ut+ni----已调信号+高斯白噪声')w1=2*dt*(fc-2*fm);w2=2*dt*(fc+2*fm);[b,a]=butter(4,[w1,w2],'bandpass');u1=filter(b,a,u0);subplot(3,1,3),plot(t,u1),title('u1----信号进入带通滤波器')figure(3)u2=u1.*ct;subplot(3,1,1),plot(t,u2),title('u2----与载波相乘后的波形')B=2*fm;wn3=2*dt*B;[b,a]=butter(4,wn3,'low');u3=filter(b,a,u2);subplot(3,1,2),plot(t,-u3),title('u3----解调后的信号')subplot(3,1,3),plot(t,-u3),holdon,title('解调后的信号与原调制信号比较')plot(t,mt,'r');dt=t(2)-t(1);%采样周期f=1/dt;%采样频率(Hz)X=fft(ut);%计算x的快速傅立叶变换XN=1/dt;F=X(1:N/2+1);%F(k)=X(k)(k=1:N/2+1)f=f*(0:N/2)/N;%使频率轴f从零开始figure(4)subplot(3,1,1),plot(f,abs(F)),title('dsb调制信号频谱图');xlim([0,fc*2]);xlabel('Frequency');ylabel('|F(k)|')调制与解调的波形,频谱(2)SSB方式clearall;closeall;clc;t0=0.15;dt=0.0001;t=[0:dt:1];fc=250;phi0=0;ct=cos(2*pi*fc*t+phi0);%载波信号fm=10;fun=@(t)1.*(t>=0&t<=t0/3)+(-2).*(t>=t0/3&t<=2*t0/3)+0.*(t>=2*t0/3);mt=fun(t);mh=imag(hilbert(mt));b=sin(2*pi*fc.*t)ussb=mt.*ct-imag(hilbert(mt)).*b;lssb=mt.*ct+imag(hilbert(mt)).*b;figure(1)subplot(3,1,1),plot(t,mt),title('mt----调制信号')subplot(3,1,2),plot(t,ussb),title('ussb----载波信号')subplot(3,1,3),plot(t,lssb),title('lssb----已调信号')dt=t(2)-t(1);%采样周期f=1/dt;%采样频率(Hz)X1=fft(ussb);%计算x的快速傅立叶变换XX2=fft(lssb);N=1/dt;F1=X1(1:N/2+1);%F(k)=X(k)(k=1:N/2+1)F2=X2(1:N/2+1);f=f*(0:N/2)/N;%使频率轴f从零开始figure(4)subplot(3,1,1),plot(f,abs(F1)),holdon,title('ussb调制信号频谱图');plot(-f,abs(F1));xlim([-fc*2,fc*2]);subplot(3,1,2),plot(f,abs(F2)),holdon,title('lssb');plot(-f,abs(F2));xlim([-fc*2,fc*2]);xlabel('Frequency');ylabel('|F(k)|')(3)高斯白噪声n0=30;fc=250;t=[0:0.0005:0.15];u=cos(2*pi*fc.*t);M=length(u);x=sqrt(4*n0)*randn(1,M);plot(t,x(1:length(t)));2、数字基带通信系统的仿真(1)一个升余弦频谱的滤波器,t=-1/100+eps:1/10000:1/100;alfa=0.4;ts=1/1000;h_t=sin(pi*t/ts)./(pi*t/ts).*(cos(alfa*pi*t/ts)./(1-4*alfa^2*t.^2/ts^2));plot(t,h_t);(2)利用matlab的SIMULINK功能建立一个基带传输模型,采用单极性,或双极性码作为基带信号,发送滤波器为上述升余弦滤波器,发送数据率为1000bps,分别观察输出信号在无噪声干扰及有噪声干扰下波形及眼图。无噪声时眼图有噪声时的眼图注意:必须首先运行实验步骤1中的程序得出h(t)后,才能运行该模型。(3)建立基带接收机模型,观察判决输出,与发送数码进行比较。(选做)3、(1)试做单极性归零码、双极性非归零码、单极性非归零码、双极性归零码,占空比50%(选择其中2种);(2)双相码、AMI码、HDB3码等的仿真(选其中2种)。单极性非归零码4、数字调制与解调的仿真(选择两种调functiony=snrz(x)%本函数实现将输入的一段二进制代码编为相应的单极性非归零码输出%输入x为二进制码,输出y为编好的码%给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示。grid=300;t=0:1/grid:length(x);fori=1:length(x),%计算码元的值if(x(i)==1),%如果信息为1forj=1:grid,%该码元对应的点值取1y((i-1)*grid+j)=1;endelseforj=1:grid;%反之,信息为0,该码元对应的点值取0y((i-1)*grid+j)=0;end;end;endy=[y,x(i)];M=max(y);m=min(y);subplot(2,1,1);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令来实现标记出各码元对应的二进制信息title('单极性非归零码');实例图2、双极性归零码:源程序:%双极性归零码functiony=drz(x)%本函数实现将输入的一段二进制代码编为相应的双极性归零码输出%输入x为二进制码,输出y为编好的码grid=300;t=0:1/grid:length(x)%定义对应时间序列fori=1:length(x),%进行编码if(x(i)==1),%如果信息为1forj=1:grid/2,y(grid/2*(2*i-2)+j)=1;%定义前半时间为1y(grid/2*(2*i-1)+j)=0;%定义后半时间为0endelseforj=1:grid/2%反之,信息为0,该码元对应的点值取0y(grid/2*(2*i-2)+j)=-1;%定义前半时间为-1y(grid/2*(2*i-1)+j)=0;%定义后半时间为0end;end;endy=[y,x(i)];M=max(y);m=min(y);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令来实现标记出各码元对应的二进制信息title('100110000101');Ami码源程序functiony=ami(x)grid=300;t=0:1/grid:length(x);k=-1;%定义对应时间序列fori=1:length(x),%进行编码if(x(i)==1),k=-k;%如果信息为1forj=1:grid/2,y(grid/2*(2*i-2)+j)=k;%定义前半时间为1y(grid/2*(2*i-1)+j)=k;%定义后半时间为0endelseforj=1:grid/2%反之,信息为0,该码元对应的点值取0y(grid/2*(2*i-2)+j)=0;%定义前半时间为-1y(grid/2*(2*i-1)+j)=0;%定义后半时间为0end;end;endy=[y,x(i)];M=max(y);m=min(y);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令来实现标记出各码元对应的二进制信息title('100110000101');1、双相码源程序%双相码functiony=mechester(x)%本函数实现将输入的一段二进制代码编为相应的双相码输出%输入x为二进制码,输出y为编好的码grid=300;t=0:1/grid:length(x)%定义对应时间序列fori=1:length(x),%进行编码if(x(i)==1),%如果信息为1forj=1:grid/2,y(grid/2*(2*i-2)+j)=1;%定义前半时间为1y(grid/2*(2*i-1)+j)=0;%定义后半时间为0endelseforj=1:grid/2%反之,信息为0,该码元对应的点值取0y(grid/2*(2*i-2)+j)=1;%定义前半时间为1y(grid/2*(2*i-1)+j)=0;%定义后半时间为0end;end;endy=[y,x(i)];M=max(y);m=min(y);plot(t,y);axis([0,i,m-0.1,M+0.1]);%采用title命令来实现标记出各码元对应的二进制信息title('100110000101');根据2FSK、2PSK、2DPSK等的调制和解调的原理框图,绘出的各点波形及其频谱或功率谱。加上噪声作对比。(发送的二进制信息序列可自己设定,例如假设发送的二进制信息序列为100110000101,一个码元周期内含有两个载波周期。)2PSK相干解调原理图如下:一个2FSK信号可以看成是两个不同载波的2ASK信号的叠加。其解调和解调方法和ASK差不多。2FSK信号的频谱可以看成是f1和f2的两个2ASK频谱的组合。FSK数字键控FSK调制原理图如下:e2psk(t)e2psk(t)振荡器1f1振荡器2f2选通开关选通开关反相器相加器基带信号FSK相干解调的原理图如下:%2PSK,2FSK4、脉冲编码调制仿真(选作)若输入A律PCM编码器的正弦信号为x(t)=sin(1600πt),抽样序列为x(n)=sin(0.2πn),n=0,1,2…,10,将其进行PCM编码,给出编码器的输出码组序列。绘出译码后的波形(选作)。%apcm.mx=0:1:10;y=sin(0.2*pi*x);z=Apcm(y,87.65)%求sin(0)sin(10)的量化值f=pcmcode(z);运行结果如下:z=Columns1through1000.90290.99080.99080.90290.0000-0.9029-0.9908-0.9908-0.9029Column11-0.0000f=1000000011110011111111101111111011110011100000000111001101111110011

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论