就是通过key_up ,key_dw来设定的,type【】里面的数已经按照不同频率的正弦波,算出不同点的值(用于da转换),用查表的方法来设定频率值(到底要的是哪一个频率值,通过counter的大小选择type里的某一串数送给da来决定)
2. while(1)
{
if(key_up == 0) if(step<4096) step++
if(key_dw == 0) if(step>1) step--
while((!key_up)||(!key_dw))
}
这是什么意思?4096这些是什么意思。。。
key_up ,key_dw 这两个端口应该是接按键了吧,采用查询的方法判断键是否按下,
while((!key_up)||(!key_dw))按键按下后等待按键释放!4069的意思,比如说你要访问一组数组,数组只有10个元素,你能访问第十一个元素吗?去学一下什么是type型的数,就知道为何是4069了。
3.程序看不太懂,急需大致讲解。
单片机和c语言你要是一点也不会,我肯定给你讲不懂的,你要是会的话,多看几遍肯定就会了
希望能帮到你!
#include<reg51.h>
#include<absacc.h> //定义绝对地址访问的头文件
#define dac1 XBYTE[0xdfff] // X 轴0832一级琐存地址
unsigned char code type[256]={ //一堆数,一堆不同频率正弦波的正弦值
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9, 0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,
0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,0xda,0xd8,0xd6,0xd3,
0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,
0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,
0x5b,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4,
0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,
0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,
0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,
0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c}
unsigned char i,j
unsigned int counter,step
sbit key_up = P3^2
sbit key_dw = P3^3//按键定义
//定时器0初始化
void Init_Timer0(void)
{
TMOD = (TMOD &0XF0) | 0X01
TH0 = 0xff
TL0 = 0xff
TR0 =1
ET0 =1
}
main()
{
Init_Timer0()
step=2
EA = 1
while(1) //判断按键
{
if(key_up == 0) if(step<4096) step++
if(key_dw == 0) if(step>1) step--
while((!key_up)||(!key_dw))
}
}
// 系统OS定时中断服务
void OS_Timer0(void) interrupt 1 using 2//定时子程序
{
TH0 = 0xff
TL0 = 0xff
counter = counter + step
dac1=type[(unsigned int)counter>>8] //根据键值,选择某一个频率的正弦波,送入da转换!
}
fc模拟器有好几种,比较常用的有SMYNES ,VirtuaNES ,NESten等等,这个模拟器功能很全。运行流畅,即使是低配置的电脑也照样能运行完美,支持绝大部分FC游戏。软件介绍
说起超级玛丽、魂斗罗、双截龙,我们都不会陌生吧,这多么经典的游戏陪伴我们度过了一段美好的童年时光,不时地把这些游戏再次翻出来玩个通关,感觉的确很过瘾。智能手机上早早就出现了FC游戏的模拟器,当听到旁边手机上发出魂斗罗片头音乐,再看着他那玩游戏投入的样子,不仅羡慕不已
如今,手机上也能玩任天堂游戏了。这是完全JAVA版的!
一款免费的手机java(j2me)平台FC模拟器,可以直接读取存储卡上的nes游戏文件,支持游戏存档;
软件自带一个超级经典的Nes游戏《超级玛丽》;
玩游戏之前先需要进行参数设置,比如按键设置,屏幕设置等等;
按键介绍
软件默认按键设置:
2键:菜单指令向上/角色向上移动
8键:菜单指令向下/角色向下移动
4键:菜单指令向左/角色向左移动
6键:菜单指令向右/角色向右移动
5键:确定/开始/对话/开启宝箱
其它按键(射击、跳跃等)可自己设置;
使用方法
1、下载一个FC的游戏ROM。这里我下载了一个超级玛丽的游戏ROM。
2、将nes文件拷贝到roms目录下。
3、在package.txt中添加ROM的文件名。只添加文件名称,不加.nes,要注意区分大小写和空格,添加完毕后保存,关闭文件。
双击makejar.bat后,会自动生成一个vnes.jar文件。只要将这个文件传到手机上,就可以玩了!
注意事项
使用小帖士:
1、在添加一个超级玛丽游戏(ROM大小为41KB)后,加上该程序自带的一个名为INES Demo的演示程序,最后得到的jar文件为94KB。如果你的手机是JAVA 1.0版的(最大支持64KB),可以找更小一点的游戏ROM,并删除自带的演示程序。
2、删除INES Demo的方法:在roms目录下删除INES Demo.nes文件;在package目录下删除INES Demo.nes文件;在package.txt文件中删除“INES Demo”。删除其他游戏ROM的方法相同。
3、该模拟器在实际的使用中可能会出现程序死锁或无法运行的情况,估计是软件BUG造成的。为避免这种情况,请大家一定要:严格按照 *** 作程序来 *** 作;如果出现以上情况,删除全部文件,重新从压缩包 vNesJ2ME.zip 里解压,再进行 *** 作。
软件截图
5555d228bbe6f72bf89db2a93919ceb3.jpg
538d3a2e9651c221f4d41748c5841aa6.jpg
456ee0261503cfb40366e5bb526a416a.jpg
特别说明
相关资源:使用java模拟nes(小霸王模拟器).zip_java版nes模拟器-其他代码类...
文章知识点与官方知识档案匹配
Java技能树首页概览
92407 人正在系统学习中
打开CSDN APP,看更多技术内容
使用java模拟nes(小霸王模拟器).zip_java版nes模拟器-其他代码类...
nes模拟器java版附源代码 4星 · 用户满意度95% java编写的nes模拟器gui版的,仅供参考,切勿用在非法用途。 java做的fc模拟器源代码 5星 · 资源好评率100% 用java做的fc模拟器源代码,希望能帮到有需要的朋友~ ...
继续访问
javanes游戏模拟器免费下载_javanes模拟器-Java文档类资源-CSDN文库
java nes游戏模拟器免费下载 jar文件 RSEJK上传 d555hjkhkh 2018-02-09 nes模拟器,是个好东西 RSEJK 粉丝: 1 资源:3 前往需求广场,查看用户热搜 上传资源 快速赚钱 我的内容管理收起
继续访问
LiteNESEmulator:FC模拟器Java实现
LiteNESEmulator FC模拟器Java实现 已实现的功能模块 CPU,PPU,APU,内存 手柄输入控制(P1,P2) 6502组装调试器(反汇编),名称表,图案表,精灵等可视化以及内存的转储 游戏的加速模式以及存档与读档 基于xBRZ算法的图像增强 金手指的支持 基于UDP协议的网络联机(包含创建,加入,退出,销毁游戏房间的 *** 作) 已实现的Mapper 映射器0 映射器1 Mapper2 Mapper3 映射器4 映射器163
java fc模拟器
代码不是我写的,希望对对这方面有兴趣的人有些作用。
使用java模拟nes(小霸王模拟器).zip
用java 模拟 nes模拟器(小霸王模拟器) 模拟6502cpu,ppu,apu 实现了mapper4映射 内附魂斗罗rom,代码可能有部分bug,优化没有制作,仅供参考
JSNES:用JavaScript编写的NES模拟器
今天在最不可能的,可能是毫无意义的,但仅仅是惊人的使用JavaScript奖将归本Firshman和他的任天堂娱乐系统模拟器,JSNES。 访问JSNES网页... 该仿真器是基于Java的端口vNES项目。 它使用HTML canvas虽然声音尚不支持屏幕渲染元素(对不起,Internet Explorer用户)。 有17个游戏尝试。 大多数人会在Firefox 3.5或Safari 4...
继续访问
nes模拟器java版_JAVA版手机FC/Nes模拟器vN
说起超级玛丽、魂斗罗、双截龙,我们都不会陌生吧,这多么经典的游戏陪伴我们度过了一段美好的童年时光,不时地把这些游戏再次翻出来玩个通关,感觉的确很过瘾。智能手机上早早就出现了FC游戏的模拟器,当听到旁边手机上发出魂斗罗片头音乐,再看着他那玩游戏投入的样子,不仅羡慕不已。如今,我的手机上也能玩任天堂游戏了。这是完全JAVA版的!一、首先在这里下载该模拟器:下载地址:http://www.51nes.c...
继续访问
nes模拟器java版_【Java JDK和VirtuaNES(FC模拟器)哪个好用】Java JDK和VirtuaNES(FC模拟器)对比-ZOL下载...
fc模拟器virtuanes怎么录像打开游戏,在你想要开始录像的地方点上面的电影→录像(此时选择你想把录像文件放置的位置和文件名),他就开始录了,在你想录的结尾再点电影→停止这个时候,在你选的位置就会出现一个.vmv文件,这是基本的模拟器自带录像,如果你只想用模拟器看录像的话,载入rom,点电影→重放,选择你保存下来的vmv文件,就能在模拟器里直接看你玩过的录像了。但是新版virtuanes还有一...
继续访问
nes模拟器java怎么用_nes 红白机模拟器 第7篇 编译使用方法
模拟器,基于 InfoNES ,作者添加修改以下功能:1, joypad 真实手柄驱动程序(字符型设备驱动)2,原始图像只有256*240 ,添加 图像放大算法,这里实现了2种,a, 最近邻插值 b, 双线性插值(因为2440 速度太慢,采用双线性插值时,大概要3秒算一帧,等以后用 4412 在测试实际效果,本文还会更新)3,声音支持,原 InfoNES 中,使用 oss 播放声音,添加 使用 a...
继续访问
nes模拟器java怎么用_PC版FC模拟器怎么用 VirtuaNES使用设置教程
FC又名红白机,简称NES国内也叫小霸王,是一款经典的游戏主机,上面也有很多好游戏,下面电玩男就告诉大家怎么使用电脑来玩FC游戏,VirtuaNES应该说是在电脑上最好的FC模拟器,它实用简单,我们的FC录像也一般都是用它看的.下面以VirtuaNES0.9为例.一.准备工作1.将下载的文件模拟器解压缩,双击这个图标进入。2.d出"选项"菜单,我们目前需要设置的有“控制器”,“文件夹”,“尺寸”。...
继续访问
最新发布 NES模拟器[H_NES]
最近捣鼓出来个NES模拟器,完全由C编写。可在STM32H750VBT上运行,搭配双QuadFlash可以运行更大的游戏。高速的SPI(80MHz)使得渲染帧率达到全速的60FPS,并且通过SAI输出IIS格式的音频信号
继续访问
Fc坦克大战java_FC版BattleCity(坦克大战)的Java实现!!!!!(二) | 学步园
今天的成果:完成主程序框架搭建,完成主游戏类的框架搭建,完成数据 *** 作线程的框架。目前实现了开始选择菜单:1P、2P、编辑地图选择关口frame,读取map文件,目前map文件的格式为txt格式,26×26的地图,另外有一行是关口的坦克信息。map后期需要压缩,改变存储格式为二进制,压缩大小,统一用一个map文件来存储,自定义地图的时候关口显示好像是第一关,应该需要一个临时的地图存储数据结构………...
继续访问
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
项目源码 项目源码 支持中文 新建res文件夹,添加支持中文的字体文件simsun.ttf 修改GameApp.java public class GameApp { private boolean _gameRunning = trueprivate Frame _frmprivate Font _fontpublic GameApp(){ try{ _font = Font.createFont(Font.TRUETYPE_FONT, getClass().getClas
继续访问
Java nse模拟器,JAVA基础二.md
1. 创建Thread的方式:继承Thread类,重写run方法;实现Runable接口,重写run方法。2. 实现了或继承了Collection接口的是List、Set、Queue3. 多态表现形式是重写4. java数据库连接库JDBC用到了桥接模式5. try{}catch{}会增加额外的开销6. 子类可以访问父类受保护的成员7. .接口中声明的'变量'必须为public final sta...
继续访问
Java版SLG游戏开发入门[0]--让绘制的窗口响应鼠标事件
什么是SLG呢?也就是Simulation Game的缩写,即模拟策略游戏。 以我这种准骨灰级玩家的视点来看(鄙人88年开始玩FC,时年6岁),早期的SLG游戏,大体只是《三国志》(I由1985年开始发售)这类发布指令扩充军备并战斗的“命令下达式游戏”,并没有什么分类上的难度。但自从《火焰纹章》(1990年开始发售)出现伊始,即策略游戏与传统RPG的分野变得模糊起来,这种具有故事情节的战棋策
继续访问
java按键机nes模拟器_NES 模拟器开发教程 12 - 输入设备
NES 支持许多设备,最常见的还是官方手柄,它有 8 个按键:ABSELECTSTARTUPDOWNLEFTRIGHT读取的时候比较奇怪,按道理来讲 8 个按键刚好可以用 1 个 byte 表示,读一次就可以了,但是 NES 读取的时候却是串行的,读 8 次,每次读一个按键,这样做应该是为了兼容性第三方控制器1. 寄存器手柄的寄存器位于 CPU 总线的 0x4016 和 0x4017,分别对应 1...
继续访问
使用C++开发的NES(FC)模拟器
It is exciting!
继续访问
JAVA NES模拟器
一款免费的手机java(j2me)平台FC/NES游戏模拟器,可以直接读取存储卡上的nes游戏文件,支持游戏存档; 软件自带一个超级经典的Nes游戏《超级玛丽》; 玩游戏之前先需要进行参数设置,比如按键设置,屏幕设置等等; 软件默认按键设置: 2键:菜单指令向上/角色向上移动 8键:菜单指令向下/角色向下移动 4键:菜单指令向左/角色向左移动 6键:菜单指令向右/角色向右移动 5键:确定/开始/对话/开启宝箱 其它按键(射击、跳跃等)可自己设置;
java手机nes模拟器
qazwsxedcrfvtgbyhnujmik,ol
nes模拟器java怎么用_virtuanes模拟器怎么使用?virtuanes模拟器图文教程(附软件下载)...
virtuanes是什么:目前最流行的FC/NES模拟器,很强大,在0.9X 系列中作者加入了将 Vnes 专用的录象格式转换为 AVI 文件的功能(支持视频编码器)修正了个别 Mapper 值游戏运行错误的问题。支持了 Ips 补丁功能。功能非常强大推荐所有的 FC 迷使用它来进行游戏。 曾经有过一个改版叫做VirtuaNesex TPU,0.93版中已经集成该改版,最新版本为0.97。...
CS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%产生Stripmap SAR的回波
clear all
clc
thetaT=0%T平台波束斜视角
thetaT=thetaT*pi/180%rad
thetaR=0%R平台波束斜视角
thetaR=thetaR*pi/180
c=3e8%光速
fc=1.5e9%载频
lambda=c/fc%波长
%%测绘带区域
X0=200%方位向[-X0,X0]
Rtc=3000
Rrc=3000
Rc=(Rtc+Rrc)/2
R0=150%距离向[Rc-R0,Rc+R0]
%%距离向(Range),r/t domain
Tr=1.33e-6%LFM信号脉宽1.33us (200m)
Br=150e6%LFM信号带宽 150MHz
Kr=Br/Tr%调频斜率
Nr=1024
r=Rc+linspace(-R0,R0,Nr)
t=2*r/c%t域序列
dt=R0*4/c/Nr%采样周期
f=linspace(-1/2/dt,1/2/dt,Nr)%f域序列
%%方位向(Azimuth,Cross-Range),x/u domain
v=100%SAR 平台速度
Lsar=300%合成孔径长度
Na=512
x=linspace(-X0,X0,Na)%u域序列
u=x/v
du=2*X0/v/Na
fu=linspace(-1/2/du,1/2/du,Na)%fu域序列
ftdc=v*sin(thetaT)
ftdr=-(v*cos(thetaT))^2/lambda/Rtc
frdc=v*sin(thetaR)
frdr=-(v*cos(thetaR))^2/lambda/Rrc
fdc=ftdc+frdc%Doppler调频中心频率
fdr=ftdr+frdr%Doppler调频斜率
%%目标位置
Ntar=3%目标个数
Ptar=[Rrc,0,1 %距离向坐标,方位向坐标,sigma
Rrc+50,-50,1
Rrc+50,50,1]
%%产生回波
s_ut=zeros(Nr,Na)
U=ones(Nr,1)*u%扩充为矩阵
T=t'*ones(1,Na)
for i=1:1:Ntar
rn=Ptar(i,1)xn=Ptar(i,2)sigma=Ptar(i,3)
rtn=rn+Rtc-Rrc
RT=sqrt(rtn^2+(rtn*tan(thetaT)+xn-v*U).^2)
RR=sqrt(rn^2+(rn*tan(thetaT)+xn-v*U).^2)
R=RT+RR
DT=T-R/c
phase=-pi*Kr*DT.^2-2*pi/lambda*R
s_ut=s_ut+sigma*exp(j*phase).*(abs(DT)<Tr/2).*(abs(v*U-xn)<Lsar/2)
end
%方位向fft
s_kt=fftshift(fft(fftshift(s_ut).')).'
%CS变换
kc=4*pi/lambda
kc=kc*ones(1,Na)
kx=fu/v
p_kx0=-sqrt(kc.^2-kx.^2)%相位项泰勒展开的系数函数
p_kx1=2*kc/c/p_kx0
p_kx2=-2.*kx.^2/c^2./p_kx0.^3
C_kx=-(c*p_kx1/2+1)
Ks_r=1-2*Kr*Rc.*p_kx2
Ks_kx_r=Kr/pi./Ks_r
r0=Rc
s2_ut=exp(j*pi*C_kx.*ones(Nr,1)*Ks_kx_r.*(t'*ones(1,Na)-2*r0*(1+C_kx)/c).^2)%设计的线性调频信号
S_cs=s_kt.*s2_ut
%距离向fft
S_kw=fftshift(fft(fftshift(S_cs)))
%距离向匹配滤波
w=2*pi*f
rmc_r=exp(j.*w*2*C_kx*r0/c).*exp(j.*w.^2/4/pi/Kr/(1+C_kx))
rmc_r=rmc_r'*ones(1,Na)
S_rmc=S_kw.*rmc_r
%距离向ifft
S_kt=fftshift(ifft(fftshift(S_rmc)))
d_kxr=4*pi/c^2*Kr*C_kx*(1+C_kx).*(Rc-r0).^2%CS变换带来的相位误差
S_kt=S_kt.*exp(-j*d_kxr)%消除相位误差
%方位向匹配滤波
FU=ones(Nr,1)*fu
H_kx=exp(j*pi/fdr*(FU-fdc).^2)%方位向压缩因子
I_ut=S_kt.*H_kx
I_ut=fftshift(ifft(fftshift(I_ut.'))).'
subplot(221)
G=20*log10(abs(s_ut)+1e-6)
gm=max(max(G))
gn=gm-40%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(x,r-Rc,-G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(a)原始信号')
subplot(222)
G=20*log10(abs(S_rmc)+1e-6)
gm=max(max(G))
gn=gm-40%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(x,r-Rc,-G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(b)距离向匹配滤波后频谱')
subplot(223)
G=20*log10(abs(S_kt)+1e-6)
gm=max(max(G))
gn=gm-40%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(x,r-Rc,G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(c)消除相位误差后频谱')
subplot(224)
G=20*log10(abs(I_ut)+1e-6)
gm=max(max(G))
gn=gm-60%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(x,r-Rc,G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(d)目标图象')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
RD
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%产生Stripmap SAR的回波
clear all
thetaT=0%T平台波束斜视角
thetaT=thetaT*pi/180%rad
thetaR=0%R平台波束斜视角
thetaR=thetaR*pi/180
c=3e8%光速
fc=1.5e9%载频
lambda=c/fc%波长
%%测绘带区域
X0=200%方位向[-X0,X0]
Rtc=3000
Rrc=3000
Rc=(Rtc+Rrc)/2
R0=150%距离向[Rc-R0,Rc+R0]
%%距离向(Range),r/t domain
Tr=1.5e-6%LFM信号脉宽 1.5us (200m)
Br=150e6%LFM信号带宽 150MHz
Kr=Br/Tr%调频斜率
Nr=512
r=Rc+linspace(-R0,R0,Nr)
t=2*r/c%t域序列
dt=R0*4/c/Nr%采样周期
f=linspace(-1/2/dt,1/2/dt,Nr)%f域序列
%%方位向(Azimuth,Cross-Range),x/u domain
v=100%SAR 平台速度
Lsar=300%合成孔径长度
Na=1024
x=linspace(-X0,X0,Na)%u域序列
u=x/v
du=2*X0/v/Na
fu=linspace(-1/2/du,1/2/du,Na)%fu域序列
ftdc=v*sin(thetaT)
ftdr=-(v*cos(thetaT))^2/lambda/Rtc
frdc=v*sin(thetaR)
frdr=-(v*cos(thetaR))^2/lambda/Rrc
fdc=ftdc+frdc%Doppler调频中心频率
fdr=ftdr+frdr%Doppler调频斜率
%%目标位置
Ntar=3%目标个数
Ptar=[Rrc,0,1 %距离向坐标,方位向坐标,sigma
Rrc+50,-50,1
Rrc+50,50,1]
%%产生回波
s_ut=zeros(Nr,Na)
U=ones(Nr,1)*u%扩充为矩阵
T=t'*ones(1,Na)
for i=1:1:Ntar
rn=Ptar(i,1)xn=Ptar(i,2)sigma=Ptar(i,3)
rtn=rn+Rtc-Rrc
RT=sqrt(rtn^2+(rtn*tan(thetaT)+xn-v*U).^2)
RR=sqrt(rn^2+(rn*tan(thetaT)+xn-v*U).^2)
R=RT+RR
DT=T-R/c
phase=pi*Kr*DT.^2-2*pi/lambda*R
s_ut=s_ut+sigma*exp(j*phase).*(abs(DT)<Tr/2).*(abs(v*U-xn)<Lsar/2)
end
%%距离压缩
p0_t=exp(j*pi*Kr*(t-2*Rc/c).^2).*(abs(t-2*Rc/c)<Tr/2)%距离向LFM信号
p0_f=fftshift(fft(fftshift(p0_t)))
s_uf=fftshift(fft(fftshift(s_ut)))%距离向FFT
src_uf=s_uf.*(conj(p0_f).'*ones(1,Na))%距离压缩
src_ut=fftshift(ifft(fftshift(src_uf)))%距离压缩后的信号
src_fut=fftshift(fft(fftshift(src_ut).')).'%距离多普勒域
%%二次距离压缩,距离迁移校正原理仿真
src_fuf=fftshift(fft(fftshift(src_uf).')).'%距离压缩后的二维频谱
F=f'*ones(1,Na)%扩充为矩阵
FU=ones(Nr,1)*fu
p0_2f=exp(j*pi/fc^2/fdr*(FU.*F).^2+j*pi*fdc^2/fc/fdr*F-j*pi/fc/fdr*FU.^2.*F)
s2rc_fuf=src_fuf.*p0_2f
s2rc_fut=fftshift(ifft(fftshift(s2rc_fuf)))%距离多普勒域
%%方位压缩
p0_2fu=exp(j*pi/fdr*(FU-fdc).^2)%方位向压缩因子
s2rcac_fut=s2rc_fut.*p0_2fu%方位压缩
s2rcac_fuf=fftshift(fft(fftshift(s2rcac_fut)))%距离方位压缩后的二维频谱
s2rcac_ut=fftshift(ifft(fftshift(s2rcac_fut).')).'%方位向IFFT
subplot(221)
G=20*log10(abs(s_ut)+1e-6)
gm=max(max(G))
gn=gm-40%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(x,r-Rc,-G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(a)原始信号')
subplot(222)
G=20*log10(abs(src_fut)+1e-6)
gm=max(max(G))
gn=gm-40%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(fu,r-Rc,-G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(b)距离多普勒域频谱')
subplot(223)
G=20*log10(abs(s2rc_fut)+1e-6)
gm=max(max(G))
gn=gm-40%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(fu,r-Rc,-G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(c)RMC后的RD域频谱')
subplot(224)
G=20*log10(abs(s2rcac_ut)+1e-6)
gm=max(max(G))
gn=gm-60%显示动态范围40dB
G=255/(gm-gn)*(G-gn).*(G>gn)
imagesc(x,r-Rc,G),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(d)目标图象')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)