Bluetooth Controller BB Phsical Channel相关基础知识整理

       最近需要做一些BT Controller相关的新功能开发,于是将Controller的Phsical Channel的知识点重新复习一遍,为了检讨已经忘却或者现在或者将来的忘却,做个忘却的纪念。

        Phsical Channel 是为了描述Baseband层的连接而抽象的概念,那什么才可以叫做Phsical Channel 的连接呢?首先有三个基本要素,调频序列、packet的timing和access code。当俩个蓝牙RF处于同一个频点上的时候,并以能够调整到相同的相位,可以进行packet的传输,并且约定好以相同的跳频序列进行跳频,那么我们认为Phsical Channel就算建立起来。那这个连接和前面提示的三个要素有什么关系呢?

       首先我们来介绍跳频序列,它由BT Address的UAP和LAP来决定,而跳频序列的相位由BT 设备的CLK来决定,约定好了BT设备之间的通讯频点以及相关的调频序列和调频序列的相位,那就可以在设备之间进行通信。而Hopping是由BT Address是由Mater的BT Address来决定的。

       其次,如何保持在同一相位呢?在建立Phsical Channel的时候,会交互设备之间的CLOCK,这里的Master有自己的CLKR、CLKN和CLK以及CLK Offset。Slave设备也有自己的CLKR、CLKN和CLK以及CLK offset。CLKR是每一个BT设备的系统时钟,系统时钟需要转换为CLKN,对于Master来说,CLKN和CLK是等价的。那Master有一个自己的CLK,需要Slave要和Mater保持在同一个CLK,这样才会保持调频序列有同一个相位。那Slave也有自己的CLKR,也会加上一个offset产生一个CLKN,CLKN会加上一个预估的offset在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解释以下这段代码:import tensorflow as tf gpus =tf.config.experimental.list_physical_devices(device_type='GPU') tf.config.experimental.set_virtual_device_configuration(gpus[0],[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)]) #import scipy.io as sio import pickle import os,random import matplotlib.pyplot as plt #import scipy.stats from tensorflow import losses from tensorflow.keras import Model from tensorflow.keras import layers import matplotlib.pyplot as plt import tensorflow as tf import numpy as np #import scipy.io as sio #import scipy.stats import math import os import pdb from tensorflow import losses from model import ResNet18 from re_dataset_real import train_image1,train_label1,test_image1,test_label1,val_image1,val_label1 from re_dataset_imag import train_image2,train_label2,test_image2,test_label2,val_image2,val_label2 def phsical_loss(y_true, y_pred): y_true =tf.cast(y_true, y_pred.dtype) loss_real=tf.keras.losses.MSE(y_true[0],y_pred[0]) loss_img= tf.keras.losses.MSE(y_true[1],y_pred[1]) amp_ture=tf.pow(y_true[0],2)+tf.pow(y_true[1],2) amp_pred=tf.pow(y_pred[0],2)+tf.pow(y_pred[1],2) loss_amp=tf.keras.losses.MSE(amp_ture,amp_pred) return loss_real+loss_img+loss_amp#两个子模型各加一个完整约束 def angle_loss(y_true, y_pred): y_true = tf.cast(y_true, y_pred.dtype) img_ture=tf.atan2(y_true[1],y_true[0]) img_pred=tf.atan2(y_pred[1],y_pred[0]) return tf.keras.losses.MAE(img_ture,img_pred) def amp_loss(y_true, y_pred): y_true = tf.cast(y_true, y_pred.dtype) amp_ture=tf.pow(y_true[0],2)+tf.pow(y_true[1],2) amp_pred=tf.pow(y_pred[0],2)+tf.pow(y_pred[1],2) loss_phsical=tf.keras.losses.MSE(amp_ture,amp_pred) return loss_phsical model_in=tf.keras.Input((16,16,1)) model_real_out=ResNet18([2,2,2,2])(model_in) model_img_out=ResNet18([2,2,2,2])(model_in) model_all=tf.keras.Model(model_in,[model_real_out,model_img_out]) model_all.compile(loss=phsical_loss, optimizer=tf.keras.optimizers.Adam(tf.keras.optimizers.schedules.InverseTimeDecay( 0.001, decay_steps=250*25, decay_rate=1, staircase=False)), metrics=['mse']) checkpoint_save_path= "C:\\Users\\Root\\Desktop\\bysj\\model_all.ckpt" if os.path.exists(checkpoint_save_path + '.index'): print('------------------load model all---------------------') model_all.load_weights(checkpoint_save_path) cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path, save_weights_only=True,save_best_only=True)
最新发布
06-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值