文档库 最新最全的文档下载
当前位置:文档库 › AXIS总线时序及Vivado仿真中信号输入参考代码

AXIS总线时序及Vivado仿真中信号输入参考代码

AXIS总线时序及Vivado仿真中信号输入参考代码
AXIS总线时序及Vivado仿真中信号输入参考代码

在该Testbench编辑过程中,通过计数器及状态机,按照AXIS总线格式给输入端口相应的数据及控制信号。

FFT输入端口配置及数据输入时序如上图所示,复位信号至少保持2个时钟的低电平,在s_axis_config_tready为高电平‘1’后,才能进行配置使能s_axis_config_tvalid和配置参数输入s_axis_config_tdata。在s_axis_data_tready为高电平‘1’后,才能给输入数据只是信号s_axis_data_tvalid,s_axis_data_tlast及数据信号s_axis_data_tdata。

直接放代码,然后说明使用注意事项。

`timescale 1ns / 1ps

module tb_fft_ifft;

reg aclk;

reg aresetn;

reg [31:0] s_axis_config_tdata;

reg s_axis_config_tvalid;

wire s_axis_config_tready;

reg [31:0] s_axis_data_tdata;

reg s_axis_data_tvalid;

reg s_axis_data_tlast;

wire [31:0] m_axis_data_tdata_ifft;

wire [23:0] m_axis_data_tuser_ifft;

wire m_axis_data_tvalid_ifft;

wire m_axis_data_tlast_ifft;

//integer inputfile1;

//integer inputfile2;

reg [15:0] data_i[28671:0];

reg [15:0] data_q[28671:0];

reg [31:0] data_sin[28671:0];

integer outputfile1;

integer outputfile2;

initial begin

//inputfile1 = $fopen("E:/vivado_prj/ifft_fft/ifft_fft.srcs/sources_1/imports/new/data_i_rmcp_b.txt","r");

//inputfile2 = $fopen("E:/vivado_prj/ifft_fft/ifft_fft.srcs/sources_1/imports/new/data_q_rmcp_b.txt","r");

$readmemb("E:/vivado_prj/fft_ifft_scaled/fft_ifft_scaled.srcs/sources_1/imports/new/data_i_rmcp_b.txt",data_i,0,28671);

$readmemb("E:/vivado_prj/fft_ifft_scaled/fft_ifft_scaled.srcs/sources_1/imports/new/data_q_rmcp_b.txt",data_q,0,28671);

$readmemb("E:/vivado_prj/fft_ifft_scaled/fft_ifft_scaled.srcs/sources_1/imports/new/data_sin.txt",data_sin,0,28671);

//$fclose(inputfile1);

//$fclose(inputfile2);

end

initial begin

outputfile1 = $fopen("fft_out.txt","w");

outputfile2 = $fopen("ifft_out.txt","w");

end

always@(posedge aclk)

begin

if(uut.m_axis_data_tvalid)

$fwrite(outputfile1,"%b\n",uut.m_axis_data_tdata); end

always@(posedge aclk)

begin

if(uut.m_axis_data_tvalid_ifft)

$fwrite(outputfile2,"%b\n",uut.m_axis_data_tdata_ifft); end

fft_ifft uut(

.aclk(aclk),

.aresetn(aresetn),

.s_axis_config_tdata(s_axis_config_tdata),

.s_axis_config_tvalid(s_axis_config_tvalid),

.s_axis_config_tready(s_axis_config_tready),

.s_axis_data_tdata(s_axis_data_tdata),

.s_axis_data_tvalid(s_axis_data_tvalid),

.s_axis_data_tlast(s_axis_data_tlast),

.m_axis_data_tdata_ifft(m_axis_data_tdata_ifft),

.m_axis_data_tuser_ifft(m_axis_data_tuser_ifft),

.m_axis_data_tvalid_ifft(m_axis_data_tvalid_ifft),

.m_axis_data_tlast_ifft(m_axis_data_tlast_ifft)

);

initial begin

aclk = 0;

aresetn = 0;

s_axis_config_tdata = 32'h00450000;

#100

aresetn = 1;

end

always #3.2 aclk = ~ aclk;

parameter state_idle = 0;

parameter state_config = 1;

parameter state_sym = 2;

parameter state_waiting = 3;

parameter state_end = 4;

reg [2:0] curr_state,next_state;

reg [31:0] cnt_subcarrier;

reg [31:0] cnt_waiting;

reg [31:0] cnt_sym;

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

curr_state <= state_idle;

else

curr_state <= next_state;

end

begin

if(!aresetn)

next_state = state_idle;

else

begin

case(curr_state)

state_idle:begin

if(s_axis_config_tready)

next_state = state_config;

else

next_state = state_idle;

end

state_config:begin

next_state = state_sym;

end

state_sym:begin

if(cnt_subcarrier == 32'd2047)

next_state = state_waiting;

else

next_state = state_sym;

end

state_waiting:begin

if(cnt_waiting == 32'd1024)

begin

if(cnt_sym == 32'd14)

next_state = state_end;

else

next_state = state_sym;

end

else

next_state = state_waiting;

end

state_end:begin

next_state = state_end;

end

endcase

end

end

//cnt_subcarrier

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

cnt_subcarrier <= 32'b0;

else

begin

if(curr_state == state_sym)

begin

cnt_subcarrier <= cnt_subcarrier + 32'd1;

end

else

cnt_subcarrier <= 32'd0;

end

end

//cnt_waiting

always@(posedge aclk or negedge aresetn)

begin

cnt_waiting <= 32'd0;

else

begin

if(curr_state == state_waiting)

cnt_waiting <= cnt_waiting + 32'd1;

else

cnt_waiting <= 32'd0;

end

end

//cnt_sym

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

cnt_sym <= 32'd0;

else

begin

if(curr_state == state_sym && next_state == state_waiting)

cnt_sym <= cnt_sym + 32'd1;

else

cnt_sym <= cnt_sym;

end

end

//output

//s_axis_config_tvalid

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

s_axis_config_tvalid <= 1'b0;

else

begin

if(curr_state == state_config)

s_axis_config_tvalid <= 1'b1;

else

s_axis_config_tvalid <= 1'b0;

end

end

//s_axis_data_tdata

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

s_axis_data_tdata <= 32'b0;

else

begin

if(curr_state == state_sym)

//s_axis_data_tdata <= data_sin[cnt_sym*2048+cnt_subcarrier];

s_axis_data_tdata <= {data_i[cnt_sym*2048+cnt_subcarrier],data_q[cnt_sym*2048+cnt_subcarrier]};

else

s_axis_data_tdata <= s_axis_data_tdata;

end

end

//s_axis_data_tvalid

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

s_axis_data_tvalid <= 1'b0;

else

begin

if(curr_state == state_sym)

s_axis_data_tvalid <= 1'b1;

else

s_axis_data_tvalid <= 1'b0;

end

end

//s_axis_data_tlast

always@(posedge aclk or negedge aresetn)

begin

if(!aresetn)

s_axis_data_tlast <= 1'b0;

else

begin

if(curr_state == state_sym && cnt_subcarrier == 32'd2047)

s_axis_data_tlast <= 1'b1;

else

s_axis_data_tlast <= 1'b0;

end

end

endmodule

首先Vivado在生成Testbench文件的时候,不会像ISE那样帮助例化好顶层模块,直接添加测试激励。自己需要完成之前的工作,一方面自己熟悉了Testbench文件编辑,但是也带来了很多麻烦,如果端口很多,增加了一部分工作量。

手机网络游戏 服务器端配置 客户端发布与运行 配置源程序

手机网络游戏使用说明书 配置源程序 发布与运行 1.服务器端配置 (1)将光盘\TM\10\XiangQiServer文件夹拷贝到Eclipse的工作空间中。 (2)启动Eclipse。 (3)选择“文件”/“导入”菜单项,展开“常规”节点,选择“现有项目到工作空间中”子节点,如图1.1所示。 图1.1 “导入”窗口 (4)单击【下一步】按钮,单击【浏览】按钮,选择程序所在目录,然后勾选“将项目复制到工作空间中”复选框,如图1.2所示。

图1.2 “导入”窗口 (5)单击【完成】按钮。 (7)参照第7章文档中的7.3.5节中的第5小节,为MyEclipse配置Tomcat服务器。 (8)单击工具栏的“”按钮,将弹出如图1.3所示的对话框。这个对话框是项目发布对话框,在对话框的“Project”下拉选择框中选择本系统的项目名称“XiangQiServer”,单击Add按钮进行项目发布的设置。 图1.3 MyEclipse项目发布对话框 (9)在弹出如图1.4所示的对话框中,选择“Server”下拉选择框中的“Tomcat 5”服务器,单击“完成”按钮程序将自动发布到服务器中。如果需要重新发布项目,可以单击Redeploy按钮。

图1.4 New Deployment (10)单击工具栏中按钮右侧的小箭头,在弹出的菜单中选择“Tomcat 5”/“Start”菜单项,如图1.5所示。这样可以在MyEclipse中启动Web服务器。 图1.5 服务器运行菜单 2.客户端发布与运行 (1)将光盘\TM\10\xiangqi文件夹拷贝到Eclipse的工作空间中。 (2)启动Eclipse。 (3)选择“文件”/“导入”菜单项,展开“常规”节点,选择“现有项目到工作空间中”子节点,如图1.6所示。 图1.6 “导入”窗口 (4)单击【下一步】按钮,单击【浏览】按钮,选择程序所在目录,然后勾选“将项目复制到工作空间中”复选框,如图1.7所示。

eclipse+AXIS开发webservice教学内容

e c l i p s e+A X I S开发 w e b s e r v i c e

一、准备工作。 1、首先下载eclipse用于开发WebService的相关插件。 该插件在eclipse站点有下。我下的是包含该插件的全套eclipse的SDK:wtp-all-in-one-sdk-R-1.5.2-200610261841-win32.zip 共210兆多。 A、解压该文件; B、安装自己插件,把插件用LINK目录建立关联。(如:TOMCAT等) C、配置好自己的eclipse,这个不用多说了。 2、下载TOMCAT。我用的是TOMCAT5.0.16。 3、下载最新的AXIS。这非常重要。我以前就是因为使用了旧版的AXIS (AXIS1。1),最后导致生成的WEBSERVICE调用程序编译失败。现在我使用AXIS1。4 A、解压AXIS,把axis-1_4\webapps\axis\WEB-INF\lib中的文件复制到$TOMCATHOME$\common\lib中。 二、开始开发WEBSERVICE。 1、首先NEW 一个 PROJECT。 WEB-》动态WEB PROJECT。

2、改变项目的输出路径为:项目名称/WebContent/WEB-INF/classes 原来的为:项目名称/BUILD 这样发布WEB 服务比较方便。 3、建立一个用于发布WEB服务的JAVA类。 public class HelloBean {

public String sayHello(String name){ return"hello:"+name; } } 4、发布该类为WEB服务。 右击HelloBean.java->web services->create web services 将左边筐拉到最上边(Test service)。(以后可以立即测试该web services)

tomcat8配置HTTPS,简单webservice客户端调用

Tomat8配置HTTPS 一.环境: Jdk1.8 Tomcat8.0.22 二.步骤: 1,创建证书: 首先建立目录,例如:d:/keys 然后利用jdk的keytool工具生成证书 d:\keys>keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey.keystore

具体的输入项图片中都有说明,有一点我要解释一下;在输入完密码后提示输入域名是我输入的是https://www.wendangku.net/doc/6b9054633.html,,其实这个域名是不存在的,但是我为了演示所以虚拟了这个域名,技巧在于修改 C:\Windows\System32\drivers\etc\hosts 添加内容如下: 127.0.0.1 https://www.wendangku.net/doc/6b9054633.html, 这样在访问https://www.wendangku.net/doc/6b9054633.html,的时候其实是访问的127.0.0.1也就是本机 严重提醒:提示输入域名的时候不能输入IP地址 2,导出证书: d:\keys>keytool -export -file d:/keys/wsria.crt -alias wsria -keystore d:/keys/wsriakey.keystore

3,为客户端的JVM导入证书(目前没觉得这步有什么用)d:\keys>keytool -import -alias kk -keystore "D:\Program Files\Java\jdk1.8.0_45\jre\lib\security\cacerts" -file D:/keys/wsria.crt 此处输入的口令是:changeit 4、应用证书到Web服务器-Tomcat 打开tomcat目录的conf/server.xml文件,开启83和87行的注释代码,并设置keystoreFile、keystorePass修改结果如下:注意大小写

Java以webservice方式调用SAP接口传输数据

Java以webservice方式调用SAP接口传输数据,在SAP中生成 会计凭证/冲销会计凭证 1.生成会计凭证(已完成) 2.冲销会计凭证(以下教程截图以该接口为例) Java调用sap的webservie接口,即SAP作为webservice的服务端,java程序作为调用webservice服务的客户端。 1.获取SAP的webservice服务端接口的描述文件-WSDL文件; 2.在apache的axis项目官方网站上下载axis代码工具包 3.通过axis代码工具包和拿到的接口的WSDL文件,生成java的webservice客户端代 码 新建windows的批处理文件,内容如下 set Axis_Lib=D:\axis-1_4\lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Output_Path=D:\axis-1_4\server %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% D:\axis-1_4\BC_FIDocCreate_Sender_SI_FIDocRev_OB.wsdl @pause 将该批处理文件存储,然后在命令行窗口运行

在D:\axis-1_4下生成了server目录,里面就是生成的客户端代码 4.在MyEclipse中新建java web工程(??此处不是很确定,应该java工程也可以,在java web工程中也是直接通过main函数run的),将生成的webservice客户端代码导入,注意修改对应的HTTP和HTTPS地址,调用客户端请求数据参考附件打包的java工程代码 Build Path设置,lib目录里面有很多jar包,实际该工程用到的没几个,如下图

时序计算和Cadence 仿真结果的运用

时序计算和Cadence仿真结果的运用 中兴通讯康讯研究所EDA设计部余昌盛刘忠亮 摘要:本文通过对源同步时序公式的推导,结合对SPECCTRAQuest时序仿真方法的分析,推导出了使用SPECCTRAQuest进行时序仿真时的计算公式,并对公式的使用进行了说明。 关键词:时序仿真源同步时序电路时序公式 一.前言 通常我们在时序仿真中,首先通过时序计算公式得到数据信号与时钟信号的理论关系,在Cadence仿真中,我们也获得了一系列的仿真结果,怎样把仿真结果正确的运用到公式中,仿真结果的具体含义是什么,是我们正确使用Cadence仿真工具的关键。下面对时序计算公式和仿真结果进行详细分析。 二.时序关系的计算 电路设计中的时序计算,就是根据信号驱动器件的输出信号与时钟的关系(Tco——时钟到数据输出有效时间)和信号与时钟在PCB上的传输时间(Tflytime)同时考虑信号驱动的负载效应、时钟的抖动(Tjitter)、共同时钟的相位偏移(Tskew)等,从而在接收端满足接收器件的建立时间(Tsetup)和保持时间(Thold)要求。通过这些参数,我们可以推导出满足建立时间和保持时间的计算公式。 时序电路根据时钟的同步方式的不同,通常分为源同步时序电路(Source-synchronous timing)和共同时钟同步电路(common-clock timing)。这两者在时序分析方法上是类似的,下面以源同步电路来说明。 源同步时序电路也就是同步时钟由发送数据或接收数据的芯片提供。图1中,时钟信号是由CPU驱动到SDRAM方向的单向时钟,数据线Data是双向的。 图1

图2是信号由CPU 向SDRAM 驱动时的时序图,也就是数据与时钟的传输方向相同时 的情况。 Tsetup ’ Thold ’ CPU CLK OUT SDRAM CLK IN CPU Signals OUT SDRAM Signals IN Tco_min Tco_max T ft_clk T ft_data T cycle SDRAM ’S inputs Setup time SDRAM ’S inputs Hold time 图2 图中参数解释如下: ■ Tft_clk :时钟信号在PCB 板上的传输时间; ■ Tft_data :数据信号在PCB 板上的传输时间; ■ Tcycle :时钟周期 ■ Tsetup’:数据到达接收缓冲器端口时实际的建立时间; ■ Thold’:数据到达接收缓冲器端口时实际的保持时间; ■ Tco_max/Tco_min :时钟到数据的输出有效时间。 由图2的时序图,我们可以推导出,为了满足接收芯片的Tsetup 和Thold 时序要求,即 Tsetup’>Tsetup 和Thold’>Thold ,所以Tft_clk 和Tft_data 应满足如下等式: Tft_data_min > Thold – Tco_min + Tft_clk (公式1) Tft_data_max < Tcycle - Tsetup – Tco_max + Tft_clk (公式2) 当信号与时钟传输方向相反时,也就是图1中数据由SDRAM 向CPU 芯片驱动时,可 以推导出类似的公式: Tft_data_min > Thold – Tco_min - Tft_clk (公式3) Tft_data_max < Tcycle - Tsetup – Tco_max - Tft_clk (公式4) 如果我们把时钟的传输延时Tft_clk 看成是一个带符号的数,当时钟的驱动方向与数据 驱动方向相同时,定义Tft_clk 为正数,当时钟驱动方向与数据驱动方向相反时,定义Tft_clk 为负数,则公式3和公式4可以统一到公式1和公式2中。 三.Cadence 的时序仿真 在上面推导出了时序的计算公式, 在公式中用到了器件手册中的Tco 参数,器件手册中Tco 参数的获得,实际上是在某一种测试条件下的测量值,而在实际使用上,驱动器的实际 负载并不是手册上给出的负载条件,因此,我们有必要使用一种工具仿真在实际负载条件下 的信号延时。Cadence 提供了这种工具,它通过仿真提供了实际负载条件下和测试负载条件 下的延时相对值。 我们先来回顾一下CADENCE 的仿真报告形式。仿真报告中涉及到三个参数:FTSmode 、

webservice四种发布方式及客户端调用

WebService 四种发布方式总结 Author:yczhang 1.CXF方式 CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6.1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6.2.jar”报错,报的错为:https://www.wendangku.net/doc/6b9054633.html,ng.IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。该问题在此处做个记录,以后使用cxf与was的时候需要注意!!! 使用cxf+spring搭建WebService: 第一步,添加jar包。此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包: 而泰康的was环境则需要如下jar包:

明显的多了很多,原因应该是服务器jar包池的不同。根据错误提示缺什么补什么就可以了,注意jar包勿重复。 第二步,配置web.xml文件,如下(重要的地方已标记): contextConfigLocation classpath:/applicationContext.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFil ter encoding UTF-8 encodingFilter /* CXFServlet org.apache.cxf.transport.servlet.CXFServlet 1 CXFServlet /webservice/* 上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;

客户端程序源代码

#include #include #include #include #include #define rec_length 20 main(int argc, char **argv ) { // structure defined for request as a client struct hostent *hp1; struct sockaddr_in sin1; struct servent *sp1; char sbuf[50]; int ss,spid; char *sservice,*sdest; // structure defined for request as a server struct sockaddr_in sin; struct servent *sp; int s,ns,pid; char buf[50]; char *service; // test the environment parameter: lservice, dservice, server_name if(argc==4){ service=argv[1];sservice=argv[2]; sdest=argv[3];} else { fprintf(stderr,"Parameter assigned Error!\nUsage:\n"); fprintf(stderr,"\t%s lservice dservice server_name!\n",argv[0]); fprintf(stderr,"Note: server_name is defined in file /etc/hosts\n"); fprintf(stderr,"and: lservice dservice are defined in file /etc/services\n"); exit(-1); } if((sp=getservbyname(service,"tcp"))==NULL){ fprintf(stderr,"Error: getservbyname"); exit(-5); } if((s=socket(AF_INET,SOCK_STREAM,0))==-1){ fprintf(stderr,"Error: socket create"); exit(-6); } bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port; if(bind(s,&sin,sizeof(sin))==-1){ fprintf(stderr,"Error: bind"); close(s); exit(-6); }

Axis2从入门到精通--Webservice在eclipse下开发教程

Axis2 教程 文章分类:Java编程 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。这些都将在后面的系列教程中讲解。在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java和C#调用这个WebService。 一、Axis2的下载和安装 读者可以从如下的网址下载Axis2的最新版本: https://www.wendangku.net/doc/6b9054633.html,/axis2/ 在本文使用了目前Axis2的最新版本1.4.1。读者可以下载如下两个zip包: axis2-1.4.1-bin.zip axis2-1.4.1-war.zip 其中axis2-1.4.1-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.4.1-war.zip文件用于将WebService发布到Web容器中。 将axis2-1.4.1-war.zip文件解压到相应的目录,将目录中的axis2.war 文件放到\webapps目录中(本文使用的Tomcat的版本是 6.x),并启动Tomcat。 在浏览器地址栏中输入如下的URL: http://localhost:8080/axis2/ 如果在浏览器中显示出如图1所示的页面,则表示Axis2安装成功。 图1

二、编写和发布WebService 对于用Java实现的服务程序给人的印象就是需要进行大量的配置,不过这一点在Axis2中将被终结。在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。 下面我们来实现一个简单的POJO,代码如下: public class SimpleService { public String getGreeting(String name) { return "你好 " + name; } public int getPrice() { return new java.util.Random().nextInt(1000); } }

人脸识别程序源代码

1.利用OpenCV进行人脸检测 人脸检测程序主要完成3部分功能,即加载分类器、加载待检测图象以及检测并标示。本程序使用OpenCV中提供的“haarcascade_frontalface_alt.xml”文件存储的目标检测分类,用cvLoad函数载入后,进行强制类型转换。OpenCV中提供的用于检测图像中目标的函数是cvHaarDetectObjects,该函数使用指针对某目标物体(如人脸)训练的级联分类器在图象中找到包含目标物体的矩形区域,并将这些区域作为一序列的矩形框返回。分类器在使用后需要被显式释放,所用的函数为cvReleaseHaarClassifierCascade。这些函数原型请参看有关OpenCV手册。 2.程序实现 1)新建一个Visual C++ MFC项目,取名为“FaceDetection”,选择应用程序类型为“单文档”。将菜单中多余的项去掉,并添加一项“人脸检测”,其ID为“ID_FaceDetected”,并生成该菜单项的消息映射函数。 2)在“FaceDetectionView.h”头文件中添加以下灰底色部分程序代码:

3)在“FaceDetectionView.cpp”文件中添加以下灰底色部分程序代码:

需要注意的是,本程序运行时应将分类器文件置于程序目录下,如果运行的是生成的E XE文件,则应将分类器文件与该EXE文件放在同一个目录下。 三、程序运行结果 运行该程序,选择人脸检测菜单项,弹出文件打开对话框,选择要检测的图像文件,程序就会将检测到的人脸用圆圈标示出来,如图3所示。本程序能顺利检测出大部分人脸,但由于光照、遮挡和倾斜等原因,部分人脸不能正确检测,另外,也有一些非人脸部分由于具有人脸的某些特征,也被当成了人脸,这些都是本程序需要改进的部分。

北斗卫星导航信号串行捕获算法MATLAB仿真报告(附MATLAB程序)

北斗卫星导航信号串行捕获算法MATLAB仿真报告 一、原理 卫星导航信号的串行捕获算法如图1所示。 图1 卫星导航信号的串行捕获算法 接收机始终在本地不停地产生对应某特定卫星的本地伪码,并且接收机知道产生的伪码的相位,这个伪码按一定速率抽样后与接收的GPS中频信号相乘,然后再与同样知晓频率的本地产生的载波相乘。GPS中频信号由接收机的射频前端将接收到的高频信号下边频得到。实际产生对应相位相互正交的两个本地载波,分别称为同相载波和正交载波,信号与本地载波相乘后的信号分别成为,产生同相I支路信号和正交的Q 支路信号。 两支路信号分别经过一个码周期时间的积分后,平方相加。分成两路是因为C/A码调制和P码支路正交的支路上,假设是I支路。当然由于信号传输过程中引入了相位差,解调时的I支路不一定是调制时的I支路,Q支路也一样,二者不一定一一对应,因此为了确定是否检测到接收信号,需要同时对两支路信号进行研究。相关后的积分是为了获取所有相关数据长度的值的相加结果,平方则是为了获得信号的功率。最后将两个支路的功率相加,只有当本地伪码和本地载波的频率相位都与中频信号相同时,最后得到的功率才很大,否则结果近似为零。根据这个结论考虑到噪声的干扰,在实际设计时应该设定一个判定门限,当两路信号功率和大于设定的门限时则判定为捕获成功,转入跟踪过程,否则继续扫描

其它的频率或相位。 二、MATLAB仿真过程及结果 仿真条件设置:抽样频率16MHz,中频5MHz,采样时间1ms, 频率搜索步进1khz,相位搜索步进1chip,信号功率-200dBW,载 噪比55dB (1)中频信号产生 卫星导航信号采用数字nco的方式产生,如图2所示。 载波nco控制字为:carrier_nco_word=round(f_carrier*2^N/fs); 伪码nco控制字为:code_nco_word=round(f_code*2^N/fs); 图 2 其中载波rom存储的是正弦信号的2^12个采样点,伪码rom存储长度为2046的卫星伪码。这样伪码采用2psk的方式调制到射频,加性噪声很小是理想接收中频信号如图3所示。 -10 图3 理想中频信号 (2)噪声功率估计 实际接收机接收到的导航信号淹没在噪声中,本程序对接收到的信号进行了

c#.net动态调用webservice的三种方式

多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我们可能需要在程序运行期间动态调用一个未知的服务。在 .NET Framework 的命名空间中有我们需要的东西。 具体步骤: 1. 从目标 URL 下载 WSDL 数据。 2. 使用 ServiceDescription 创建和格式化 WSDL 文档文件。 3. 使用 ServiceDescriptionImporter 创建客户端代理类。 4. 使用 CodeDom 动态创建客户端代理类程序集。 5. 利用反射调用相关 WebService 方法。 上述步骤需要引用如下四个名称空间: using 动态调用 WebService 客户端动态调用代码 using ; using ; using ; using ; using using using using using

使用 WebClient 下载 WSDL 信息。 WebClient web = new WebClient(); Stream stream = (""); 创建和格式化 WSDL 文档。 ServiceDescription description = (stream); 创建客户端代理代理类。 ServiceDescriptionImporter importer = new ServiceDescriptionImporter(); = "Soap"; 使用 CodeDom 编译客户端代理类。 CodeNamespace nmspace = new CodeNamespace(); 使用 Reflection 调用 WebService。if (! { Assembly asm = ; Type t = ("WebService"); 生成客户端代理程序集文件 上面的代码通过在内存中创建动态程序集的方式完成了动态调用过程。如果我们希望将客户端代理类生成程序集文件保存到硬盘,则可以进行如下修改。生成程序集文件后,我们可以通过 () 载入并进行反射调用。对于需要多次调用的系统,要比每次生成动态程序集效率高出很多。 using ; using ; using ; using using

Java_QQ_源程序代码

2010-06-23 20:24:11 TiBack import https://www.wendangku.net/doc/6b9054633.html,.*; import java.io.*; import java.sql.*; import java.util.*; public class QQServer { public static void main(String args[]) { try { //用户名同步(14) HashMap hm = new HashMap() ; // 服务器在8000端口监听(1) ServerSocket ss = new ServerSocket(8000); while (true) { "服务器正在8000端口监听....."); Socket s = ss.accept(); MyService t = new MyService(); t.setSocket(s); t.setHashMap(hm) ; t.start(); } } catch (Exception e) { } } } // 支持多用户登陆(13) class MyService extends Thread { private Socket s; private HashMap hm ; public void setHashMap(HashMap hm) { this.hm = hm ; } public void setSocket(Socket s) { this.s = s; } public void run() { try { // 接收客户端发送来的用户名和密码(2) InputStream is = s.getInputStream();

Modelsim的功能仿真和时序仿真

FPGA 设计流程包括设计输入,仿真,综合,生成,板级验证等很多阶段。在整个设计流程中,完成设计输入并成功进行编译仅能说明设计符合一定的语法规范,并不能说明设计功能的正确性,这时就需要通过仿真对设计进行验证。在FPGA 设计中,仿真一般分为功能仿真(前仿真)和时序仿真(后仿真)。功能仿真又叫逻辑仿真,是指在不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证;而时序仿真是在布局布线后进行,它与特定的器件有关,又包含了器件和布线的延时信息,主要验证程序在目标器件中的时序关系。在有些开发环境中,如Xilinx ISE 中,除了上述的两种基本仿真外,还包括综合后仿真,转换(post-translate)仿真,映射后(post-map)仿真等,这样做完每一步都可进行仿真验证,从而保证设计的正确性。 ModelSim 是Mentor Graphics 子公司MentorTechnology 的产品,是当今最通用的FPGA 仿真器之一。ModelSim 功能强大,它支持FPGA 设计的各个阶段的仿真,不仅支持VHDL 仿真,Verilog仿真,而且支持VHDL 和Verilog 混合仿真。它不仅能做仿真,还能够对程序进行调试,测试代码覆盖率,对波形进行比较等。ModelSim 有很多版本,像ModelSim/SE 是首要版本,除此之外还有ModelSim/XE 和ModelSim/AE,分别是为Xilinx 公司和Altera 公司提供的OEM 版,其中已包含各公司的库文件,故用特定公司OEM 版进行仿真时就不需编译该公司的库了。 用ModelSim 进行功能仿真 进行功能仿真首先要检查设计的语法是否正确;其次检查代码是否达到设计的功能要求。下文主要介绍仿真步骤和测试激励的加载。 仿真步骤 (1)建立库并映射库到物理目录 因为用ModelSim 进行仿真是建立在仿真库的基础上的(此处进行的是功能仿真,因而不用编译特定厂商的库),所以首先要建立库并把库映射到实际的物理路径。通常用户编译的文件都放在work库中,所以必须先建立work 库。有两种方法建立并映射库,第一种方法是通过图形界面,在菜单Design→Create a New Library 弹出对话框,如图1 所示。在Library Name 中输入work,如果建立其它库,可以输入其它名字。Library Map to 是映射的物理路径。第二种方法是用命令行的形式,建立库用ModelSim>vlib<库名>,映射库用ModelSim> vmap ,如建立并映射库work,就可以在ModelSim 主窗口命令提示符下输入 vlib work vmap work work (2)编译源代码 该步骤主要检查源文件的语法错误。实现方法有两种,一是通过菜单Design→Compile,出现选择源文件对话框,选择要编译的源文件,编译即可;二是通过命令行方式,这一步对于VHDL 和Verilog 所使用的命令是不一样的,对于VHDL 代码用vcom-work.vhd.vhd ,

阵列信号处理中DOA算法分类总结(大全)

阵列信号处理中的DOA(窄带) 空域滤波 波束形成:主要研究信号发射/接收过程中的信号增强。 空间谱估计 空域参数估计:从而对目标进行定位/给空域滤波提供空域参数。 测向波达方向估计(DOA) 空间谱:输出功率P关于波达角θ的函数,P(θ). 延迟——相加法/经典波束形成器注,延迟相加法和CBF法本质相同,仅仅是CBF法的最优权向量是归一化了的。

1、传统法常规波束形成CBF/Bartlett波束形成器 常规波束形成(CBF:Conventional Beam Former) Capon最小方差法/Capon 波束形成器/MVDR波束形成器 最小方差无畸变响应(MVDR:minimum variance distortionless response)Root-MUSIC算法

多重信号分类法解相干的MUSIC算法(MUSIC) 基于波束空间的MUSIC算法 2、[object Object]

TAM 旋转不变子空间法 LS-ESPRIT (ESPRIT) TLS-ESPRIT 确定性最大似然法(DML:deterministic ML) 3、最大似然法 随机性最大似然法(SML:stochastic ML)

4、综合法:特性恢复与子空间法相结合的综合法,首先利用特征恢复方案区分多个信号,估计空间特征,进而采用子空间法确定波达方向 最大似然估计法是最优的方法,即便是在信噪比很低的环境下仍然具有良好的性能,但是通常计算量很大。同子空间方法不同的是,最大似然法在原信号为相关信号的情况下也能保持良好的性能。 阵列流形矩阵(导向矢量矩阵)只要确定了阵列各阵元之间的延迟τ,就可以很容易地得出一个特定阵列天线的阵列流形矩阵A。 传统的波达方向估计方法是基于波束形成和零波导引概念的,并没有利用接收信号向量的模型(或信号和噪声的统计特性)。知道阵列流形 A 以后,可以对阵列进行电子导引,利用电子导引可以把波束调整到任意方向上,从而寻找输出功率的峰值。 ①常规波束形成(CBF)法 CBF法,也称延迟—相加法/经典波束形成器法/傅里叶法/Bartlett波束形成法,是最简单的DOA 估计方法之一。这种算法是使波束形成器的输出功率相对于某个信号为最大。 (参考自:阵列信号处理中DOA估计及DBF技术研究_赵娜)注意:理解信号模型

C# .NET 动态调用webservice的三种方式

动态调用webservice的三种方式 多数时候我们通过"添加Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我们可能需要在程序运行期间动态调用一个未知的服务。在.NET Framework 的System.Web.Services.Description 命名空间中有我们需要的东西。 具体步骤: 1. 从目标URL 下载WSDL 数据。 2. 使用ServiceDescription 创建和格式化WSDL 文档文件。 3. 使用ServiceDescriptionImporter 创建客户端代理类。 4. 使用CodeDom 动态创建客户端代理类程序集。 5. 利用反射调用相关WebService 方法。 上述步骤需要引用如下四个名称空间: using System.Web.Services.Description; //WS的描述 //以下几个用于根据描述动态生成代码并动态编译获取程序集 using System.CodeDom; using Microsoft.CSharp; using https://www.wendangku.net/doc/6b9054633.html,piler; 上述几个名称空间中包括如下几个重要的类: using System.Web.Services.Description下: ServiceDescription //WS描述 ServiceDescriptionImporter //通过描述生成客户端代理类,特别注意其中的Style 以下是MSDN对其的描述: XML Web services 的接口通常由Web 服务描述语言(WSDL) 文件来说明。例如,若要获取有关使用http://localhost/service.asmx 处公开的https://www.wendangku.net/doc/6b9054633.html, 的Web 服务的WSDL 说明,只需导航到http://localhost/service.asmx?WSDL。使用ServiceDescriptionImporter 类可以方便地将WSDL 说明中包含的信息导入到System.CodeDom.CodeCompileUnit 对象。通过调整Style 参数的值,可以指示ServiceDescriptionImporter 实例生成客户端代理类(通过透明调用该类可提供Web 服务的功能)或生成抽象类(该类封装Web 服务的功能而不实现该功能)。如果将Style 属性设置为Client,则ServiceDescriptionImporter 生成客户端代理类,通过调用这些类来提供说明的Web 服务的功能。如果将Style 属性设置为Server,则ServiceDescriptionImporter 实例生成抽象类,这些类表示所说明的XML Web services 的功能而不进行实现。然后,可以通过编写从这些抽象类继承的类来对其进行实现,并实现相关的方法。 using System.CodeDom下: CodedomUnit //它用于设定动态代码的名称空间,类名等,可以通过ServiceDescriptionImporter.Import()方法将WS的描述代码写入该类,以作动态编译用using https://www.wendangku.net/doc/6b9054633.html,piler下: CodedomProvider //用于创建和检索代码生成器和代码编译器的实例,我们主要用到其实现子类CShareCodeProvider 可以直接用CShareCodeProvider provider=new CShareCodeProvider()来生成,或者用

1把高级语言写的源程序变为目标程序要经过

模拟题 一、单选题 1.把高级语言写的源程序变为目标程序要经过【 C 】。 A.汇编 B.编辑 C.编译 D.解释 2.微型计算机系统中的中央处理器通常是指【 C 】。 A.内存储器和控制器 B.内存储器和运算器 C.控制器和运算器 D.内存储器、控制器和运算器(构成主机) 3.在计算机中负责指挥和控制计算机各部分自动的、协调一致地进行工作的部件是【 A 】。 A.控制器 B.运算器 C.存储器 D.总线 4.解释程序的功能是【 A 】。 A.解释执行高级语言程序 B.将高级语言程序翻译成目标程序 C.解释执行汇编语言程序 D.将汇编语言程序翻译成目标程序 5.计算机的型号为486,则486是指【 C 】。 速度 B.硬盘容量 C.cpu类型 D.内存大小 6.下列设备中,可以将图片输入到计算机内的设备是【 C 】。 A.绘图仪 B.键盘 C.扫描仪 D.鼠标 7.微机中使用的鼠标器一般连接在计算机主机的_____上【 B 】。 A.并行接口 B.串行接口 C.显示器接口 D.打印机接口 8.以下设备中,只能作为输出设备的是【 B 】。 A.键盘 B.打印机 C.鼠标 D.软盘驱动器 9.光驱的倍数越大【 A 】。 A.数据传输越快 B.纠错能力越强 C.所能读取光盘的容量越大 D.播放VCD效果越好 10.只读光盘的英文缩写是【 D 】。

A.WORM B.MO C.WO D.CD-ROM 11.CPU不能直接访问存储器是。【 D 】 A.ROM B.RAM C.CACHE D.光盘 12.存储器容量1G、1K、1M分别表示2的次方字节。【 B 】 A.10、20、30 B.30、10、20 C.20、30、10 D.30、20、10 13.硬盘工作时,应特别注意避免。【 A 】 A.强烈震动 B.噪声 C.光线直射 D.环境卫生不好 14.软盘的所有磁道中,在最外圈的是道,它是软盘中最重要的磁道。【 A 】 A.0 B.1 C.79 D.80 15.当磁盘设置写保护时,用户磁盘。【 A 】 A.只能读不能写 B.只能写不能读 C.既能读又能写 D.既不能读又不能写 16.控制键的功能是进行键盘输入的大小写转换。【 A 】 A.Caps Lock B.Shift C.Num Lock D.Alt 17.防止软盘感染病毒的有效方法是。【 B 】 A.不要将软盘和有病毒的软盘放在一起 B.将软盘写保护 C.保持机房清洁 D.定期对软盘格式化 18.计算机病毒是一种。【 C 】 A.计算机命令 B.人体病毒 C.计算机程序 D.外部设备 19.若发现某片软盘已经感染病毒,则可。【 D 】 A.将该软盘报废 B.换一台计算机再使用该软盘上的文件 C.将该软盘上的文件拷贝到另一张软盘上使用 D.用消毒软件清除该软盘上的病毒或者在确认无病毒的计算机上格式化该软盘 20.微机系统与外部交换信息主要通过【 A 】。

时序计算和Cadence仿真结果的运用

字体大小: 小中大作者:余昌盛刘忠亮来源:日期:2007-06-25 点击:558 摘要:本文通过对源同步时序公式的推导,结合对SPECCTRAQuest时序仿真方法的分析,推导出了使用SPECCTRAQuest进行时序仿真时的计算公式,并对公式的使用进行了说明。 一、前言 通常我们在时序仿真中,首先通过时序计算公式得到数据信号与时钟信号的理论关系,在cadence仿真中,我们也获得了一系列的仿真结果,怎样把仿真结果正确的运用到公式中,仿真结果的具体含义是什么,是我们正确使用Cadence仿真工具的关键。下面对时序计算公式和仿真结果进行详细分析。 二.时序关系的计算 电路设计中的时序计算,就是根据信号驱动器件的输出信号与时钟的关系(Tco——时钟到数据输出有效时间)和信号与时钟在PCB上的传输时间(Tflytime)同时考虑信号驱动的负载效应、时钟的抖动(Tiitter)、共同时钟的相位偏移(Tskew)等,从而在接收端满足接收器件的建立时间(Tsetup)和保持时间(Thold)要求。通过这些参数,我们可以推导出满足建立时间和保持时间的计算公式。 时序电路根据时钟的同步方式的不同,通常分为源同步时序电路(Source-synchronous timing)和共同时钟同步电路(common-clock timing)。这两者在时序分析方法上是类似的,下面以源同步电路来说明。 源同步时序电路也就是同步时钟由发送数据或接收数据的芯片提供。图1中,时钟信号是由CPU驱动到SDRAM方向的单向时钟,数据线Data是双向的。 图2是信号由CPU向SDRAM驱动时的时序图,也就是数据与时钟的传输方向相同时的情况。

相关文档
相关文档 最新文档