最短路径导航查询系统(编码)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径导航查询系统(编码)相关的知识,希望对你有一定的参考价值。

信道编码技术
数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续、出现马赛克等现象。所以通过信道编码这一环节,对数码流进行相应的处理,使系统具有一定的纠错能力和抗干扰能力,可极大地避免码流传送中误码的发生。误码的处理技术有纠错、交织、线性内插等。
提高数据传输效率,降低误码率是信道编码的任务。信道编码的本质是增加通信的可靠性。但信道编码会使有用的信息数据传输减少,信道编码的过程是在源数据码流中加插一些码元,从而达到在接收端进行判错和纠错的目的,这就是我们常常说的开销。这就好象我们运送一批玻璃杯一样,为了保证运送途中不出现打烂玻璃杯的情况,我们通常都用一些泡沫或海棉等物将玻璃杯包装起来,这种包装使玻璃杯所占的容积变大,原来一部车能装5000各玻璃杯的,包装后就只能装4000个了,显然包装的代价使运送玻璃杯的有效个数减少了。同样,在带宽固定的信道中,总的传送码率也是固定的,由于信道编码增加了数据量,其结果只能是以降低传送有用信息码率为代价了。将有用比特数除以总比特数就等于编码效率了,不同的编码方式,其编码效率有所不同。
数字电视中常用的纠错编码,通常采用两次附加纠错码的前向纠错(FEC)编码。RS编码属于第一个FEC,188字节后附加16字节RS码,构成(204,188)RS码,这也可以称为外编码。第二个附加纠错码的FEC一般采用卷积编码,又称为内编码。外编码和内编码结合一起,称之为级联编码。级联编码后得到的数据流再按规定的调制方式对载频进行调制。
前向纠错码(FEC)的码字是具有一定纠错能力的码型,它在接收端解码后,不仅可以发现错误,而且能够判断错误码元所在的位置,并自动纠错。这种纠错码信息不需要储存,不需要反馈,实时性好。所以在广播系统(单向传输系统)都采用这种信道编码方式。
下图是纠错码的各种类型:
1、RS编码
RS码即里德-所罗门码,它是能够纠正多个错误的纠错码,RS码为(204,188,t=8),其中t是可抗长度字节数,对应的188符号,监督段为16字节(开销字节段)。实际中实施(255,239,t=8)的RS编码,即在204字节(包括同步字节)前添加51个全“0”字节,产生RS码后丢弃前面51个空字节,形成截短的(204,188)RS码。RS的编码效率是:188/204。
2、卷积码
卷积码非常适用于纠正随机错误,但是,解码算法本身的特性却是:如果在解码过程中发生错误,解码器可能会导致突发性错误。为此在卷积码的上部采用RS码块, RS码适用于检测和校正那些由解码器产生的突发性错误。所以卷积码和RS码结合在一起可以起到相互补偿的作用。卷积码分为两种:
(1)基本卷积码:
基本卷积码编码效率为,η=1/2, 编码效率较低,优点是纠错能力强。
(2)收缩卷积码:
如果传输信道质量较好,为提高编码效率,可以采样收缩截短卷积码。有编码效率为:η=1/2、2/3、3/4、5/6、7/8这几种编码效率的收缩卷积码。
编码效率高,一定带宽内可传输的有效比特率增大,但纠错能力越减弱。
3、Turbo码
1993 年诞生的Turbo 码,单片Turbo 码的编码/解码器,运行速率达40Mb/s。该芯片集成了一个32×32 交织器,其性能和传统的RS 外码和卷积内码的级联一样好。所以Turbo码是一种先进的信道编码技术,由于其不需要进行两次编码,所以其编码效率比传统的RS+卷积码要好。
4、交织
在实际应用中,比特差错经常成串发生,这是由于持续时间较长的衰落谷点会影响到几个连续的比特,而信道编码仅在检测和校正单个差错和不太长的差错串时才最有效(如RS只能纠正8个字节的错误)。为了纠正这些成串发生的比特差错及一些突发错误,可以运用交织技术来分散这些误差,使长串的比特差错变成短串差错,从而可以用前向码对其纠错,例如:在DVB-C系统中,RS(204,188)的纠错能力是8个字节,交织深度为12,那么纠可抗长度为8×12=96个字节的突发错误。
实现交织和解交织一般使用卷积方式。
交织技术对已编码的信号按一定规则重新排列,解交织后突发性错误在时间上被分散,使其类似于独立发生的随机错误,从而前向纠错编码可以有效的进行纠错,前向纠错码加交积的作用可以理解为扩展了前向纠错的可抗长度字节。纠错能力强的编码一般要求的交织深度相对较低。纠错能力弱的则要求更深的交织深度。
下图是交织的原理图:
一般来说,对数据进行传输时,在发端先对数据进行FEC编码,然后再进行交积处理。在收端次序和发端相反,先做去交积处理完成误差分散,再FEC解码实现数据纠错。另外,从上图可看出,交积不会增加信道的数据码元。
根据信道的情况不同,信道编码方案也有所不同,在DVB-T里由于由于是无线信道且存在多径干扰和其它的干扰,所以信道很“脏”,为此它的信道编码是:RS+外交积+卷积码+内交积。采用了两次交积处理的级联编码,增强其纠错的能力。RS作为外编码,其编码效率是188/204(又称外码率),卷积码作为内编码,其编码效率有1/2、2/3、3/4、5/6、7/8五种(又称内码率)选择,信道的总编码效率是两种编码效率的级联叠加。设信道带宽8MHZ,符号率为6.8966Ms/S,内码率选2/3,16QAM调制,其总传输率是27.586Mbps,有效传输率是27.586*(188/204)*(2/3)=16.948Mbps,如果加上保护间隔的插入所造成的开销,有效码率将更低。
在DVB-C里,由于是有线信道,信道比较“干净”,所以它的信道编码是:RS+交积。一般DVB-C的信道物理带宽是8MHZ,在符号率为6.8966Ms/s,调制方式为64QAM的系统,其总传输率是41.379Mbps,由于其编码效率为188/204,所以其有效传输率是41.379*188/204=38.134Mbps。
在DVB-S里,由于它是无线信道,所以它的信道编码是:RS+交积+卷积码。也是级联编码。
下图是DVB-T、DVB-C、DVB-S各自的信道编码方式:
5、伪随机序列扰码
进行基带信号传输的缺点是其频谱会因数据出现连“1”和连“0”而包含大的低频成分,不适应信道的传输特性,也不利于从中提取出时钟信息。解决办法之一是采用扰码技术,使信号受到随机化处理,变为伪随机序列,又称为“数据随机化”和“能量扩散”处理。扰码不但能改善位定时的恢复质量,还可以使信号频谱平滑,使帧同步和自适应同步和自适应时域均衡等系统的性能得到改善。
扰码虽然“扰乱”了原有数据的本来规律,但因为是人为的“扰乱”,在接收端很容易去加扰,恢复成原数据流。
实现加扰和解码,需要产生伪随机二进制序列(PRBS)再与输入数据逐个比特作运算。PRBS也称为m序列,这种m序列与TS的数据码流进行模2加运算后,数据流中的“1”和“0”的连续游程都很短,且出现的概率基本相同。
利用伪随机序列进行扰码也是实现数字信号高保密性传输的重要手段之一。一般将信源产生的二进制数字信息和一个周期很长的伪随即序列模2相加,就可将原信息变成不可理解的另一序列。这种信号在信道中传输自然具有高度保密性。在接收端将接收信号再加上(模2和)同样的伪随机序列,就恢复为原来发送的信息。
在DVB-C系统中的CA系统原理就源于此,只不过为了加强系统的保密性,其伪随机序列是不断变化的(10秒变一次),这个伪随机序列又叫控制字(CW)。

关于其发展,给你个幻灯片看
参考技术A 4135463

如何使用实时导航在Kotlin的Google地图上绘制最短路径?

任何人都可以帮我在地图上使用Kotlin绘制最短路径并在导航时更新我的​​路径或更新我的LatLng。我必须在类似于驾驶室导航的OLA上实现这一点。但我能够在两点之间绘制最短路径,即驱动程序和用户。

提前致谢

答案

试试此代码:

在gradle文件中添加依赖项

 compile 'org.jetbrains.anko:anko-sdk15:0.8.2'
 compile 'com.beust:klaxon:0.30'



override fun onMapReady(googleMap: GoogleMap) {
mMap = googleMap
val sydney = LatLng(-34.0, 151.0)
val opera = LatLng(-33.9320447,151.1597271)
mMap!!.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
mMap!!.addMarker(MarkerOptions().position(opera).title("Opera House"))        
}

下一步是创建一个PolylineOptions对象,设置颜色和宽度。我们稍后将使用此对象添加点。

val options = PolylineOptions()
options.color(Color.RED)
options.width(5f)

现在,我们需要构建用于进行API调用的URL。我们可以将它放在一个单独的函数中以使它不受影响:

private fun getURL(from : LatLng, to : LatLng) : String {
    val origin = "origin=" + from.latitude + "," + from.longitude
    val dest = "destination=" + to.latitude + "," + to.longitude
    val sensor = "sensor=false"
    val params = "$origin&$dest&$sensor"
 return "https://maps.googleapis.com/maps/api/directions/json?$params"
 }
  And, of course, we call it by doing:

  val url = getURL(sydney, opera)

 async {
   val result = URL(url).readText()
   uiThread {
   // this will execute in the main thread, after the async call is done }
 }

一旦我们将字符串存储并准备就绪,代码的uiThread部分就会执行,其余的代码也会出现。现在我们准备从字符串中提取JSON对象,我们将使用klaxon。这也很简单:

 val parser: Parser = Parser()
 val stringBuilder: StringBuilder = StringBuilder(result)
 val json: JsonObject = parser.parse(stringBuilder) as JsonObject

实际上遍历JSON对象以获得积分相当容易。 klaxon易于使用,其JSON数组可以像任何Kotlin List一样使用。

 val routes = json.array<JsonObject>("routes")
 val points = routes!!["legs"]["steps"][0] as JsonArray<JsonObject>

  val polypts = points.map { it.obj("polyline")?.string("points")!!  }
  val polypts = points.flatMap { decodePoly(it.obj("polyline")?.string("points")!!)  
   }

  //polyline
  options.add(sydney)
 for (point in polypts) options.add(point)
 options.add(opera)
  mMap!!.addPolyline(options)

 mMap!!.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100))

请参阅:https://medium.com/@irenenaya/drawing-path-between-two-points-in-google-maps-with-kotlin-in-android-app-af2f08992877

以上是关于最短路径导航查询系统(编码)的主要内容,如果未能解决你的问题,请参考以下文章

C/C++交通咨询系统设计哈夫曼编码问题[2023-05-11]

烟台山旅游导航

如何使用实时导航在Kotlin的Google地图上绘制最短路径?

“化学GPS”能快速找出两点间最短路径 速度快过电子GPS

网络层-第六节3:开放最短路径优先OSPF的基本工作原理

最短路径(图论-北京地铁线路查询)