当前位置: 首页 > news >正文

ADC 的音频实验,无线收发模块( nRF24L01)

nRF24L01 采用 QFN20 封装,有 20 个引脚,以下是各引脚的详细介绍:
1. 电源引脚
◦ VDD:电源输入端,一般接 + 3V 电源,为芯片提供工作电压,供电电压范围为 1.9V~3.6V。
◦ VSS:电源地引脚,接地,为芯片提供电气参考电位。
◦ VDD_PA:为功率放大器供电,输出为 1.8V,给射频功率放大器提供所需的电源。
◦ DVDD:去耦电路电源正极端,用于连接去耦电容,为芯片内部电路提供稳定的电源。
2. SPI 接口引脚
◦ CSN:SPI 片选信号引脚,低电平有效。当 CSN 为低电平时,芯片被选中,微处理器可以通过 SPI 接口对 nRF24L01 进行配置和数据传输。
◦ SCK:SPI 时钟引脚,用于同步 SPI 数据传输,由微处理器提供时钟信号,决定数据传输的速率和时序。
◦ MOSI:主设备输出从设备输入引脚,微处理器通过该引脚将数据发送到 nRF24L01 芯片中,进行寄存器配置、发送数据等操作。
◦ MISO:主设备输入从设备输出引脚,nRF24L01 通过该引脚将数据返回给微处理器,如返回寄存器的值、接收的数据等。
3. 控制与状态引脚
◦ CE:使能发射或接收引脚,数字输入。在 CSN 为低的情况下,CE 协同 CONFIG 寄存器共同决定 nRF24L01 的状态,用于选择芯片的工作模式,如发射模式、接收模式、待机模式等。
◦ IRQ:中断标志位引脚,数字输出,低电平触发。当状态寄存器中 TX_DS(数据发送完成中断位)、RX_DR(接收数据中断位)或 MAX_RT(达到最多次重发中断位)为高时触发中断,通知微处理器进行相应的处理。
4. 晶体振荡器引脚
◦ XC2:晶体振荡器 2 脚,模拟输出,用于连接外部晶体振荡器的一端,与 XC1 共同构成晶体振荡电路,为芯片提供时钟信号。
◦ XC1:晶体振荡器 1 脚 / 外部时钟输入脚,模拟输入,可连接外部晶体振荡器的另一端,也可以作为外部时钟信号的输入引脚。
5. 天线接口引脚
◦ ANT1:天线接口 1,用于连接天线,实现射频信号的发射和接收。
◦ ANT2:天线接口 2,同样用于连接天线,与 ANT1 共同作用,提高射频信号的传输性能。
6. 参考电流输入引脚
◦ IREF:参考电流输入引脚,模拟输入,用于输入参考电流,为芯片内部的电路提供基准电流。

  1. ADC 配置

/* ADC 及引脚 定义 */

#define ADC_ADCX_CHY_GPIO_PORT GPIOA

#define ADC_ADCX_CHY_GPIO_PIN GPIO_PIN_5

#define ADC_ADCX_CHY_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOC_CLK_ENABLE();\

}while(0) /* PA 口时钟使能 */

#define ADC_ADCX ADC1

#define ADC_ADCX_CHY ADC_CHANNEL_5 /* 通道 Y, 0 <= Y <= 16 */

/* ADC1 时钟使能 */

#define ADC_ADCX_CHY_CLK_ENABLE() do{ __HAL_RCC_ADC1_CLK_ENABLE();}while(0)

ADC_HandleTypeDef hadc;

void ADC_Init(void)

{

        __HAL_RCC_ADC1_CLK_ENABLE();// 使能ADC时钟

    //  配置ADC结构体参数

    hadc.Instance = ADC1;  // 选择使用ADC1,

hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;

    // 时钟预分频,这里将APB2时钟(PCLK)除以4作为ADC时钟,

hadc.Init.Resolution = ADC_RESOLUTION_12B; // 分辨率设置为12位,这意味着ADC转换结果的范围是0 - 4095

hadc.Init.ScanConvMode = DISABLE; // 禁用扫描模式,因为我们只处理单个通道

hadc.Init.ContinuousConvMode = ENABLE;

// 启用连续转换模式,ADC会不断进行转换,而不是只进行一次

hadc.Init.DiscontinuousConvMode = DISABLE; // 禁用不连续转换模式

hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

// 不使用外部触发转换,即采用软件触发

 hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发ADC转换

hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐,转换结果的低12位有效

hadc.Init.NbrOfConversion = 1; // 转换通道数量为1

hadc.Init.DMAContinuousRequests = DISABLE; // 禁用DMA连续请求,这里不使用DMA传输

hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; // 单个转换结束标志

    // 3. 初始化ADC

if (HAL_ADC_Init(&hadc) != HAL_OK)

    {

        Error_Handler();// 初始化失败处理

    }

    ADC_ChannelConfTypeDef sConfig;// 4. 配置ADC通道

sConfig.Channel = ADC_CHANNEL_0;  // 选择ADC通道0,可根据实际连接的引脚修改

    sConfig.Rank = 1; // 通道转换顺序为第1个

    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;

    // 采样时间设置为3个ADC时钟周期,可根据需要调整

    if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)

    {

                Error_Handler();// 通道配置失败处理

    }

}

// 错误处理函数示例

void Error_Handler(void)

{

    while (1)

    {

        // 可以添加错误提示代码,如点亮LED等

    }

}

音频信号采集,模拟信号转换为数字信号

uint16_t adc_value;

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)

{

    if (hadc->Instance == ADC1)

    {

        adc_value = HAL_ADC_GetValue(hadc);

        // 在这里可以对采集到的数字音频信号进行进一步处理

GPIO_InitTypeDef gpio_init_struct;

ADC_ADCX_CHY_CLK_ENABLE(); /* 使能 ADCx 时钟 */

ADC_ADCX_CHY_GPIO_CLK_ENABLE(); /* 开启 GPIO 时钟 */

/* AD 采集引脚模式设置,模拟输入 */

gpio_init_struct.Pin = ADC_ADCX_CHY_GPIO_PIN;

gpio_init_struct.Mode = GPIO_MODE_ANALOG;

gpio_init_struct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);

    }

}

编码与调制

#include "nrf24l01.h"

void ASK_Modulate(uint16_t data)

{

    // 将数字信号转换为适合ASK调制的形式,例如0对应低电平,非0对应高电平

    uint8_t modulated_data = (data == 0)? 0 : 1;

    // 发送调制后的数据到nRF24L01

    NRF24L01_TxPacket(&modulated_data);

}

无线传输

#include "stm32f4xx_hal.h"

#include "nrf24l01.h"

// 定义nRF24L01相关引脚

#define NRF24L01_CE_Pin GPIO_PIN_0

#define NRF24L01_CE_GPIO_Port GPIOA

#define NRF24L01_CSN_Pin GPIO_PIN_1

#define NRF24L01_CSN_GPIO_Port GPIOA

#define NRF24L01_IRQ_Pin GPIO_PIN_2

#define NRF24L01_IRQ_GPIO_Port GPIOA

// 定义SPI句柄

extern SPI_HandleTypeDef hspi1;

// 初始化nRF24L01相关GPIO引脚

static void NRF24L01_GPIO_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStruct

= {0};

    __HAL_RCC_GPIOA_CLK_ENABLE();

    // 配置CE引脚

    GPIO_InitStruct

.Pin = NRF24L01_CE_Pin;

    GPIO_InitStruct

.Mode = GPIO_MODE_OUTPUT_PP;

    GPIO_InitStruct

.Pull = GPIO_NOPULL;

    GPIO_InitStruct

.Speed = GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(NRF24L01_CE_GPIO_Port, &GPIO_InitStruct);

    // 配置CSN引脚

    GPIO_InitStruct

.Pin = NRF24L01_CSN_Pin;

    GPIO_InitStruct

.Mode = GPIO_MODE_OUTPUT_PP;

    GPIO_InitStruct

.Pull = GPIO_NOPULL;

    GPIO_InitStruct

.Speed = GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(NRF24L01_CSN_GPIO_Port, &GPIO_InitStruct);

    // 配置IRQ引脚

    GPIO_InitStruct

.Pin = NRF24L01_IRQ_Pin;

    GPIO_InitStruct

.Mode = GPIO_MODE_INPUT;

    GPIO_InitStruct

.Pull = GPIO_NOPULL;

    HAL_GPIO_Init(NRF24L01_IRQ_GPIO_Port, &GPIO_InitStruct);

    // 初始化CE和CSN引脚电平

    HAL_GPIO_WritePin(NRF24L01_CE_GPIO_Port, NRF24L01_CE_Pin, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

}

// 向nRF24L01写寄存器

static void NRF24L01_Write_Reg(uint8_t reg, uint8_t value)

{

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

    HAL_SPI_Transmit(&hspi1, ®, 1, 100);

    HAL_SPI_Transmit(&hspi1, &value, 1, 100);

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

}

// 从nRF24L01读寄存器

static uint8_t NRF24L01_Read_Reg(uint8_t reg)

{

    uint8_t value;

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

    HAL_SPI_Transmit(&hspi1, ®, 1, 100);

    HAL_SPI_Receive(&hspi1, &value, 1, 100);

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

    return value;

}

// 初始化nRF24L01

void NRF24L01_Init(void)

{

    // 初始化相关GPIO引脚

    NRF24L01_GPIO_Init();

    // 延时一段时间等待nRF24L01上电稳定

    HAL_Delay(100);

    // 配置为发射模式(可根据需要修改为接收模式)

    NRF24L01_Write_Reg(NRF24L01_REG_CONFIG, 0x0E); // 使能CRC,2字节CRC校验,上电,发射模式

    // 设置通道频率

    NRF24L01_Write_Reg(NRF24L01_REG_RF_CH, 0x40); // 通道76

    // 设置数据速率和发射功率

    NRF24L01_Write_Reg(NRF24L01_REG_RF_SETUP, 0x0F); // 2Mbps速率,最大发射功率

    // 设置接收地址宽度

    NRF24L01_Write_Reg(NRF24L01_REG_SETUP_AW, 0x03); // 5字节地址宽度

    // 设置自动重发时间和次数

    NRF24L01_Write_Reg(NRF24L01_REG_SETUP_RETR, 0x1A); // 自动重发延迟500us,重发次数10次

    // 设置接收通道0地址

    uint8_t rx_addr_p0[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

    HAL_SPI_Transmit(&hspi1, (uint8_t *)&NRF24L01_CMD_WRITE_REG + NRF24L01_REG_RX_ADDR_P0, 1, 100);

    HAL_SPI_Transmit(&hspi1, rx_addr_p0, 5, 100);

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

    // 设置发射地址

    uint8_t tx_addr[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_RESET);

    HAL_SPI_Transmit(&hspi1, (uint8_t *)&NRF24L01_CMD_WRITE_REG + NRF24L01_REG_TX_ADDR, 1, 100);

    HAL_SPI_Transmit(&hspi1, tx_addr, 5, 100);

    HAL_GPIO_WritePin(NRF24L01_CSN_GPIO_Port, NRF24L01_CSN_Pin, GPIO_PIN_SET);

    // 设置接收通道0数据长度

    NRF24L01_Write_Reg(NRF24L01_REG_RX_PW_P0, 1); // 1字节数据长度

    // 清除中断标志

    NRF24L01_Write_Reg(NRF24L01_REG_STATUS, 0x70);

}int main(void)

{

    // 初始化ADC、nRF24L01等

    ADC_Init();

    NRF24L01_Init();

    while (1)

    {

        // 启动ADC转换

        HAL_ADC_Start_IT(&hadc);

        // 等待ADC转换完成,在中断中获取adc_value

        // 对采集到的音频数据进行编码和ASK调制并发送

        ASK_Modulate(adc_value);

    }

}

DAC 实验数模转换器

typedef struct

{

 DAC_TypeDef *Instance; /* DAC 寄存器基地址 */

 __IO HAL_DAC_StateTypeDef State; /* DAC 工作状态 */

 HAL_LockTypeDef Lock; /* DAC 锁定对象 */

 DMA_HandleTypeDef *DMA_Handle1; /* 通道 1 的 DMA 处理句柄指针 */

 DMA_HandleTypeDef *DMA_Handle2; /* 通道 2 的 DMA 处理句柄指针 */

 __IO uint32_t ErrorCode; /* DAC 错误代码 */

} DAC_HandleTypeDef;

typedef struct

{

  uint32_t Trigger;     //指定DAC触发源

DAC_TRIGGER_NONE:不使用触发源,通过软件触发。

DAC_TRIGGER_T6_TRGO:使用定时器 6 的触发输出(TRGO)作为触发源。

DAC_TRIGGER_T3_TRGO:使用定时器 3 的触发输出(TRGO)作为触发源。

  uint32_t OutputBuffer;  //指定DAC输出缓冲状态

DAC_OUTPUTBUFFER_ENABLE:使能输出缓冲,提高输出驱动能力。

DAC_OUTPUTBUFFER_DISABLE:禁用输出缓冲。

} DAC_InitTypeDef;

MSP 初始化函数 HAL_DAC_MspInit,

void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac);

DAC 的通道参数初始化函数:

HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac,

DAC_ChannelConfTypeDef *sConfig, uint32_t Channel);

typedef struct

{

 uint32_t DAC_Trigger; /* DAC 触发源的选择 */

 uint32_t DAC_OutputBuffer; /* 启用或者禁用 DAC 通道输出缓冲区 */

} DAC_ChannelConfTypeDef;

使能启动 DAC 转换通道函数,

HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);

DAC 的通道输出值函数,其声明如下:

HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel,

uint32_t Alignment, uint32_t Data);

Channel选择输出通道, DAC_CHANNEL_1或DAC_CHANNEL_2

DAC 读取通道输出值函数:

uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef *hdac, uint32_t Channel);

启动 DAC 使用 DMA 方式传输函数,

HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel,

uint32_t *pData, uint32_t Length, uint32_t Alignment);

形参 3 是使用 DAC 输出数据缓冲区的指针。

形参 4 是 DAC 输出数据的长度。

形参 5 是指定 DAC 通道的数据对齐方式,有:DAC_ALIGN_8B_R(8 位右对齐)、

DAC_ALIGN_12B_L(12 位左对齐)和 DAC_ALIGN_12B_R(12 位右对齐)三种方式

停止 DAC 的 DMA 方式函数,其声明如下:

HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef *hdac, uint32_t Channel);

配置主模式下的定时器触发输出选择函数,其声明如下:

HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(

TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);

接收端,无线接收

uint8_t received_data;

void NRF24L01_Receive(void)

{

    if (NRF24L01_RxPacket(&received_data) == 0)

    {

        // 接收成功,对received_data进行处理

    }

}

解调与解码

uint16_t ASK_Demodulate(uint8_t data)

{

    // ASK解调,将接收到的数据转换为数字音频信号形式

return (data == 0)? 0 : 1000; // 这里假设0对应0,1对应1000,实际需根据编码情况调整

}

DAC 配置与音频输出

DAC_HandleTypeDef hdac;

void DAC_Init(void)

{

    hdac.Instance = DAC;

    hdac.Init.OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

    HAL_DAC_Init(&hdac);

    // 配置DAC通道

    DAC_ChannelConfTypeDef sConfig;

    sConfig.DAC_Channel = DAC_CHANNEL_1;

    sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

    HAL_DAC_ConfigChannel(&hdac, &sConfig);

}

int main(void)

{

    // 初始化nRF24L01、DAC等

    NRF24L01_Init();

    DAC_Init();

    while (1)

    {

        // 接收无线数据

        NRF24L01_Receive();

        // 对接收数据进行ASK解调

        uint16_t demodulated_data = ASK_Demodulate(received_data);

        // 通过DAC输出模拟音频信号

        HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, demodulated_data);

    }

}

相关文章:

ADC 的音频实验,无线收发模块( nRF24L01)

nRF24L01 采用 QFN20 封装&#xff0c;有 20 个引脚&#xff0c;以下是各引脚的详细介绍&#xff1a; 1. 电源引脚 ◦ VDD&#xff1a;电源输入端&#xff0c;一般接 3V 电源&#xff0c;为芯片提供工作电压&#xff0c;供电电压范围为 1.9V&#xff5e;3.6V。 ◦ VSS&#xf…...

Swagger2 Knife4jConfig 配置,父子项目swagger扫描多个子模块中的Controller生成接口文档:

问题: 需求父子项目swagger扫描多个子模块中的Controller生成接口文档: Swagger2Knife4jConfig 配置放在了 springboot-app 启动项目里&#xff0c;而 tiger-web 和 tiger-web2 这两个子项目有自己的 Controller。这种情况下&#xff0c;Swagger 可能无法正确扫描 tiger-web 和…...

Unity UI 道路线跟随:让图标沿道路轨迹移动

在 Unity UI 开发中&#xff0c;有时需要让图标沿着一条道路轨迹移动&#xff0c;比如地图上的车辆行驶动画、导航路径指示等。本文介绍如何基于 UI 图片中的道路线生成曲线&#xff0c;并使用 Slider 控制图标沿轨迹运动&#xff0c;适用于 UI 导航、路径跟随动画等场景。 1. …...

Springboot核心:拦截器

拦截器是 Spring 框架提供的核心功能之一,属于一种设计模式&#xff0c;它允许在某个方法调用或请求处理前后执行自定义逻辑&#xff0c;是一种AOP&#xff08;面向切面编程&#xff09;机制。它们可以在不修改原有业务逻辑的情况下&#xff0c;对进入系统的请求进行预处理和后…...

【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录解决方案

【AI学习笔记】基于UnityDeepSeek开发的一些BUG记录&解决方案 背景前摇&#xff1a;&#xff08;省流可不看&#xff09; Unity是大学学的&#xff0c;AI是研究生学的&#xff0c;DeepSeek是第一份实习偷师的&#xff0c;三合一的梦是最近开始做的&#xff0c;BUG是今天遇…...

六西格玛设计培训如何破解风电设备制造质量与成本困局

2023年&#xff0c;中国风电行业装机容量突破4.3亿千瓦&#xff0c;稳居全球第一&#xff0c;但高速扩张背后暗藏隐忧&#xff1a; 质量痛点&#xff1a;叶片开裂、齿轮箱故障等缺陷频发&#xff0c;运维成本占项目全生命周期成本超30%&#xff1b;成本压力&#xff1a;原材料…...

xml 和json互转工具

工具1 有个问题会导致springboot返回捕获的异常编程xml格式 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.json.JSONObject; import org.json.XML; import org.w3c.dom.Document;import javax.xm…...

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…...

【RK3588嵌入式图形编程】-SDL2-鼠标输入处理

鼠标输入处理 文章目录 鼠标输入处理1、概述2、鼠标移动事件3、鼠标点击事件4、鼠标点击位置5、鼠标双击6、鼠标进入和离开事件7、总结在本文中,将介绍如何在 SDL2 中检测和处理鼠标输入事件,包括鼠标移动、按钮点击以及窗口进入/退出。 1、概述 在本文中,我们将详细介绍如…...

知识管理成功:关键指标和策略,研究信息的投资回报率

信息过载会影响生产力。没有人工智能的帮助&#xff0c;信息过载会影响生产力。大量的可用信息&#xff0c;知识工作者不仅仅是超负荷工作&#xff1b;他们感到不知所措&#xff0c;他们倾向于浪费时间&#xff08;和脑细胞&#xff09;来应付他们被大量的数据抛向他们&#xf…...

Linux权限提升-内核溢出

一&#xff1a;Web到Linux-内核溢出Dcow 复现环境&#xff1a;https://www.vulnhub.com/entry/lampiao-1,249/ 1.信息收集&#xff1a;探测⽬标ip及开发端⼝ 2.Web漏洞利⽤&#xff1a; 查找drupal相关漏洞 search drupal # 进⾏漏洞利⽤ use exploit/unix/webapp/drupal_dr…...

Bootstrap5 折叠功能详解

Bootstrap5 折叠功能详解 引言 Bootstrap 是一个流行的前端框架&#xff0c;它提供了许多组件和工具&#xff0c;使得开发者可以轻松构建响应式网站。在 Bootstrap5 中&#xff0c;折叠&#xff08;Collapse&#xff09;组件得到了增强&#xff0c;使其更加灵活和易于使用。本…...

JAVA:Spring Boot 项目中自定义 Banner 的技术指南

1、简述 在 Spring Boot 项目中&#xff0c;当应用启动时会显示默认的 Spring 标志和版本信息。定制化的启动 Banner 不仅可以美化应用&#xff0c;还能在项目中增加个性化的品牌印记&#xff0c;甚至可以提供一些关键信息。本文将介绍如何在 Spring Boot 项目中自定义启动 Ba…...

【虚幻引擎UE】UE4.23到UE5.5的核心功能变化

简单总结从UE4.23到UE5.5&#xff0c;虚幻引擎的重大变化&#xff1a; 1. WebGL/HTML5 平台支持和像素流 UE4.23-UE4.25&#xff1a;移除官方HTML5支持&#xff0c;改为社区插件维护。 但通过第三方插件&#xff08;如WebAssemblyWebGPU&#xff09;可在浏览器运行部分项目。U…...

信号检测和信道均衡的联系

1. 系统模型 假设一个通信系统的数学模型如下&#xff1a; 发送信号&#xff1a; s [ s 1 , s 2 , … , s N ] T \mathbf{s} [s_1, s_2, \dots, s_N]^T s[s1​,s2​,…,sN​]T&#xff0c;其中 s i s_i si​ 是发送符号。信道矩阵&#xff1a; H \mathbf{H} H&#xff08;…...

在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程

既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…...

26、深度学习-自学之路-NLP自然语言处理-理解加程序,怎么把现实的词翻译给机器识别。

一、怎么能让机器能够理解我们的语言呢&#xff0c;我们可以利用神经网络干很多的事情&#xff0c;那么我们是不是也可以用神经元做自然语言处理呢&#xff0c;现在很多的实际应用已经说明了这个问题&#xff0c;可以这么做。 那我们考虑一下该怎么做&#xff0c;首先我们应该…...

微信服务号推送消息

这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户...

Excel常用操作

Excel常用操作 学习资源 37_电子表格处理考点精讲_设置数据格式_哔哩哔哩_bilibili 快速输入数据与编辑数据 一个工作簿可以包含多个工作表 特殊数据的添加格式 输入负数, 例如-3、-5 常规输入, 直接输入-3、-5;使用(), 例如在单元格中输入(3)回车即可变为-3;上述括号不区分中…...

得物端智能视频封面推荐

一、背景 什么要做智能封面&#xff1f; 用户可以在得物购物&#xff0c;也可以在得物社区分享自己的生活。 得物社区中的视频使用双列流&#xff0c;每条内容包含封面、标题等。 对得物社区的创作者而言&#xff0c;选择视频封面是创作链路的重要环节。对得物社区的消费者…...

【Stable Diffusion部署至GNU/Linux】安装流程

以下是安装Stable Diffusion的步骤,以Ubuntu 22.04 LTS为例子。 显卡与计算架构介绍 CUDA是NVIDIA GPU的专用并行计算架构 技术层级说明CUDA Toolkit提供GPU编译器(nvcc)、数学库(cuBLAS)等开发工具cuDNN深度神经网络加速库(需单独下载)GPU驱动包含CUDA Driver(需与CUDA …...

介绍 Liquibase、Flyway、Talend 和 Apache NiFi:选择适合的工具

在现代软件开发中&#xff0c;尤其是在数据库管理和数据集成方面&#xff0c;选择合适的工具至关重要。本文将介绍四个流行的工具&#xff1a;Liquibase、Flyway、Talend 和 Apache NiFi&#xff0c;分析它们的应用、依赖以及如何选择适合的工具。 1. Liquibase 简介&#xff…...

Unity 接入Tripo 文生模型,图生模型

官方网站&#xff1a;https://www.tripo3d.ai/app/home自行注册账号并且登陆下载Unity插件&#xff1a;https://cdn-web.tripo3d.ai/plugin/tripo-unity.zip申请apikey&#xff1a; https://platform.tripo3d.ai/api-keys使用&#xff08;后续过程就按照第二步下载的插件里面的…...

黑马Redis详细笔记(实战篇---短信登录)

目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …...

Unity 增量打包AssetBundle

背景 打包太慢了&#xff0c;想要没改动的资源不重新打包浪费时间。 来源 官方文章&#xff1a;https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍&#xff1a;https://learn.unity.com/tutorial/assets-resources-and…...

前端 TypeError 错误永久消失术

作者&#xff1a;来自 vivo 互联网大前端团队- Sun Maobin 通过开发 Babel 插件&#xff0c;打包时自动为代码添加 可选链运算符(?.)&#xff0c;从而有效避免 TypeError 的发生。 一、背景介绍 在 JS 中当获取引用对象为空值的属性时&#xff0c;程序会立即终止运行并报错&…...

【视频总结】Deep Dive into LLMs like ChatGPT 深入探索像ChatGPT这样的大语言模型|Andrej Karpathy

【视频总结】Deep Dive into LLMs like ChatGPT 深入探索像ChatGPT这样的大语言模型&#xff5c;Andrej Karpathy 大型语言模型&#xff08;LLM&#xff09;工作原理与使用指南核心观点模型训练三阶段1. 预训练阶段2. 后训练阶段&#xff08;Post-training&#xff09;3. 强化学…...

内网ip网段记录

1.介绍 常见的内网IP段有&#xff1a; A类&#xff1a; 10.0.0.0/8 大型企业内部网络&#xff08;如 AWS、阿里云&#xff09; 10.0.0.0 - 10.255.255.255 B类&#xff1a;172.16.0.0/12 中型企业、学校 172.16.0.0 - 172.31.255.255 C类&#xff1a;192.168.0.0/16 家庭…...

本地部署DeepSeek + AnythingLLM 搭建高效安全的个人知识库

环境准备: 本地部署方案请参考博客:windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)-CSDN博客 windows平台本地部署DeepSeek大模型+Chatbox界面(可以离线使用)-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确…...

Xcode证书密钥导入

证书干嘛用 渠道定期会给xcode证书&#xff0c;用来给ios打包用&#xff0c;证书里面有记录哪些设备可以打包进去。 怎么换证书 先更新密钥 在钥匙串访问中&#xff0c;选择系统。(选登录也行&#xff0c;反正两个都要导入就是了)。 mac中双击所有 .p12 后缀的密钥&#xff…...

机械学习基础-5.分类-数据建模与机械智能课程自留

data modeling and machine intelligence - CLASSIFICATION 为什么我们不将回归技术用于分类&#xff1f;贝叶斯分类器&#xff08;The Bayes Classifier&#xff09;逻辑回归&#xff08;Logistic Regression&#xff09;对逻辑回归的更多直观理解逻辑 /sigmoid 函数的导数我们…...

springcloud集成gateway

本篇文章只介绍gateway模块的搭建步骤&#xff0c;并无gateway详细介绍 gateway详解请查看&#xff1a;SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇&#xff1a; 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…...

RocketMQ之偏移量Offset

偏移量&#xff1a;偏移量是 ConsumerQueue 文件中的逻辑位置&#xff0c;表示消息在队列中的顺序。每次消费通过偏移量在索引文件ConsumerQueue中快速找到对应的消息内容。 1.Broker端 Broker端主要通过ConsumerManageProcessor类来处理Offset的更新查询的请求&#xff0c;真…...

2024-2025年主流的开源向量数据库推荐

以下是2024-2025年主流的开源向量数据库推荐&#xff0c;涵盖其核心功能和应用场景&#xff1a; 1. Milvus 特点&#xff1a;专为大规模向量搜索设计&#xff0c;支持万亿级向量数据集的毫秒级搜索&#xff0c;适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…...

Redis 集群(Cluster)和基础的操作 部署实操篇

三主三从 集群概念 Redis 的哨兵模式&#xff0c;提高了系统的可用性&#xff0c;但是正在用来存储数据的还是 master 和 slave 节点&#xff0c;所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大&#xff0c;接近超出了 master / slave 所在机器的物理内…...

RTD2775QT/RTD2795QT瑞昱显示器芯片方案

RTD2775QT与RTD2795QT&#xff1a;高性能4K显示驱动芯片 RTD2775QT与RTD2795QT是瑞昱半导体公司推出的两款高性能显示驱动芯片&#xff0c;专为满足现代显示设备对高清、高分辨率的需求而设计。这两款芯片不仅支持4K分辨率&#xff0c;还具备丰富的功能和卓越的性能&#xff0…...

Java进阶面试题

Java 进阶面试问题列表翻译自Java developer interview questions: The hard part&#xff0c;从属于笔者的Java入门与工程实践系列。最近公司打算招几个 Java 开发人员&#xff0c;正巧在 Reddit 上看到了该文&#xff0c;顺手翻译了一波。只是单纯的问题列表&#xff0c;可能…...

Spring Cloud-Sentinel

Sentinel服务熔断与限流 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。 官网地址&#xff1a;home | Sentinelhttps://sen…...

21道关于Vue3的面试题及其解析

Vue 3是一种流行的JavaScript框架&#xff0c;它是Vue.js的第三个主要版本&#xff0c;于2020年9月18日正式发布。关于Vue 3的一些关键信息&#xff1a; 文章目录 1. 性能优化2. 组合式API&#xff08;Composition API&#xff09;3. 响应式系统改进4. 更好的TypeScript支持5. …...

使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序

安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…...

深入理解 MyBatis 框架的核心对象:SqlSession

Mybatis框架中的SqlSession对象详解 引言 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0…...

day09_实时类标签/指标

文章目录 day09_实时类标签/指标一、日志数据实时采集2、Flume简介2.3 项目日志数据采集Flume配置2.3.1 涉及的Flume组件和参数2.3.2 Nginx日志采集2.3.3 用户行为日志采集 二、Nginx日志数据统计1、日志格式说明2、数据ETL2.1 日志抽取2.1.1 正则表达式2.1.2 基于Spark实现Ngi…...

AWTK-WEB 快速入门(4) - JS Http 应用程序

XMLHttpRequest 改变了 Web 应用程序与服务器交换数据的方式&#xff0c;fetch 是 XMLHttpRequest 继任者&#xff0c;具有更简洁的语法和更好的 Promise 集成。本文介绍一下如何使用 JS 语言开发 AWTK-WEB 应用程序&#xff0c;并用 fetch 访问远程数据。 用 AWTK Designer 新…...

github不翻墙就可以访问

目录 简介资料准备windows平台设置下载运行git设置firefox设置 ubuntu平台设置下载启动服务设置系统代理git设置firefox设置证书 注意事项 简介 由于github访问不稳定,严重影响了国内软件开发,在网上搜索并验证了一些方法.现在整理出来一个可以正常使用的方法, 在windows和Lin…...

【AI-32】浅显易懂地说一下LangChain

好的&#xff01;我来用最通俗的方式解释一下 LangChain 是什么&#xff0c;以及它为什么在 AI 开发中如此重要。 一句话理解 LangChain LangChain 是一个帮你快速搭建AI应用的工具箱&#xff0c;它把大型语言模型&#xff08;如 GPT&#xff09;和外部数据、计算工具、业务流…...

使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南

在网络应用中&#xff0c;代理服务器是用于中转用户请求和服务端响应的工具。正向代理主要用于客户端与外部服务器之间的访问代理&#xff0c;帮助客户端隐藏其 IP 地址或访问受限资源。本文将详细介绍如何使用 Nginx 搭建正向代理服务器&#xff0c;特别是针对 HTTPS 网站的代…...

Linux学习笔记之进程

进程 进程的定义 进程是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配的基本单位&#xff0c;也是操作系统结构的基础。   例如当QQ程序运行的时候&#xff0c;计算机会先从磁盘读取QQ程序到内存&#xff0c;然后OS管理这个程序&#xff0c;…...

win11 终端乱码导致IDE 各种输出也乱码

因为 win11 终端乱码导致IDE 各种输出也乱码导致作者对此十分头大。所以研究了各种方法。 单独设置终端编码对 HKEY_CURRENT_USER\Console 注册表进行修改对 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processo 注册表进行修改使用命令[Console]::OutputEncoding [Syst…...

iOS主要知识点梳理回顾-5-运行时方法交换

方法交换可以放在 load 或 initialize 方法中&#xff0c;也可以自己根据时机来空&#xff0c;比如开启某个开关后才需要交换方法。如果是在load中调用&#xff0c;交换工作会在类加载时&#xff08;程序启动&#xff09;自动调用&#xff1b;如果是在initialize中调用&#xf…...

python后端调用Deep Seek API

python后端调用Deep Seek API 需要依次下载 ●Ollama ●Deepseek R1 LLM模型 ●嵌入模型nomic-embed-text / bge-m3 ●AnythingLLM 参考教程&#xff1a; Deepseek R1打造本地化RAG知识库:安装部署使用详细教程 手把手教你&#xff1a;deepseek R1基于 AnythingLLM API 调用本地…...