西电电院数电大作业

合集下载

西安电子科技大学数字信号处理大作业

西安电子科技大学数字信号处理大作业

数字信号处理大作业班级:021231学号:姓名:指导老师:吕雁一写出奈奎斯特采样率和和信号稀疏采样的学习报告和体会1、采样定理在进行A/D信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。

(1)在时域频带为F的连续信号 f(t)可用一系列离散的采样值f(t1),f(t1±Δt),f(t1±2Δt),...来表示,只要这些采样点的时间间隔Δt≤1/2F,便可根据各采样值完全恢复原始信号。

(2)在频域当时间信号函数f(t)的最高频率分量为fmax时,f(t)的值可由一系列采样间隔小于或等于1/2fo的采样值来确定,即采样点的重复频率fs ≥2fmax。

2、奈奎斯特采样频率(1)概述奈奎斯特采样定理:要使连续信号采样后能够不失真还原,采样频率必须大于信号最高频率的两倍(即奈奎斯特频率)。

奈奎斯特频率(Nyquist frequency)是离散信号系统采样频率的一半,因哈里·奈奎斯特(Harry Nyquist)或奈奎斯特-香农采样定理得名。

采样定理指出,只要离散系统的奈奎斯特频率高于被采样信号的最高频率或带宽,就可以真实的还原被测信号。

反之,会因为频谱混叠而不能真实还原被测信号。

采样定理指出,只要离散系统的奈奎斯特频率高于采样信号的最高频率或带宽,就可以避免混叠现象。

从理论上说,即使奈奎斯特频率恰好大于信号带宽,也足以通过信号的采样重建原信号。

但是,重建信号的过程需要以一个低通滤波器或者带通滤波器将在奈奎斯特频率之上的高频分量全部滤除,同时还要保证原信号中频率在奈奎斯特频率以下的分量不发生畸变,而这是不可能实现的。

在实际应用中,为了保证抗混叠滤波器的性能,接近奈奎斯特频率的分量在采样和信号重建的过程中可能会发生畸变。

西电数据挖掘大作业k-means和k-medoids

西电数据挖掘大作业k-means和k-medoids

题目:数据挖掘学院:电子工程学院专业:智能科学与技术学生姓名:**学号:02115***k-means实验报告一、waveform数据1、算法描述1.从数据集中任意选取k个赋给初始的聚类中心c1, c2, …,c k;2.对数据集中的每个样本点x i,计算其与各个聚类中心c j的欧氏距离并获取其类别标号:3.按下式重新计算k个聚类中心;重复步骤2和步骤3,直到达到最大迭代次数为止2、实验结果二、图像处理1、算法描述同上;2、实验结果代码:k_means:%%%%%%%%%K_means%%%%%%%% %%%%%%%%%函数说明%%%%%%%% %输入:% sample——样本集;% k ——聚类数目;%输出:% y ——类标(从0开始)% cnew ——聚类中心% n ——迭代次数function [y cnew n]=k_means(sample,k)[N V]=size(sample); %N为样本的个数K为样本的维数y=zeros(N,1); %记录样本类标dist=zeros(1,k);rand_num=randperm(N);cnew=(sample(rand_num(1,1:k),:));%随机初始化聚类中心cold=zeros(k,V);n=0;while(cold~=cnew)cold=cnew;n=n+1; %记录迭代次数%对样本进行重新分类for i=1:Nfor j=1:kif(V==1)dist(1,j)=abs(sample(i,:)-cold(j,:));elsedist(1,j)=norm(sample(i,:)-cold(j,:));endendfor s=1:kif(dist(1,s)==min(dist))y(i,1)=s-1;endendend%更新聚类中心cnew=zeros(k,V);flag=zeros(k,1);for i=1:Nfor j=1:kif (y(I,1)==j-1)flag(j,1)=flag(j,1)+1;cnew(j,=cnew(j,+sample(I,;endendendfor j=1:kcnew(j,=cnew(j,/flag(j,1);endendk_means_waveform:clear;clc;%%%%%%%%%数据读入%%%%%%%data=load('G:\西电\2014大三下\大作业\Data Mining\ k_means\'); [N K]=size(data); %数据集的数目data0=zeros(1,K);data1=zeros(1,K);data2=zeros(1,K);for i=1:Nif(data(i,K)==0)data0=cat(1,data(i,:),data0);elseif(data(i,K)==1)data1=cat(1,data(i,:),data1);elsedata2=cat(1,data(i,:),data2);endendsample=cat(1,data0(1:100,:),data1(1:100,:),data2(1:100,:)); label=sample(:,K); %样本的正确类标sample=sample(:,1:K-1); %样本集k=3; %聚类中心的数目%%%%%%%%%K_means%%%%%%%%[y cnew n]=k_means(sample,k); %%%%%%%%%%正确率统计%%%%%%%sum=zeros(1,6);[N V]=size(sample);for i=1:Nif(y(i,1)==label(i,1))sum(1,1)=sum(1,1)+1;endendfor i=1:Nif((y(i,1)+label(i,1))==2)sum(1,2)=sum(1,2)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==0))||((y(i,1)==1)&&label(i,1)==2)||((y(i,1)==2)&&label(i,1)==1)) sum(1,3)=sum(1,3)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==0)||((y(i,1)==2)&&label(i,1)==2)) sum(1,4)=sum(1,4)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==2)||((y(i,1)==2)&&label(i,1)==0)) sum(1,5)=sum(1,5)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==2))||((y(i,1)==1)&&label(i,1)==0)||((y(i,1)==2)&&label(i,1)==1)) sum(1,6)=sum(1,6)+1;endendsum=sum/N;creatrate=max(sum);disp('循环次数:');disp(n);disp('聚类中心为:');disp(cnew);disp('正确率为:');disp(creatrate);k_means_picture:clear;clc;%%%%%%%%%数据读入%%%%%%%I1=imread('G:\西电\2014大三下\大作业\Data Mining\ k_means\'); I2=rgb2gray(I1);%转化为灰度图像I=im2double(I2);[num v]=size(I);sample=reshape(I,v*num,1);%样本集k=2; %聚类中心的数目%%%%%%%%%K_means%%%%%%%%[y cnew n]=k_means(sample,k);%%%%%%%%v%%%%%%%%I3=sample;if(cnew(1,1)>=cnew(2,1))F0=255;F1=0;elseF0=0;F1=255;endfor i=1:num*vif(y(i,1)==0)I3(i,1)=F0;elseI3(i,1)=F1;endendI3=reshape(I3,num,v);figure(1)subplot(1,3,1);imshow(I1);title('原图像');subplot(1,3,2);imshow(I2);title('灰度图像');subplot(1,3,3);imshow(I3);title('二值化图像');k_medoids实验报告一、waveform数据1、算法描述(1)随机选择k个对象作为初始的代表对象;(2) repeat(3) 指派每个剩余的对象给离它最近的代表对象所代表的簇;(4) 随意地选择一个非代表对象Orandom;(5) 计算用Orandom代替Oj的总代价S;(6) 如果S<0,则用Orandom替换Oj,形成新的k个代表对象的集合;(7) until 不发生变化2、实验结果二、图像处理1、算法描述同上;2、实验结果代码:k_medoids:%%%%%%%%k_medoids%%%%%%%% %%%%%%%%%º函数说明%%%%%%%%%%输入:% sample——数据集% k——聚类数目;%输出:% y——类标;% med ——聚类中心点function [y med]=k_medoids(sample,k)[N V]=size(sample); %N为样本数目V为样本为数%聚类中心的随机初始化rbowl=randperm(N);med=sample(rbowl(1,1:k),:);temp=zeros(N,2);dist=zeros(1,k);index=rbowl(1,k);Eold=0;Enew=1000;while(abs(Enew-Eold)>%将所有样本分配到最近的代表点for i=1:Nfor j=1:kdist(1,j)=norm(sample(i,:)-med(j,:));endtemp(i,1)=min(dist);for s=1:kif(dist(1,s)==temp(i,1))temp(i,2)=s;endendendy=temp(:,2);Eold=sum(temp(:,1));%随机的选择一个非代表点,生成新的代表点集合index=index+1;med_temp=med;E=zeros(1,k);for j=1:kmed_temp(j,:)=sample(index,:);%将所有样本分配到最近的代表点for i=1:Nfor t=1:kdist(1,t)=norm(sample(i,:)-med_temp(t,:));endtemp(i,1)=min(dist);for s=1:kif(dist(1,s)==temp(i,1))temp(i,2)=s;endendendE(1,j)=sum(temp(:,1));endEnew=min(E);for t=1:kif(E(1,t)==Enew)obest=t;endendif(Enew<Eold)med(obest,:)=sample(index,:);elseEnew=Eold;endendk_medoids_waveform:clear;clc;%%%%%%%%%Êý¾Ý¶ÁÈë%%%%%%%data=load(' G:\西电\2014大三下\大作业\Data Mining\ k_medoids\waveform-+'); [N K]=size(data); %数据集的数目data0=zeros(1,K);data1=zeros(1,K);data2=zeros(1,K);for i=1:Nif(data(i,K)==0)data0=cat(1,data(i,:),data0);elseif(data(i,K)==1)data1=cat(1,data(i,:),data1);elsedata2=cat(1,data(i,:),data2);endendsample=cat(1,data0(1:100,:),data1(1:100,:),data2(1:100,:));label=sample(:,K); %Ñù±¾µÄÕýÈ·Àà±êsample=sample(:,1:K-1); %Ñù±¾¼¯k=3; %聚类中心的数目%%%%%%%%%%k_medoids%%%%%%%[y med]=k_medoids(sample,k);%%%%%%%%%%正确率统计Æ%%%%%%%sum=zeros(1,6);[N V]=size(sample);for i=1:Ny(i,1)=y(i,1)-1;endfor i=1:Nif(y(i,1)==label(i,1))sum(1,1)=sum(1,1)+1;endendfor i=1:Nif((y(i,1)+label(i,1))==2)sum(1,2)=sum(1,2)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==0))||((y(i,1)==1)&&label(i,1)==2)||((y(i,1)==2)&&label(i,1)==1)) sum(1,3)=sum(1,3)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==0)||((y(i,1)==2)&&label(i,1)==2)) sum(1,4)=sum(1,4)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==1))||((y(i,1)==1)&&label(i,1)==2)||((y(i,1)==2)&&label(i,1)==0)) sum(1,5)=sum(1,5)+1;endendfor i=1:Nif(((y(i,1)==0)&&(label(i,1)==2))||((y(i,1)==1)&&label(i,1)==0)||((y(i,1)==2)&&label(i,1)==1)) sum(1,6)=sum(1,6)+1;endendsum=sum/N;creatrate=max(sum);disp('¾ÛÀàÖÐÐÄΪ£º');disp(med);disp('ÕýÈ·ÂÊΪ£º');disp(creatrate);k_medoids_picture:clear;clc;%%%%%%%%%Êý¾Ý¶ÁÈë%%%%%%%I0=imread(' G:\西电\2014大三下\大作业\Data Mining\ k_medoids\');D=;I1=imnoise(I0,'gaussian',0,D);%加噪声I2=rgb2gray(I1);%转化为灰度图像I=im2double(I2);[num v]=size(I);sample=reshape(I,v*num,1);%Ñù±¾¼¯k=2; %¾ÛÀàÖÐÐĵÄÊýÄ¿%%%%%%%%%K_means%%%%%%%%[y med]=k_medoids(sample,k);%%%%%%%%图像显示¾%%%%%%%% I3=sample;if(med(1,1)>=med(2,1))F0=255;F1=0;elseF0=0;F1=255;endfor i=1:num*vif(y(i,1)==1)I3(i,1)=F0;elseI3(i,1)=F1;endendI3=reshape(I3,num,v);figure(1)subplot(1,4,1);imshow(I0);title('原图像');subplot(1,4,2);imshow(I1);title('加噪声后的图像');subplot(1,4,3);imshow(I2);title('灰度图像');subplot(1,4,4);imshow(I3);title('二值化图像');。

西电DSP大作业任务报告

西电DSP大作业任务报告

DSP实验课程序设计报告学院:电子工程学院学号:1202121013姓名:赵海霞指导教师:苏涛DSP实验课大作业设计一实验目的在DSP上实现线性调频信号的脉冲压缩、动目标显示(MTI)和动目标检测(MTD),并将结果与MATLAB上的结果进行误差仿真。

二实验内容2.1 MATLAB仿真设定带宽、脉宽、采样率、脉冲重复频率,用MATLAB产生16个脉冲的LFM,每个脉冲有4个目标(静止,低速,高速),依次做2.1.1 脉压2.1.2 相邻2脉冲做MTI,产生15个脉冲2.1.3 16个脉冲到齐后,做MTD,输出16个多普勒通道2.2 DSP实现将MATLAB产生的信号,在visual dsp中做脉压,MTI、MTD,并将结果与MATLAB作比较。

三实验原理3.1 线性调频线性调频脉冲压缩体制的发射信号其载频在脉冲宽度内按线性规律变化即用对载频进行调制(线性调频)的方法展宽发射信号的频谱,在大时宽的前提下扩展了信号的带宽。

若线性调频信号中心频率为f,脉宽为τ,带宽为B,幅度为A,μ为调频斜率,则其表达式如下:]212cos[)()(20t t f t rect A t x μπτ+••=;)(为矩形函数rect 在相参雷达中,线性调频信号可以用复数形式表示,即)]212(exp[)()(20t t f j t rect A t x μπτ+••= 在脉冲宽度内,信号的角频率由220μτπ-f 变化到220μτπ+f 。

3.2 脉冲压缩原理脉冲雷达信号发射时,脉冲宽度τ决定着雷达的发射能量,发射能量越大, 作用距离越远;在传统的脉冲雷达信号中,脉冲宽度同时还决定着信号的频率宽度B ,即带宽与时宽是一种近似倒数的关系。

脉冲越宽,频域带宽越窄,距离分辨率越低。

脉冲压缩的主要目的是为了解决信号的作用距离和信号的距离分辨率之间的矛盾。

为了提高信号的作用距离,我们就需要提高信号的发射功率,因此,必须提高发射信号的脉冲宽度,而为了提高信号的距离分辨率,又要求降低信号的脉冲宽度。

【VIP专享】西电模电大作业

【VIP专享】西电模电大作业

模拟电子技术基础综合设计题一、集成运算放大器基本应用选定集成运算放大器型号,例如:选择高速、高精度的差分放大器INA133(也可以选择其它类似器件),如图1所示为INA133内部电路。

要求:1.利用该器件构成多种功能电路,例如图2所示为应用INA133组成反相比例放大器,图3为应用INA133组成相减器。

2.在该器件基础上,引入少量元器件(电阻、电容、晶体管、场效应管、运放),设计实现更多的应用电路,例如仪表放大器、相加器等。

图1图2图3解答:1.反相比例放大器参数:选用INA133U作为放大器模块,构成基本放大器,由于内部已有电阻,所以利用内部电阻构成如图电路;仿真电路如下:选用黄色标记输出函数,红色作为输入函数,Au=1;输入输出波形仿真结果如下;2.同相比放大器参数:R1=100K R2=400K。

Uo=(1+R2/R1)=5;仿真电路如下:仿真结果如下:3.反相相减器。

使用反相比例放大器构成相减器,R=R1=R2=R3=300K,R4=100K Rf=300K.U1=1V,U2=2V,U3=3V.Uo=-Rf/R(U1+R2+U3),解得Uo=6V;实验结果如图:4.相减器。

差分放大器的原理是利用反相比例放大器和同相比例放大器合成,这里,令R1=R2=5K,R3=R4=25K,Uo=R3/R1(U2-U1)=5(U2-U1)=5(1-0.5)=2.5v仿真电路如下:Uo=-1/RC∫Udt令R1=1M C=100n 输入矩形波,参数如图:仿真电路如图:仿真结果如下:6.反相迟滞比较器Uth=R1*Ucc/(R1+R2),Utl=-R1*|Uee|/(R1+R2)令Ucc=12v,Uee=-12V R1=4K,R2=2K ,则Uth=8VUtl=-8V输入参数:仿真电路:仿真结果:7.单运放振荡器用迟滞比较器和RC电路构成单运放弛张振荡器,R1=R2=5KUcc=|Uee|=12V R=50K C=0.1n仿真结果:8.整流电路;用半波整流电路和反相比列放大器实现全波整流,Uo=-Ui-2Uo1 Ui>0时,Uo1=-Ui Uo=Ui;当Ui<0时,Uo1=1,Uo=-Ui;仿真电路如下:输入信号为:用浅蓝色表示输出,红色表示输入,则仿真结果为:9.对数运算用三极管ic的特性可以得到对数运算电路Uo=-Is*R*exp(Ui/Ut)结果如下:二、设计心电信号放大电路要求:电路总增益60~80dB可调,输入阻抗≥1MΩ,共模抑制比K CMR≥80dB,带宽:0.1Hz~100Hz;电路具有50Hz陷波功能,陷波器中心衰减大于15dB。

西电EDA大作业

西电EDA大作业

《数字电路与系统设计》EDA实验报告班级:学号:姓名:西安电子科技大学电子工程学院毫秒表计时器一、实验功能简介:本系统是利用verilog语言设计,并在Basys2 FPGA开发板上实现的毫秒表计时器。

该系统从0.00s开始以0.01s为步长开始计时当计到0.99s时经过判定后个位加一变为1.00s,之后继续以0.01s为步长从1.00s开始计时直到1.99s,之后进行判定个位加一变为2.00s,继续上述循环,直到毫秒表计时计到59.99s 时进行判定时钟自动重置再继续从0.00s开始计时。

本系统设置了一个复位时钟,推动复位键可以在计时期间中断计时,归零后重新计时。

二、实验条件:1.Basys2 FPGA开发板Basys2 FPGA开发板是一个电路设计实现平台,任何人都可以通过它来搭建一个真正的数字电路。

Basys2是围绕着一个Spartan-3E FPGA芯片和一个Atmel AT90USB USB控制器搭建的,它提供了完整、随时可以使用的硬件平台,并且它适合于从基本逻辑器件到复杂控制器件的各种主机电路。

Basys2板上集成了大量的I/O设备和FPGA所需的支持电路。

主要特点如下:Xilinx Spartan 3E FPGA,10万或25万门,FPGA特性18位乘法器,72位高速双端口Block RAM,以及500MHz+运算能力,USB2.0高速接口提供FPGA配置和数据传输,Xilinx Platform Flash ROM可以无限次存储FPGA 配置,用户可配置晶振(25,50,100MHz),另附可连接第二个时钟晶振的插座,三个内置稳压器(1.2V,2.5V,和3.3V),允许使用3.5V-5.5V的外部电源供电,8个用户可编程LED指示灯,4个七段数码管显示器,4个按键开关,8个滑动开关,1个PS/2接口和1个8位VGA显示接口,4个6针用户扩展接口,可以用来连接Digilent PMOD附属电路板,需要Adept2.0或更新版本软件来进行操作。

西电操作系统大作业任务调度(附代码)

西电操作系统大作业任务调度(附代码)

单处理器任务调度1 需求说明1.1 基本需求目标:本次实验的目标是在Linux环境下实现任务调度仿真,利用多线程实现任务池中的多个任务,支持先来先服务、轮转和反馈三种调度策略,提高对Linux环境下多进程、多线程和单处理器调度等知识的理解。

问题描述:设有任务A、B、C、D、E,分别具有不同的优先级和处理时间,通过一个调度线程对这5个任务进行调度。

功能需求:●正确输出三种调度算法下,任务的执行顺序、每个任务占用CPU的时间以及优先级队列(反馈调度)●通过一个调度进程实现任务调度●有输出界面,在每个时间点输出任务状态、每个任务已经占用CPU时间(TIMECOUNTER)和还需CPU时间,已经执行的任务顺序(order2)和时间(time)。

非功能需求:●程序应有较好的容错性(即能对用户输入的命令进行判断,并对错误的命令进行错误处理)过程需求:●使用vi进行代码的编写●使用make工具建立工程●将实现不同类别功能的函数写到不同的.c文件中,并使用makefile链接编译。

#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct quen{char pname[8];int time1;int time2;char state;struct quen *next;} QUEN;float t,d;struct{int id;float ArriveTime;//到达时间float ServiceTime;//该进程需要的服务时间float StartTime;//进程真正开始运行时间float EndTime;//进程真正结束时间float RunTime;//运行的时间float DQRunTime;//相对执行时间实际运行/请求的服务时间int status;//进程状态,是否被运行过}arrayTask[4];void GetTask();int fcfs();int sjf();void new_n(int s);void Printresult(int j);void cl();void GetTask() {int i;float a;for(i = 0; i <= 4; i++){arrayTask[i].id = i + 1;printf("input the number");printf("input the ArriveTime of arrayTask[%d]:",i);scanf("%f",&a);arrayTask[i].ArriveTime = a;printf("input the RequestTime of arrayTask[%d]:",i);scanf("%f", &a);arrayTask[i].RequestTime = a;arrayTask[i].StartTime = 0;arrayTask[i].EndTime = 0;arrayTask[i].RunTime = 0;arrayTask[i].status = 0;}}int fcfs() {int i,j,w;for(i = 0; i <= 4; i++){if(arrayTask[i].status == 0){t = arrayTask[i].ArriveTime;w = 1;}if(w == 1){break;}}for(i = 0; i <= 4; i++){if(arrayTask[i].ArriveTime < t && arrayTask[i].status == 0){t = arrayTask[i].ArriveTime;}}for(i = 0; i <= 4; i++){if(arrayTask[i].ArriveTime == t){return i;}}//选择排序,先找到第一个没有执行的任务,然后再对所有任务遍历,找到到达时间最小的任务,返回该任务,执行之}//函数目的:用先来先服务策略,找到当前需要执行的任务int sjf(){int i,x=0,a=0,b=0;float g;for(i=0;i<=4;i++){if(arrayTask[i].status == 1){g = arrayTask[i].EndTime;x = 1;}}if (x==0){t = arrayTask[0].ArriveTime;for(i=0;i<=4;i++){if(arrayTask[i].ArriveTime < t){t=arrayTask[i].ArriveTime;a=i;}}return a;}else{for(i = 0; i <= 4; i++) {if(arrayTask[i].EndTime > g){g = arrayTask[i].EndTime;}}for(i = 0; i <= 4; i++){if(arrayTask[i].status == 0 && arrayTask[i].ArriveTime <= g){t = arrayTask[i].RequestTime;a = i;b = 1;}}if(b != 0){for(i = 0; i <= 4; i++){if(arrayTask[i].status == 0 && arrayTask[i].ArriveTime <= g && arrayTask[i].RequestTime < t){t = arrayTask[i].RequestTime;a = i;}}return a;}else {for(i = 0; i <= 4; i++){if(arrayTask[i].status == 0){t = arrayTask[i].ArriveTime;}}for(i = 0; i <= 4; i++){if(arrayTask[i].status == 0 && arrayTask[i].ArriveTime < t){t = arrayTask[i].ArriveTime;a = i;}}return a;}}}void new_n(int s) {int i, g = 0;for(i = 0; i <= 4; i++){ //查找是否有进程未执行,如果没有,令g=0,如果有,令g=1;if(arrayTask[i].status==0)continue;else{g=1;break;}}if(g==0){ //当前进程为最后一个进程arrayTask[s].StartTime=arrayTask[s].ArriveTime;arrayTask[s].EndTime=arrayTask[s].RequestTime+arrayTask[s].ArriveTime;arrayTask[s].RunTime=arrayTask[s].RequestTime;arrayTask[s].status=1;g=2;}if(g==1) {arrayTask[s].status=1; //将该进程执行for(i=0;i<=4;i++) {if(arrayTask[i].status==1)d=arrayTask[i].EndTime;//找到一个进程的结束时间}for(i=0;i<=4;i++){if(arrayTask[i].EndTime>d&&arrayTask[i].status==1)d=arrayTask[i].EndTime; //找到这几个进程的最晚结束时间}if(arrayTask[s].ArriveTime<d){arrayTask[s].StartTime=d;//s的到达在前一个进程结束之前,由于非抢占,故要等待s完成}else{//处理器有空闲时间,即上一个进程完成,下一个进程还没请求arrayTask[s].StartTime=arrayTask[s].ArriveTime;arrayTask[s].EndTime=arrayTask[s].StartTime+arrayTask[s].RequestTime;arrayTask[s].RunTime=arrayTask[s].EndTime-arrayTask[s].ArriveTime;}arrayTask[s].DQRunTime=arrayTask[s].RunTime/arrayTask[s].RequestTime;}}void Printresult(int j){printf("%d\t",arrayTask[j].id);printf("%5.2f\t",arrayTask[j].ArriveTime);printf("%5.2f\t",arrayTask[j].RequestTime);printf("%5.2f\t",arrayTask[j].StartTime);printf("%5.2f\t",arrayTask[j].EndTime);printf("%5.2f\t",arrayTask[j].RunTime);printf("%5.2f\n",arrayTask[j].DQRunTime);}void cl(){QUEN *q,*p,*head,*m;char str[8],f;int t,d,n;printf("Enter the maxnumber of nodes(n):\n"); scanf("%d",&n);d = n;if(d>0){printf("enter the pname:");scanf("%s",str);printf("enter the need time:");scanf("%d",&t);head=p=(QUEN*)malloc(sizeof(QUEN));strcpy(p->pname,str);p->time1=t;p->time2=0;p->state='R';p->next=NULL;head=p;getchar();--d;}//建立头结点,并初始化while(d>0){printf("enter the pname:");scanf("%s",str);printf("enter need time:");scanf("%d",&t);q=(QUEN *)malloc(sizeof(QUEN));strcpy(q->pname,str);q->time1=t;q->time2=0;q->state='R';q->next=NULL;p->next=q;p=q;--d;p->next=head;q=head;} //头插法建立链表printf("process name need time runned static\n");do{printf(" %s%d %d %c\n",q->pname,q->time1,q->time2,q->state);q=q->next;}while(q!=head);printf("\n");do{if(head->time2<head->time1){head->time2++; //基于时间片,一次++操作,就是一次的时间片if(head->time2==head->time1){head->state='END';q=head;printf("The running process is %s\n",q->pname);printf("process name left time runned static\n");do{printf(" %s %d %d %c\n",q->pname,q->time1,q->time2,q->state);q=q->next;}while(q!=head);printf("\n");head=head->next;q=head;p->next=head;}else{printf("The running process is %s\n",q->pname);printf("process name left time runned static\n");do{printf("%s%d%d%c\n",q->pname,q->time1,q->time2,q->state);q=q->next;}while(q!=head);printf("\n");head=head->next;q=head;p=p->next;}printf("Is it needing new process?(y or n)\n");getchar();scanf("%c",&f);if(f=='Y'||f=='y'){getchar();printf("Enter the new pname:");scanf("%s",str);printf("Enter the new neededtime:");scanf("%d",&t);m=(QUEN *)malloc(sizeof(QUEN));strcpy(m->pname,str);m->time1=t;m->time2=0;m->state='R';m->next=NULL;if(q->next->state=='E'){p=m;head=m;p->next=head;q=head;}else{p->next=m;m->next=head;p=m;}}}}while(q->next->state!='E');printf("The processes are finished\n"); }int main(void) {int i,b,k,c = 0;char a;int d[4];//clrscr();//cls();printf("\t 1. FCFS \n");printf("\t 2. SFJ \n");printf("\t 3. EXIT \n");printf("\t 4. cl \n");for(i = 0; ; i++) {if(c){break;}printf("please input the number a:\n");scanf("%d", &a);switch(a){case 3:c = 1;break;case 1:printf("please input the different-Arrive Time of arrayTasks\n");GetTask();printf("*******************************the result of fcfs\n");printf("Number\tArrive\tServer\tStart\tFinish\tTurnove\tTake power turnover time\n"); for(b = 0; b <= 4; b++){k = fcfs();d[b] = k;new_n(k);}for(b = 0; b <= 4; b++){Printresult(d[b]);}continue;case 2:printf("please input the different-RequestTime of arrayTasks\n");GetTask();printf("******************************the result of sjf\n");printf("Number\tArrive\tRequest\tStart\tEnd\tRun\tDQRun time\n");for(b = 0; b <= 4; b++){k = sjf();d[b] = k;new_n(k);}for(b = 0; b < 4; b++){Printresult(d[b]);}continue;case 4:cl();continue;default:printf("the number Error.please input another number!\n"); }}return 0;}。

西安电子科技大学2020 学年上学期《数字逻辑电路》期末考试试题(综合大作业)

西安电子科技大学2020 学年上学期《数字逻辑电路》期末考试试题(综合大作业)

学习中心/函授站_姓名答案+3225776615学号西安电子科技大学网络与继续教育学院2020 学年上学期《数字逻辑电路》期末考试试题(综合大作业)考试说明:1、大作业试题于2020 年4 月23 日公布,2020 年4 月24 日至2020 年5 月10 日在线上传大作业答卷(一张图片对应一张A4 纸答题纸),要求拍照清晰、上传完整;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院标准答题纸》手写完成,要求字迹工整、卷面干净。

一、单项选择题(每题 2 分,共 30 分)1、与(76)H 相等的数是[ ]。

A (76)OB (116)DC (76)D D (1110110)B2、(100011.1)B 的8421BCD 是[ ]。

A 00110101.0101B 00111000.1000C 00111000.0101D 100011.10003、或非门的输出完成F =A , 则多余输入端[ ]。

A 全部接高电平B 全部接低电平C 只需一个接地即可D 只需一个接高电平即可4、逻辑函F (ABC )=A ⋅B +AC 的最小项标准式为[ ]。

A F(ABC)= ∑(0,1,4,6)B F(ABC)= ∑(2,3,5,7)C F(ABC)= ∑(2,6,7)D F(ABC)= ∑(0,1,4,6)5、与AB+AC+B ⋅C 相等的表达式为[ ]。

A ACB ABC AB+ACD A+ B ⋅C6、函数F=(A B +C)(B+ACD )的对偶式函数表达式是[ ]。

A G=( A +B)·C +B ·A +C +DB G=A+B C+B·A +C +DC G=(A+B )·C+B·A +C +DD G=(A B )·C +(B+ A +C +D )7、逻辑函数A B C D 的逻辑相邻项是[ ]。

西电数据结构大作业

西电数据结构大作业

题目:数据结构上机报告学院:电子工程学院专业:信息对抗技术学生姓名:甘佳霖学号:14020310092西安电子科技大学数据结构课程实验报告实验名称线性表电子工程学院 1402031 班Array姓名甘佳霖学号 14020310092同作者实验日期 2017 年 3 月 18 日实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验要求1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。

三、设计思路1.顺序表做逆置操作时将对应的首尾元素位置交换,单链表的指针end指向链表的末尾,指针start指向链表头结点,指针s用来找到指向end节点的节点,将指向链表末尾和头结点的存储内容交换,然后头结点指针指向下一节点,s指针从start节点开始遍历寻找指向end 指针的节点,并将end指针赋值为s指针,就完成了单链表的逆置,可以看出单链表和顺序表都可以完成线性表的逆置。

2.分解单链表的实现思路是首先新建3个循环链表,然后顺序遍历单链表,ASCII码判断链表中的元素属于哪一类元素,然后将这个元素添加到对应的循环链表中,从而实现分解单链表的功能。

四、运行结果1.单链表逆置:顺序表逆置:2.分解单链表五、实验总结线性表和单链表是最简单的、最常用的数据结构类型,是实现其他数据结构的基础,熟悉对它们的操作有助于后面对数据结构课程的学习和理解。

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

数电大作业 学院: 电子工程学院 选题一:交通灯 一、 设计要求 为了确保十字路口的车辆顺利畅通地行驶,往往都采用自动控制的交通信号灯来进行指挥。其中红灯亮,表示该条道路禁止通行;黄灯亮表示暂时的停车,等待信号;绿灯亮表示可以通行。 1.设计一个十字路口交通信号灯控制器,其要求如下: 设南北方向的红、黄、绿灯分别为r,y,g;东西方向的红、黄、绿灯分别为R,Y,G,满足图1 的工作流程并且可以并行工作:g(R)→r(G),黄灯用于提示绿灯变为红灯或者绿灯变为红灯。 2.满足两个方向的工作时序:其中令东西方向为主干道方向,绿灯亮30秒,红灯亮20秒,黄灯5秒;南北方向为支线,绿灯20秒,红灯30秒,黄灯5秒。 3.十字路口要有数字显示装置(数码管),作为时间提示,以便人们更直观地把握时间。

二、方案 1、总体设计方案 分析系统的逻辑功能需求后,交通灯控制系统将主要由以下几个部分构成:定时脉冲发生器、状态机、控制器、译码器、延时器、彩灯。定时脉冲发生器发出以1S为单位的定时脉冲,状态机控制交通灯红、绿、黄状态的变化,而控制器将控制数码管的倒计时,并将对状态机进行反馈。延时器、译码器与交通彩灯将由状态机的输出信号进行相应的信号灯变化。总体设计框图如下:

2、定时脉冲发生器设计 为实现倒计时功能,可由555芯片设计一个1S为周期,50%占空比的脉冲电路,以控制控制器的时钟。

3、状态机设计 将图一的四个状态分别以00、01、11、10表示,则可用双D触发器构成一个简单的状态机

控制器 状态机 延时、译码 主干道交通灯 定时脉冲发生器

支线交通灯 状态转移 置数 状态 主干道 支线 Q1 Q2 r y g R Y G 0 0 20 20 0 1 5 5 1 1 30 30 1 0 5 5 列出状态机的真值表如下: No: Q1n Q2n Q1n+1 Q2n+1 1 0 0 0 1 2 0 1 1 1 3 1 1 1 0 4 1 0 0 0 经过化简得:Q2n+1=Q1n, Q1n+1=Q2n,由一片7474可以实现。

4、控制器设计 控制器主要实现倒计时功能,但普通计数器只有正向计数功能,固在计数输出端加上非门就能实现倒数计数。 输入信号 输出信号 输出信号反相 计时值 状态(编码) Q1 Q2 高位计数器 D7-D4 低位计数器 D3-D0 高位计数器 低位计数器

00 20秒倒计时 1110 0110 0001 1001 19 „„ „„ „„ „„ „„ 1110 1111 0001 0000 10 1111 0110 0000 1001 9 „„ „„ „„ „„ „„ 1111 1111 0000 0000 0 01 5秒倒计时 1111 1011 0000 0100 4 1111 1100 0000 0011 3 „„ „„ „„ „„ „„ 1111 1111 0000 0000 0 11 30秒倒计时 1101 0110 0010 1001 29 1101 0111 0010 1000 28 „„ „„ „„ „„ „„ 1110 1111 0001 0000 10 1111 0110 0000 1001 9 „„ „„ „„ „„ „„ 1111 1111 0000 0000 0 10 5秒倒计时 1111 1011 0000 0100 4 1111 1100 0000 0011 3 „„ „„ „„ „„ „„ 1110 1111 0001 0000 0 经过分析上表,其中每个状态的初始值都可由状态机的输出状态进行置数。 状态 高位片置数 低位片置数 Q1 Q2 D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 再由上表化简,得D7=D6=D1=1 、D0=D3=D2=Q1⊕Q2、D4=Q1+Q2 、 D5=Q1与非Q2 。

5、延时、译码、及信号灯设计 信号灯同样可由状态机的输出信号控制,其中用“1”表示灯亮,“0”表示灯灭,易得下表: 状态 主干道 支线

Q1 Q2 r y g R Y G 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 由上表,r=G、y=Y、g=R,其中r、g可由139译码器控制,而y、Y,则可由译码器的两个输出脚经过或门得到。 但是,为了实现在29、04、19秒变灯还必须在状态机与译码器之间加上一个延时器,当变灯信号到达后,延时一秒,再经由译码器控制信号灯变化,而这同样也可以由一个双D触发器实现。

三、设计实现 1、定时脉冲发生器硬件设计 2、状态机设计 状态机的触发时钟由两片控制器的进位RCO1与RCO2经过一个或门得到,即高低位片同时到达“0”时,触发状态机进入下一状态。

双D触发器实现状态机 3、控制器设计 由计算结果,可得控制器硬件电路,其中高低位片的置数都由状态机控制,当计数片倒数到达“0”后产生RCO,拉低LD电位,使置数。高低计数片的输出端连接48后控制数码管。另外,为了消除电路刚启动时的乱码,可在计数片的输出端上接一个四线与非门,当电路启动,并且低位片显示出“F”时,同样也实现置数功能。 4、延时器及信号灯设计 上图中延时器的CLK是状态机的CLK去非,即先将Q1、Q2储存在延时器中,当状态机发生状态转移的下一秒,再将Q1、Q2输出至译码器。

5、总电路图(仿真结果) 选题二:智能数字钟 一、设计要求 1、显示时、分、秒。 2、24小时制。 3、具有校时功能,可以对小时和分单独校时,对分校时的时候,停止分向小时进位。校时时钟源可以手动输入或借用电路中的时钟。 4、为了保证计时准确、稳定,由晶体振荡器提供标准时间的基准信号。 二、方案

1、4060构成脉冲发生及分频电路

4060BP_5VO122

O133

RTC10O37MR12RS11

O45

O54

O66

O714

O813

O915

O111

CTC9

R145-32.768kHz

10MΩ0.5%

30pF30pF

2Hz输出

2、74LS47构成译码驱动电路 5V

ABCDEFGCA100¦¸0.5%

74LS47仿真电路74LS47NA7B1C2D6OA13OD10OE9

OF15OC11OB12OG14~LT3

~RBI5

~BI/RBO4

GND8

VCC16 3、74390构成十进制计数器 U2

ABCDEFGCA

R1100¦¸

0.5%

U174LS47NA7B1C2D6OA13OD10OE9OF15OC11OB12OG14~LT3~RBI5~BI/RBO4GND8VCC16U3A74HC390N_6V1QA31QB51QC61QD71INA11INB4

1CLR2V1

20 Hz 5 V

VCC5V

74390 构成十进制计数器 4、74390构成六进制计数器

U2

ABCDEFGCA

R1100Ω

0.5%

U174LS47NA7B1C2D6OA13OD10OE9OF15OC11OB12OG14~LT3~RBI5~BI/RBO4GND8VCC16U3A74HC390N_6V1QA31QB51QC61QD71INA11INB4

1CLR2V1

20 Hz 5 V

VCC5V

74390构成六进制计数器U4A74LS00DU4B

74LS00D 5、74390构成六十进制计数器 U2ABCDEFGCA

R1100Ω

0.5%

U174LS47NA7B1C2D6OA13OD10OE9OF15OC11OB12OG14~LT3~RBI5~BI/RBO4GND8VCC16U3A74HC390N_6V1QA31QB51QC61QD71INA11INB4

1CLR2V1

200 Hz 5 V

VCC5V

U4ABCDEFGCA

R2100Ω

0.5%

U574LS47NA7B1C2D6OA13OD10OE9OF15OC11OB12OG14~LT3~RBI5~BI/RBO4GND8VCC16U6A74HC390N_6V1QA31QB51QC61QD71INA11INB4

1CLR2

VCC5VU7A74LS00DU7B

74LS00D

74390构成六十进制计数器 6、74390构成二十四进制计数器

U2ABCDEFGCA

R1100¦¸

0.5%

U174LS47NA7B1C2D6OA13OD10OE9OF15OC11OB12OG14~LT3~RBI5~BI/RBO4GND8VCC16U3A74HC390N_6V1QA31QB51QC61QD71INA11INB4

1CLR2V1

200 Hz 5 V

VCC5V

U4ABCDEFGCA

R2100¦¸

0.5%

U574LS47NA7B1C2D6OA13OD10OE9OF15OC11OB12OG14~LT3~RBI5~BI/RBO4GND8VCC16U6A74HC390N_6V1QA31QB51QC61QD71INA11INB4

1CLR2

VCC5VU7A74LS00DU7B

74LS00D

74390构成二十四进制计数器

C16.2uFR3

1kΩ0.5%

相关文档
最新文档