原理

简单的讲,将声音加载到高频载波上发射过去,接收到后解码听到语音

协议 、 语音路由

分类

每个地区的协议不同,
涉及计到国家安全。2G

对讲机三大协议:CDMA。频分多路。
是否是标准化协议?
每个地区的协议不同,涉及计到国家安全。和2G类似

语音路由是指对讲机在各种环境(是否在通话, 连接,断连各种附件)下,扬声
能够正确的选择扬声器播放语音,麦克风发送语音。语音路由模块是对讲机的传统模块。

通常对讲机采用的TDD模式,同一时刻只能一个人说话。

为什么?

单工模式

对讲机一般是单工模式,一般没有全双工的,手机是全工模式。你按住,对方就不能说话了。
dual-radio采用双工模式。连个车载对讲机的
连接方式改变?在一个工作模式下。两个对讲机的同步,完全一致。没有主从。
同步,是通过线连接的。自己设计通信协议。

双工模式

频分双工(FDD)和时分双工(TDD)是两种不同的双工方式
TDD用时间来分离接收和发送信道。在TDD方式的移动通信系统中,接收和发送使用同一频率载波的不同时隙作为信道的承载,其单方向的资源在时间上是不连续的,时间资源在两个方向上进行了分配。某个时间段由基站发送信号给移动台,另外的时间由移动台发送信号给基站,基站和移动台之间必须协同一致才能顺利工作。

全双工

FAQ

怎么提高对讲机的通信距离?

1,提高发射功率

对于手持机而言,发射功率一般可在0.5~5W之间选择;车载台可在10W~40W之间选择。如果使用低功率通讯有明显噪音而影响通信时,则换用较高发射功率,即可提高通讯质量和延长一定的通讯距离。理论上发射功率提高一倍,通讯距离大约可扩大至原距离的1.4倍。但如果发射功率无目的的随意加大也会带来耗电量增加,电磁辐射及干扰增加等负面影响。

2,尽量架高天线

大功率对讲机的优点

大功率对讲机绕射能力强,通信越好。

为什么?

对讲机在飞机上可以开机吗?

相对于手机U/V频段的对讲机对航空安全影响特别大,航空通信频率基本上接近V频段的对讲机频率,而且对讲机的发射功率也很大,如果在飞机上使用对讲机,会干扰飞机通讯或者飞行,从而有可能造成事故。

对讲机软件

通讯录、未接来电等的结构为什么采用链表?

链表的好处、插入、删除方便。
查询会采用顺序查找。

通讯录、未接来电等的存储地址是否交叉?

不交叉,独立地址空间。

比如老版本的手机,通讯录只能存200条。SIM卡通讯录只能存固定条数。

新版手机呢?地址空间是否会交叉?

通讯录、未接来电等的是怎样存储的?

以文件的形式存在flash上。不同的通讯录用偏移量表示。

  • 面临的挑战:插入和删除会造成大量数据的移位,较多写操作。
  • 解决办法是:在内存中插入和删除,然后统一写入flash上

貌似这个办法写操作更多吧??

之前没有缓存机制,整个链表在内存中构建好。用户从中间删除。

存储占用空间是否是固定的?如果是固定的为什么不采用数组的方式存储?

加载

对讲机开机时会加载。

每个链表有自己的id。比如通讯录链表的id=1,未接来电的id=3。
如果内存中找不到该id,就会重新加载。

对讲机 - 产品简介

背景

种类

  • 无基站:

    -talk-around模式,直联。最基本的。根据功率,比如5W 2-3公里。。

  • 带基站:警车、出租车。
  • 车载
  • repeat模式:
  • 漫游模式:

使用模式

group call,别人就打不出来了。
老大有priority call,能把别人挤下去。
为什么不采用双工?
技术无关。最早是模拟化协议,现在是数字化协议。
全双工也可以做。
用户习惯:
全双工复杂度高在哪?

大厂商

  • 摩托罗拉

FAQ

对讲机为什么不采用FDD模式?

FAQ

##

bazel简介

简介

什么是Bazel?

Bazel是一种用于软件自动化构建和测试的工具

为什么要用Bazel?

Bazel是一个类似于Make的编译工具,是Google为其内部软件开发的特点量身定制的工具,如今Google使用它来构建内部大多数的软件。Google认为直接用Makefile构建软件速度太慢,结果不可靠,所以构建了一个新的工具叫做Bazel,Bazel的规则层级更高。

Bazel的核心理念是:

  • 把一个项目分成若干个packages,在每个packages目录下需要放一个构建文件,包括这个包的信息。一个package中除了规则文件外,其余的文件,目录以及子packages都叫“targets”。
  • packages里要写明依赖关系,Bazel会知道哪些需要重新编译(只会编译修改后的包,及那些依赖于修改包的包)
  • 判断一个变化是否是包内部的变化。举例,在一个库中新增了一个helper函数,对于那些依赖于这个库的包,我们无需去重建,这就是内部变化;而要是改变了这个库的一个方法名称,这时候就要重建那些包了。

怎样用Bazel?

bazel构建函数

1
2
3
# target: BUILD文件中的每一条编译指令被称为一个target,它指向一系列的源文件和依赖,一个target也可以指向别的target。
- cc_binary: Binary rules
- cc_library: Library rules

Bazel是怎样工作的?

bazel的作用

1
2
3
4
5
6
7
8
9
# 从github下载tensorflow源代码
git clone --recursive https://github.com/tensorflow/tensorflow

## 进入根目录后编译
# 编译生成.so文件, 编译C++ API的库 (建议)
bazel build //tensorflow:libtensorflow_cc.so

# 也可以选择,编译C API的库
bazel build //tensorflow:libtensorflow.so

扩展阅读

tensorflow 架构

Tensorflow是一个跨平台库。C API之上兼容很多不同的编程语言。

  • Client:
    • Defines the computation as a dataflow graph.
    • Initiates graph execution using a session.
  • Distributed Master
    • Prunes a specific subgraph from the graph, as defined by the arguments to Session.run().
    • Partitions the subgraph into multiple pieces that run in different processes and devices.
    • Distributes the graph pieces to worker services.
    • Initiates graph piece execution by worker services.
  • Worker Services (one for each task)
    • Schedule the execution of graph operations using kernel implementations appropriate to the available hardware (CPUs, GPUs, etc).
    • Send and receive operation results to and from other worker services.
  • Kernel Implementations
    • Perform the computation for individual graph operations.

各个模块

-

  • layers module provides a high-level API that makes it easy to construct a neural network

High Level APIs

  • Eager Execution, which is the easiest way to use tensorflow.
  • Estimators, which introduces a high-level TensorFlow API that greatly simplifies ML programming.
  • Importing Data, which explains how to set up data pipelines to read data sets into your TensorFlow program.

参考