求高手写飞思卡尔智能车程序(可追加一千分)

求高手写飞思卡尔智能车程序(可追加一千分),第1张

其实只有程序也没有用,要将程序和硬件接合起来才行。比如硬件里用PT0,程序里用PT1,当然不会达到预期目的。下在是上海交通大学的程序。

Main.c

#include <hidef.h>/* common defines and macros */

#include <mc9s12db128.h>/* derivative information */

#pragma LINK_INFO DERIVATIVE "mc9s12db128b"

#include "define.h"

#include "init.h"

// variable used in video process

volatile unsigned char image_data[ROW_MAX][LINE_MAX] // data array of picture

unsigned char black_x[ROW_MAX] // 0ne-dimensional array

unsigned char row // x-position of the array

unsigned char line // y-position of the array

unsigned int row_count // row counter

unsigned char line_sample // used to counter in AD

unsigned char row_image

unsigned char line_temp // temperary variable used in data transfer

unsigned char sample_data[LINE_MAX] // used to save one-dimension array got in

interruption

// variables below are used in speed measure

Unsigned char pulse[5] // used to save data in PA process

Unsigned char counter// temporary counter in Speed detect

Unsigned char cur_speed// current speed

short stand

short data

unsigned char curve // valve used to decide straight or turn

short Bounds(short data)

short FuzzyLogic(short stand)

/*----------------------------------------------------------------------------*\

receive_sci

\*----------------------------------------------------------------------------*/

unsigned char receive_sci(void) // receive data through sci

{ unsigned char sci_data

while(SCI0SR1_RDRF!=1)

sci_data=SCI0DRL

return sci_data

}

/*----------------------------------------------------------------------------*\

transmit_sci

\*----------------------------------------------------------------------------*/

void transmit_sci(unsigned char transmit_data) // send data through sci

{

while(SCI0SR1_TC!=1)

while(SCI0SR1_TDRE!=1)

SCI0DRL=transmit_data

}

/*****************************************************************************

***/

/*----------------------------------------------------------------------------*\

abs_sub

\*----------------------------------------------------------------------------*/

unsigned char abs_sub(unsigned char num1, unsigned char num2)

{ unsigned char difference

if(num1>=num2){

difference=num1-num2

}else{

difference=num2-num1

}

return difference

}

void pwm_set(unsigned int dutycycle)

{

PWMDTY1=dutycycle&0x00FF

PWMDTY0=dutycycle>>8

}

void get_black_wire(void) // used to extract black wire

{ unsigned char i

for(row=0row<ROW_MAXrow++){

for(line=LINE_MINline<LINE_MAX-3line++){

if(image_data[row][line]>image_data[row][line+3]+VALVE){

for(i=3i<10i++){

if(image_data[row][line+i]+VALVE<image_data[row][line+i+3]){

black_x[row]=line+i/2+2

i=10

}

}

line=LINE_MAX

} else{

//black_x[row]=(black_x[row]/45)*78

}

}

}

}

/*----------------------------------------------------------------------------*\

speed_control

\*----------------------------------------------------------------------------*/

void speed_control(void)

{

unsigned int sum,average

sum=0

for(row=0row<FIRST_FIVErow++){

sum=sum+black_x[row]

}

average=sum/FIRST_FIVE

curve=0

for(row=0row<FIRST_FIVErow++)

{

curve=curve+abs_sub(black_x[row],average)

if(curve>CURVE_MAX){

curve_flag=0

speed=low_speed}

else{

curve_flag=1

speed=hign_speed

}

}

}

/*----------------------------------------------------------------------------*\

steer_control

\*----------------------------------------------------------------------------*/

void steer_control(void)

{ unsigned int dutycycle

unsigned char video_center

unsigned int coefficient

int E,U//current

static int e=0

video_center=(LINE_MIN+LINE_MAX)/2

stand=abs_sub(black_x[1]+ black_x[9],2*black_x[5])

E=video_center-black_x[8]

coefficient=30+1*FuzzyLogic(stand)

U=coefficient*E

dutycycle=Bounds(center+U)

pwm_set(dutycycle)

}

// make sure it is within bounds

short Bounds(short data){

if(data>right_limit){

data = right_limit

}

if(data<left_limit){

data = left_limit

}

return data

}

Void speed_get(void)

{

Unsigned char temp

Counter++

Temp=PACN1

cur_speed=temp-pulse[counter-1]

pulse[counter-1]=temp

if(counter==5)

{

counter=0

}

}

Void set_speed(unsigned char desired_speed)

{

If(desired_speed<cur_speed)

{

PWMDTY2=low_speed

}

Else

{

PWMDTY2=high_speed

}

}

/*****************************************************************************

*\

Main

\*****************************************************************************

*/

void main(void) {

// main functiion

init_PORT()

// port initialization

init_PLL()

// setting of the PLL

init_ECT()

init_PWM()

// PWM INITIALIZATION

init_SPEED()

init_SCI()

for() {

if(field_signal==0){ // even->odd

while(field_signal==0)

row_count=0

row_image=0

EnableInterrupts

while(row_count<ROW_END){

get_black_wire()

speed_control()

steer_control()

}

DisableInterrupts

}

else{ // odd->even

while(field_signal==1)

row_count=0

row_image=0

EnableInterrupts

while(row_count<ROW_END){

get_black_wire()

speed_control()

steer_control()

}

DisableInterrupts

}

/* transmit_sci('x')

for(row=0row<ROW_MAXrow++){

transmit_sci(black_x[row])

}

transmit_sci(curve)

*/

}

}

interrupt 6 void IRQ_ISR()

{

row_count++

if((row_count>ROW_START)&&(row_count%INTERVAL==0)&&(row_image<ROW_MAX))

{

init_AD()

for(line_sample=0line_sample<LINE_MAXline_sample++){

while(!ATD0STAT1_CCF0)// WAIT FOR TRANSFORM TO END

sample_data[line_sample]=signal_in// A/D transfer

}

ATD0CTL2=0x00

row_image++

}

if((row_count>ROW_START)&&(row_count%INTERVAL==2)&&(row_image<ROW_MAX+

1)){

for(line_temp=0line_temp<LINE_MAXline_temp++){

image_data[row_image-1][line_temp]=sample_data[line_temp]

}

}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// THE END

//

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Define.h // all macros are define in this header file

/*----------------------------------------------------------------------------*\

macro need to be used in video sample

\*----------------------------------------------------------------------------*/

////////////////////////////

#define signal_in ATD0DR0L // signal from video: right aligned mode,

// only use low 8-bit in ATD Conversion Result

Registers

#define field_signal PTT_PTT2 // field signal is sent into PortT_bit2

#define LINE_MIN 12 // first effective pint in each row

#define LINE_MAX 78 // number of points sampled in each row

#define ROW_MAX 10 // number of rows needed to be sampled in each

picture

#define ROW_START 50 // begin to sample from line start

#define ROW_END 300 // end flag of sampling

#define INTERVAL 20 // interval between effective rows

#define VALVE 24 // valve to decide black track or white track

#define FIRST_FIVE 5

/*----------------------------------------------------------------------------*\

舵机控制变量

\*----------------------------------------------------------------------------*/

#define left_limit 7400 //

#define center 6400 //

#define right_limit 5400 //

//#define coefficient 30 // (LEFT-RIGHT)/(LINE_MAX-LINE_MIN)

/*----------------------------------------------------------------------------*\

速度控制变量

\*----------------------------------------------------------------------------*/

#define curve_flag PORTE_BIT2 // indicate straight line or not

#define speed PWMDTY2 // speed of the car

#define CURVE_MAX 24 // valve to decide straight track or not

#define hign_speed 120 // speed used on straight track

#define low_speed 100 // speed used on the turn

/*----------------------------------------------------------------------------*\

define jump wirecode switchLed

\*----------------------------------------------------------------------------*/

#define JP4_1 PTT_PTT7 // JP4

#define JP4_2 PTT_PTT6

#define JP4_3 PTT_PTT5

#define JP4_4 PTT_PTT4

#define JP4_5 PTP_PTP4

#define JP4_6 PTP_PTP5

#define JP4_7 PTP_PTP6

// define code switch

#define RP1_1 PTM_PTM0

#define RP1_2 PTM_PTM1

#define RP1_3 PTM_PTM2

#define RP1_4 PTM_PTM3

#define RP1_5 PTM_PTM4

#define RP1_6 PTM_PTM5

#define RP1_7 PORTAD0_PTAD4

#define RP1_8 PORTAD0_PTAD3

// define Led

#define Led1 PORTA_BIT4

#define Led2 PORTA_BIT5

#define Led3 PORTA_BIT6

#define Led4 PORTA_BIT7

Init.c // include initial function in this file

#include <hidef.h>/* common defines and macros */

#include <mc9s12db128.h>/* derivative information */

#include "define.h" /* all macro included */

#include "init.h" /* all init function included */

#pragma LINK_INFO DERIVATIVE "mc9s12db128b"

/*----------------------------------------------------------------------------*\

init_PLL

\*----------------------------------------------------------------------------*/

void init_PLL(void)

// setting of the PLL

{

REFDV=3

SYNR=7// bus period=16Mhz*(SYNR+1)/(REFDV+1)

while(0==CRGFLG_LOCK)// wait for VCO to stablize

CLKSEL=0x80

// open PLL

}

Void init_ECT(void)

{

TIOS_IOS3=0// set PT3 as input capture

TCTL4=0b11000000// set pt3 as any edge triggered

ICPAR_PA1EN=1// PA1 enabled

}

/*----------------------------------------------------------------------------*\

init_PORT

\*----------------------------------------------------------------------------*/

void init_PORT(void) // port initialization

{

DDRT_DDRT2=0

// Port M1 function as even-odd field signal

input

DDRJ_DDRJ6=1

// Port J6 enable 33886 0 enable

// Led port

DDRA_BIT4 =1

DDRA_BIT5 =1

DDRA_BIT6 =1

DDRA_BIT7 =1

INTCR_IRQE =1// IRQ Select Edge Sensitive Only

INTCR_IRQEN=1// External IRQ Enable

//输出指示 JP4_1 PTT_PTT0

DDRT_DDRT7=1

DDRT_DDRT6=1

DDRT_DDRT5=1

DDRT_DDRT4=1

DDRP_DDRP4=1//PTP_PTP0

DDRP_DDRP5=1

DDRP_DDRP7=1

}

/*----------------------------------------------------------------------------*\

init_AD

\*----------------------------------------------------------------------------*/

void init_AD(void)

// initialize AD

{

ATD0CTL2=0xC0

// open AD, quick clear, no wait mode, inhibit outer awake, inhibit interrupt

ATD0CTL3=0x08

// one transform in one sequence, No FIFO, contine to transform under freeze mode

ATD0CTL4=0x81

// 8-bit precision, two clocks, ATDClock=[BusClock*0.5]/[PRS+1] PRS=1, divider=4

BusClock=8MHZ

ATD0CTL5=0xA0// right-algned unsigned,single channel,

channel 0

ATD0DIEN=0x00// inhibit digital input

}

/*----------------------------------------------------------------------------*\

init_PWM

\*----------------------------------------------------------------------------*/

void init_PWM(void)

// PWM initialize

{

PTJ_PTJ6 = 0 // "0" enable 33886 motor, "1" disable it

PWME = 0x00 // PWW is disabled

PWMCTL_CON01 = 1 // combine PWM0,1

PWMPRCLK = 0x33 // A=B=32M/8=4M

PWMSCLA = 100 // SA=A/2/100=20k

PWMSCLB = 1 // SB=B/2/1 =2000k

PWMCLK = 0b00011100// PWM0,1-APWM2,3-SBPWM4-SA

PWMPOL = 0xff // Duty=High Time

PWMCAE = 0x00 // left-aligned

PWMPER0 = 0x4e

PWMPER1 = 0x20

// 20000 = 0x4e20Frequency=A/20000=200Hz

PWMDTY0 = 0x18

PWMDTY1 = 0x6a // initialize PWM

PWME_PWME1 = 1 // enable steer

PWMDTY2 = 20 // Duty cycle

PWMPER2 = 200 // Frequency=SB/200=10K

PWME_PWME2 = 1 // enable motor

}

/*----------------------------------------------------------------------------*\

init_SPEED

\*----------------------------------------------------------------------------*/

void init_SPEED(void) {

DDRM_DDRM0 =0 //code switch 1 on RP1

DDRM_DDRM1 =0 //code switch 1 on RP1

DDRM_DDRM2 =0 //code switch 1 on RP1

DDRM_DDRM3 =0 //code switch 1 on RP1

DDRM_DDRM4 =0 //code switch 1 on RP1

DDRM_DDRM5 =0 //code switch 1 on RP1

ATD0DIEN_IEN4 = 1//code switch 1 on RP1,Enable Digital Input PAD4

ATD0DIEN_IEN3 = 1//code switch 1 on RP1,Enable Digital Input PAD3

if(RP1_1==1) {

speed= hign_speed +2*(RP1_2*10+RP1_3*5+RP1_4*2+RP1_5*2+RP1_6+RP1_7+RP1_8)

}

else{

speed= hign_speed -2*(RP1_2*10+RP1_3*5+RP1_4*2+RP1_5*2+RP1_6+RP1_7+RP1_8)

}

}

/*****************************************************************************

***/

/*----------------------------------------------------------------------------*\

init_SCI

\*----------------------------------------------------------------------------*/

void init_SCI(void) // initialize SCI

{

SCI0BD = 104 // bode rate=32M/(16*SCI0BD)=19200

SCI0CR1=0x00 //

SCI0CR2=0b00001100

}

Init.h

void init_PLL(void)

void init_AD(void)

void init_PWM(void)

void init_SPEED(void)

void init_SCI(void)

void init_PORT(void)

Void init_ECT(void)

Fuzzy.asm // S12 fuzzy logic code

RAM: section

Fuzzy Membership sets

input membership variables

absentry fuzvar

fuzvar: ds.b 5 inputs

Z: equ 0 indicate of straight line

VS: equ 1 turn slightly

S: equ 2 turn a little

BB: equ 3 a big turn

VB: equ 4 a very big turn

output membership variables

absentry fuzout

fuzout: ds.b 4 outputs

remain: equ 5 no change on kp

little: equ 6 little change on kp

big: equ 7 big change on Kp

very_big: equ 8 very big change on kp

EEPROM: section

fuzzification

s_tab: dc.b 0,35,0,8 indicate of straight line

dc.b 0,69,8,8 turn slightly

dc.b 35,104,8,8 turn a little

dc.b 69,138,8,8 a big turn

dc.b 104,255,8,0 a very big turn

rules:

constructing of rule

dc.b Z, $FE,remain,$FE

dc.b VS, $FE,little,$FE

dc.b S, $FE,big,$FE

dc.b BB, $FE,big,$FE

dc.b VB, $FE,very_big,$FE

dc.b $FF end of the rule

addsingleton:

dc.b 0,1,2,3 setting of the weight

absentry FuzzyLogic

FuzzyLogic:

pshx

ldx #s_tab

ldy #fuzvar

mem number of mem indicates the number of input

mem

mem

mem

mem

ldab #4 number of output fuzzy membership sets

cloop:

clr 1,y+ clear output fuzzy variables

dbne b,cloop

ldx #rules

ldy #fuzvar

ldaa #$FF

rev

ldy #fuzout

ldx #addsingleton

ldab #4

wav

ediv

tfr y,d return dpower

pulx

rts

张玉君 李昌国

(地矿部航空物探遥感中心,北京 100083)

摘要 中国由于钾肥的短缺,故而在近30多年中对于钾盐勘察的各种新方法研究,给予了巨大关注。这些新方法包括:伽马能谱测井、航空伽马能谱、遥感、重力等。本文简要总结我们在此领域所做研究工作的主要成绩。1963年提出并研究了伽马能谱测井方法和井中伽马能谱仪,80年代前该仪器经过了数次改型,伽马能谱测井仪器和方法在6个省得到成功使用。1995年开发了井中放射性能谱交互解释软件系统(HRSIS),该软件系统包括五组功能程序:预处理、定量解释、趋势分析、图形显示、综合解释。自1984年开始进行高灵敏度航空测量在中国西部勘察蒸发型钾盐矿产,通常测量4个参数:K、Th、U和磁场。为了对数据进行预处理、处理、稳谱及图像处理研制开发了航空多道伽马能处理软件包(AMGPSP)和航空物探数据图像处理软件包(AGIP-SP)。自80年代中期开始应用数字图像处理技术进行地球物理和遥感数据(MSS和TM)的综合解译,用以研究中国西部蒸发型含钾盐盆地。在1993年初开发了专门的重力场三维图像化软件包(3DIG),首先建立重力场的三维数据阵列,然后以各种形式进行显示,以揭示该重力场的内部特征。

关键词 钾盐 井中伽马能谱仪 航空伽马能谱测量 遥感 重力场三维图像化

1 伽马能谱测井方法

据统计世界钾盐总储量中50%是在钻孔中发现的。为了发现钾盐并区分含钍、铀泥质岩石对钾盐的干扰,在1963年研究了伽马能谱测井方法并研制了井中伽马能谱仪,80年代前该仪器经历了五次改型。

该方法的基础是自然放射性同位素40K。40K的同位素丰度为0.0119%,其伽马量子的辐射系数为11.6%,能量适中为1.46MeV,适合探测和能谱分析。

所研制的四道井中伽马能谱仪用圆柱状碘化钠晶体探测伽马射线谱。这四道是(图1):PK道(40K的1.46MeV峰的微分道,其能量阈为1.40~1.52MeV);LI道(左积分道,其能量阈为≥1.30MeV);RI道(右积分道,其能量阈为≥1.60MeV);及TC道(总计数道,其能量阈为≥0.2MeV)。在制作井中伽马能谱仪过程中研究了下述技术要点:

1.1 灵敏度

由于40K的同位素丰度和伽马辐射系数都很低,必须提高井中伽马能谱仪的灵敏度,为此将Nal晶体的长度加大到100~150mm,其直径由于受钻孔内径的限制而不能超过50mm。

图1 四道井中伽马能谱仪用圆柱状碘化钠晶体探测伽马射线谱

4道是:PK道(40K的1.46MeV峰的微分道,其能量阈为1.40~1.52MeV);LI道(左积分道,其能量阈为≥1.30MeV);RI道(右积分道,其能量阈为≥1.60MeV);及TC道(总计数值,其能量阈为≥0.2MeV)

1.2 脉冲传输

为了保持仪器的分辨率,从光电倍增管输出的脉冲经前置放大器之后,必须在波形和幅度上无畸变地从井下仪器经3600多米长的电缆传至地面仪器。选用了电压—电流型传输方案。对137Cs的分辨率经3600m电缆传输之后保持了无长电缆的分辨率水平(10%)。

1.3 稳定性

地壳的垂直温度梯度约为每33m升高1℃,因此在钻孔中3500m深处的环境温度可能高达100℃。为了使能谱仪达到可靠的稳定性,采取了以下三个措施:选用高温NaI晶体和光电倍增管;用供给光电倍增管高压源的正温度系数补偿光电倍增管增益的负温度系数;采用137Cs的自动稳谱线路以保持谱峰位置的稳定。

某一同位素的任一光电峰叠加在更高能量光电峰的康普顿延续线上。40K光电峰下的本底正比于右积分RI(图1),这是对于K的剥谱法和主分量分析的理论基础。我们研究了利用主分量分析和剥谱法压制U、Th干扰以得到更纯的钾异常。方程组(1)展示了主分量分析的数学过程。其本征向量通过统计得到。

第30届国际地质大会论文集 第20卷 地球物理

式中:X为原变量;E为新变量,它们是原变量的线性函数;I为单位矩阵。

1995年研制成功井中放射性能谱解释软件系统(HRSIS),它由五组功能程序组成:预处理,定量解释,趋势分析,图形显示,及综合解释。第六组是HELPs(求助功能)。HRSIS系统在微机上用C语言写成。图2所示为青海省昆特依盆地位于沉积活动中心的一口钻孔测井结果的图像实例。在图2上KCl层表现为左积分(LI)高、峰顶微分(PK)高、总计数(TC)高、但右积分(RI)低,除了KCl层外还可以清晰地看到湖相沉积的三个阶段。

图2 测井图像实例

此钻孔位于青海省昆特依盆地沉积活动中心

*最左边为原始伽马能谱测井曲线,经用本征向量调正了比例尺。

*中部为PK、LI及RI的合成三色图像。石盐层由于其放射性元素含量低而表现为暗色调,相反钾盐层或含杂卤石层为亮色调,泥质岩层由于含U、Th和K偏高也为亮色调。

*K趋势曲线及Th-U趋势曲线呈现出Th、U的递减及K的递增,反映出盆地演变的三个阶段:半咸水湖阶段;超咸水湖阶段;干盐湖与超咸水湖交替阶段。

*经主分量分析所获K曲线展现出在60m和130m深处的富含杂卤石层。

伽马能谱测井方法成功地在6个省(云南、湖北、四川、山东、新疆及青海)得到推广应用。厚度≥0.5m、KCl含量≥2%的含钾盐层在勐野井及其它矿区均可测出。石油部曾制定了“油盐兼探”的技术政策,在此政策的鼓舞下在江汉油田利用伽马能谱测并发现了一层厚0.8m的钾芒硝层,其KCl含量高达16.8%。在四川省发现一层厚度≥0.2m的杂卤石。在1991年云南省某新勘探区,第一口钻孔岩心全部丢失,唯有依靠伽马能谱测井才补救了钻孔资料,找到了数层含钾盐层,避免了重新打钻的经济损失。

2 航空伽马能谱测量

自1984年起在中国西部开始进行以寻找蒸发型钾盐矿床为主的高灵敏度航空物探测量。通常记录四个参数:K、Th、U及磁场。可用多道(512道)或4道航空伽马能谱仪,所用方柱型碘化钠晶体的总体积可达50dm3,飞行高度约为90m,线距1~2km,测量比例尺1∶100000~1∶200000。

80年代曾开发了航空多道伽马能谱处理软件包(AMGPSP)及航空物探图像处理软件包(AGIPSP),皆用FORIRAN语言编写,使用这两个软件包可进行伽马能谱软件稳谱、预处理、处理以及航空物探数据的图像处理[1,2]。中国西部寻找钾盐的地区植被稀疏、地形平坦,是开展航放的理想地区。数据动态范围通常如下:K——0~8%,Th——(0~40)×10-6,U——(0~15)×10-6。

数字图像处理技术十分有助于提取下述各方面的地质信息:岩性填图;直接找钾;钾盐矿产沉积的研究;提取构造形迹;以及在某些情况下还能判断油气异常[3,4]。航空伽马能谱是少数几种可以直接探测某些元素的方法之一。

例如,做为航空伽马能谱测量结果的K、Th、U数据合成三元图像,实际上是一幅三元素区域地球化学图,与陆地卫星图像(TM或MSS)综合,K、Th、U三元素图像可借用监督或非监督分类方法达到岩性填图的目的。

含泥质岩石(砂岩、泥岩等)由于富含氧化钾,成为对直接找钾盐的主要干扰。通过分析K、Th双元素图像及其散布图发现,泥质岩石中K和Th含量之间存在一定线性相关性。为了直接确定KCl试用了一系列图像处理技术,如:主分量分析、彩色坐标系的转换、植被提取等。

据上述现象和试验成功地区分了KCl和第三纪砂岩中的氧化钾,这种砂岩富存于柴达木盆地测区的东北角。对此测区圈定了十处新KCl异常,其中一处经地面验证,固体KCl储量增加了3245000t。KCl卤水对于勘察据有特殊的重要性,将含K≥0.6%的地面水通过图像圈定为KCl卤水。

通过监督分类对原14种岩性分类的岩性图又增加了两类。不仅成功地区分了KCl与氧化钾,还成功地区分了KCl与含泥质KCl。

3 遥感测量

7个波段的TM数据由于其更高的能谱和空间分辨率,对研究含钾蒸发盆地更为有用。

虽然为了提取地质信息总是希望使用尽可能多的波段,但是仍离不开一幅最佳显示的三元图像。最佳三元图像应包含信息量最多,而三个波段间相关性最低。利用组合相关因子Q做为最优化组合的量度和基础。

第30届国际地质大会论文集 第20卷 地球物理

式中:Si为i波段的变异;Ri是相关系数。

最佳三元图像应具有最大的Q值。例如昆特依盆地TM数据中以1、4、7三波段组合为最佳。昆特依盆地是一个现代盐湖,对于勘察钾盐有一定重要性,它位于青海省柴达木盆地的西北方向。图3a是一幅黑白图像,它清晰地展示出昆特依盆地的总体地貌景观,它是一个长80km、宽30km的菱形封闭干盐湖,一条公路横穿而过,干盐湖的北部有阿尔金山、东、西和南部有两组背斜环绕,有的背斜含具工业价值的油田。

图3 昆特依盆地景观

a—TM数据的1、4、7波段组成的合成图像清晰地展现出中国西部昆特依盆地的总地貌景观,它是一个长80km宽30km的菱形封闭干盐湖;b—通过1、4、5、6、7波段数据的KL转换,得到一幅宝贵的异常图像,在其上KCl表现为白色亮斑

为了建立固体钾盐的异常标志进行了图像采样,在图像上选了14个地质目标,统计了它们各自的TM七个波段的亮度值。图像采样结果示于图4。固体KCl(编号12和13)具有明显的可分辨的波谱特征,为解译提供了基础。

基于波谱分析,通过KL转换(主分量分析)及分段切割拉伸提取了固体钾盐异常(图3b),这两种方法的结果十分接近。除了探测KCl,还进行了构造形迹研究、盐矿特征分析、盐盆物质来源的揭示研究等。

图4 图像采样结果

曲线为14个地质目标TM7个波段的亮度值。固体KCl(编号12和13)具有明显的可分辨波谱特征,提供了建立固体钾盐异常标志的基础

图5 3DIG软件包解释结果之实例

a—云南省勐腊重力场第20号局部负异常的似“CT”图像;b—第20号负异常沿长轴方向的10个断面,它们揭示出该异常的内部形态,具体描绘出岩层变形情况及其与盆地断裂的立体关系

图6 云南省物探人员手工计算的第20号局部负异常的解释结果

a—半径为r1、r2、r3、r4、r5的圆周上平均剩余重力差平面图;b—解释剖面;c—所获解释结果——石盐岩体;d—剖面之断面

图7 勐腊重力场剖面

从北向南再经东南纵贯勐腊重力场全区的主切割剖面图像,并标有等值线。由于显示的限制将全剖面切成4段

4 重力场三维图像化

盐层与周围介质的密度差通常均大于0.3g/cm3,而NaCl与KCl的密度差约为0.15g/cm3,所以重力勘探传统地用于盐类矿床勘察。

云南省物探人员经常用不同半径圆周上平均剩余重力之差来估价盐矿体的形状和大小(公式3)。

第30届国际地质大会论文集 第20卷 地球物理

式中:gr1、gr2为在半径为r1、r2的圆周上剩余重力场数据。n1、n2为半径为r1、r2圆周上供平均计算的点数。

原则上讲,此平均剩余重力差接近于重力一阶垂向导数。有数个利用此方法所解释的实例得到了钻探的验证。

我们工作的贡献在于对重力数据进行了三维图像化,以获得更好的可视性及更快的解释。在1993年用FORTRAN语言开发了一个专门用于重力场三维图像化的软件包(3DIG)。它利用上延、不同半径圆周平均剩余重力差分及其它方法建立重力场三维数据阵列,然后以不同形式加以显示。

利用此软件包对中国西南部含盐勐腊重力场进行了评价。该重力场动态范围为-3.5×10-5~2.9×10-5m/s2。有20个局部负异常。对每一个局部异常都进行了研究,其结果以断面组形式及似“CT”形式表示,可以揭示出剖面内部与周围介质的关系并具体描绘出岩层变形及其与盆地断裂的立体关系。图5为第20号局部负异常的此类图像的实例,对此异常还进行了手工计算,以进行对比。图6即为手工计算结果。图5及图6均揭示出第20号局部负异常的内部特征。图7展示出该重力场从北往南再到东南纵贯全区的主切割剖面,并标有等值线,由于显示的限制,全剖面切为4段。

利用钻探结果及断面数据通过相关分析(如最小二乘拟合)可以获得深度比例尺,一旦得到近似深度比例尺,此软件便可容易地算出钾盐或钠盐层的埋深、厚度及储量。

致谢 感谢米双杰、李寿田、张明伦、陈云龙、李淑仪、陈显尧等同志参加了研制井中伽马能谱仪及方法研究。同样感谢云南省物探工作者在测量盐矿重力方面的努力。我们感谢朱月娥、史殿林和谢欣同志在软件开发方面的工作,以及徐东宸同志负责完成青海航空物探测量。同样感激高荣锦同志对于S600图像处理系统的支持。此外应感谢杨星虹和李毅同志对于本文文字和图件的排版打印。

参考文献

[1] Zhang Yu-Jun,Wang Nai-Dong and Zhang Zhi-Min.A software package for processing of data of airborne gamma-ray multichannel spectrometer.Computing Techniques for Geophysical and Geochemical Exploration,1989,11:11~21.

[2] Zhang Yu-Jun.The study of image restoration techniques for aerial radiometric data.Chinese Journal of Geophysics,1990,33:405~412.

[3] Zhang Yu-Jun.A study of aero-magnetic and radiometric anomalies in some oil-gas field by image processing techniques.Chinese Journal of Geophysics,1994,37:505~515.

[4] Zhang Yu-Jun.Digital image processing of airborne radiometric and magnetic data from central Chai DaMu Basin.In:An Overview of Exploration Geophysics in China.Tulsa,American Society of Exploration Geophysicists.1989,517~535.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7778334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存