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

关于xilinx的FFTIP的使用和仿真

工具:vivado2018.3,modelsim10.6d

场景:在进行数据进行频谱分析的时候,使用FPGA来完成FFT的计算可以加快数据的计算速度。

下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生,通过IP产生的波形数据直接输入到FFT进行傅里叶正变换。然后再使用FFT对数据进行IFFT傅里叶逆变换还原波形数据。过程中完成了fftshift(将零频分量搬移到频谱中心),以及使用cordic计算平方根的过程。

FFT端口说明

端口名称

方向

描述

aclk

I

时钟

aresetn

I

复位

s_axis_config_tvalid

I

配置有效

s_axis_config_tready

O

配置准备好

s_axis_config_tdata

I

针对配置通道的TDATA。携带配置信息: CP_LEN、FWD/INV、NFFT和SCALE_SCH。关于FWD/INV为FFTIP的方式,1为FFT,0为IFFT。当选择FFT点数可配置时NFFT为点数。SCALE_SCH为缩放计划,以确保在计算过程中不溢出。对于不同的IO架构有不同的规则。

s_axis_data_tdata

I

输入数据

s_axis_data_tvalid                

I

数据有效

s_axis_data_tready

O

数据准备好

s_axis_data_tlast

I

输入的一帧最后一个数据

m_axis_data_tvalid

O

输出数据有效

m_axis_data_tready

I

输出数据准备好

m_axis_data_tdata

O

输出数据

m_axis_data_tuser

O

输出数据状态参数。包含XK_INDEX, OVFLO, and BLK_EXP.

XK_INDEX输出数据索引

OVFLO溢出标志
BLK_EXP块指数,字段中出现的值表示在转换过程中数据被缩放的比特总数。例如,如果BLK_EXP的值为00101 = 5,这意味着相关的输出数据(XK_RE,XK_IM)被缩放为5位(向右移5位),或者换句话说,被除以32,以充分利用输出数据路径的可用动态范围而不会溢出。

m_axis_data_tlast

O

输出的最后一个数据。

m_axis_status_tvalid

O

状态有效

m_axis_status_tready

I

状态准备好

m_axis_status_tdata

O

状态数据。包含每一帧的状态休息。

event_frame_started

O

事件帧开始

event_tlast_unexpected

O

当核心在不是帧中最后一个的数据样本上看到s_axis_data_tlast高时有效

event_tlast_missing

O

当一帧的最后一个数据样本上的s_axis_data_tlast为低时断言。

event_fft_overflow

O

当正在从数据输出通道卸载的数据样本中出现溢出时断言。仅在溢出是一个有效的选项时才会出现。

event_data_in_channel_halt

O

当核心从数据输入通道请求数据而没有数据可用时断言。

event_data_out_channel_halt

O

当核心从数据输入通道请求数据而没有数据可用时断言。

event_status_in_channel_halt

O

当核心试图将数据写入状态通道而无法这样做时,将被断言。仅在非实时模式下出现。

FFT IP的配置界面

Channels:从1到12中选择通道数。三种Burst I/O架构均可使用多通道操作。对于浮点格式,通道必须为1。

Transform Length: 选择一次处理所需点的大小。

The Pipelined Streaming I/O:运行连续处理。

Radix-4,Radix-2,Radix-2 Lite Burst I/O。几种不同的实现方式,延迟依次增大,资源依次减少。

Run time configurable Transform Length:允许运行的过程中改变点数。勾选此后注意,s_axis_config_tdata的字段的意义。

DataFormat:选择输入和输出数据样本是否为定点格式,或在IEEE-754单精度(32位)浮点格式中。浮点格式不是当核心处于多通道配置时可用。

Scaling Options:

Scaling:用户自定义缩放格式。注意s_axis_config_tdata的字段需要配置每个阶段的缩放信息。

Block Floating-Point:由核心来判断所需的缩放程度,以实现对可用动态范围的最佳利用,并以块指数的形式报告缩放因子。注意m_axis_data_tuser字段的块指数报告。

Output ordering:自然顺序和反转顺序。这里使用自然顺序。

Optional Output Fields:XK_INDEX,输出数据索引。

资源消耗设置界面。

关于matlab仿真,产生1MHZ的正弦波余弦波信号,采样率为100MHZ。共计1024个点。对其进行FFT。

matlab仿真程序

% 生成正弦波
fc = 1e6;               % 频率
fs = 100e6;             % 采样率
t1 = 0:1/fs:1e-3;       % 时间序列,1微秒
t = t1(1:1024);         %RW需要取整数计算出的频率是真实sin_wave = sin(2 * pi * fc * t);
cos_wave = cos(2 * pi * fc * t);% 复数
plural_wave = cos_wave+ 1i*sin_wave;% 加噪声
data =awgn(cos_wave,100) ;
% data =awgn(plural_wave,100) ;% 绘制原始正弦波数据
figure;
subplot(1,1,1);
plot(t*1e9, imag(plural_wave));
title('原始正弦波');
xlabel('时间 (ns)');
ylabel('幅值');%%做FT变化,算平均功率谱,并画谱输出
FFT_data = data; N = length(FFT_data); w = blackman(N);Fs =100e6;
% Sf_I_Q_wave=fftshift(fft((FFT_data).*w',N)*2.381);
% w = gausswin(N);%高斯窗函数,窗长度为N
gauss_data = fft((FFT_data).*w',N)*2.396;%%做FFT变换,加窗并还原窗系数
Sf_I_Q_wave=fftshift(gauss_data);
Sf_I_Q_wave_dBm =(abs(Sf_I_Q_wave));
% Sf_I_Q_wave_dBm =20*log10(1/N*abs(Sf_I_Q_wave));
X_freq=Fs.*(-N/2:N/2-1)/N;figure(2);plot(X_freq,Sf_I_Q_wave_dBm);title('plural_wave原始数据普');

对实信号余弦波进行傅里叶变换,频谱图如下。

对复信号进行进行傅里叶变换频谱。

在逻辑中我们使用DDSIP来产生我们需要的波形数据。

DDS IP配置界面

可以看到我需要控制DDS的控制字来生成不同频率的波形数据,输出数据的格式为高16位为正弦,低16位为余弦。

输出频率计算公式。

其中X为频率控制字,Fs采样率,即系统时钟。N为多少位的控制字。要输出1MHZ的波形信号的控制字为X=655。

输出波形正好为一个周期1000ns。即1MHZ。

1024点FFT实信号输入。

FFTSHIFT频谱搬移模块

对于FFTSHIFT模块我们打开matlab帮助后可以发现,搬移的效果就是以频谱中心左右两端谱线互换。

ABS求平方根模块

求复数的模,定义为

复数\left | a+b*i \right |\sqrt{a^{2}+b^{2}}

在逻辑中我们使用cordic来计算平方根。

cordicIP配置如下所示

模块仿真

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/08/12 14:14:51
// Design Name: 
// Module Name: vtf_fft_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module vtf_fft_test;
//fft
//input
wire               [31:0] s_axis_data_tdata    ; 
wire                      s_axis_data_tvalid   ; 
wire                      s_axis_data_tready   ; 
wire                      s_axis_data_tlast    ; 
//output
wire               [31:0] m_axis_data_tdata    ; 
wire                      m_axis_data_tvalid   ; 
wire                      m_axis_data_tready   ; 
wire                      m_axis_data_tlast    ; 
wire               [23:0] m_axis_data_tuser    ; //dds
wire                      m_dds_tvalid         ; 
wire               [31:0] m_dds_tdata          ; //system signal
reg                       clk                  ; 
reg                       rst_n                ; 
reg                       data_gen             ; 
reg                       data_flog            ; 
reg                       douta_vld            ; 
reg                [15:0] cnt                  ; //fftshift
wire               [31:0] fftshift_data        ; // 
wire                      fftshift_data_valid  ; // 
wire                [9:0] fftshift_cnt         ; // //abswire               [15:0] abs_data             ; // (output)
wire                      abs_data_valid       ; // (output)
//system signal//
assign  s_axis_data_tdata   = douta_vld ? m_dds_tdata : 32'h0;//给复信号
//assign  s_axis_data_tdata   = douta_vld ? {16'd0,m_dds_tdata[15:0]} : 32'h0;//实信号
assign  s_axis_data_tvalid  = douta_vld;
assign  s_axis_data_tlast   = (cnt == 16'd1023 );assign  m_axis_data_tready  = 1'b1;//FFT后数据
//取实部
wire               [15:0] f_imag               ; 
wire               [15:0] f_real               ; 
wire               [31:0] f_abs                ; assign  f_imag = m_axis_data_tdata[31:16];
assign  f_real = m_axis_data_tdata[15:0];
assign  f_abs  = f_imag + f_real;//=========================================================
dds_compiler_0 u_dds (.aclk                         (clk                         ), // input wire aclk.s_axis_config_tvalid         (1'b1                         ), // input wire s_axis_config_tvalid.s_axis_config_tdata          (16'd655                      ), // input wire [15 : 0] s_axis_config_tdata.m_axis_data_tvalid           (m_dds_tvalid                 ), // output wire m_axis_data_tvalid.m_axis_data_tdata            (m_dds_tdata                  ), // output wire [31 : 0] m_axis_data_tdata.m_axis_phase_tvalid          (                             ), // output wire m_axis_phase_tvalid.m_axis_phase_tdata           (                             )// output wire [15 : 0] m_axis_phase_tdata
);//=========================================================
xfft_0 u_fft (.aclk                         ( clk                         ), // input wire aclk.aresetn                      ( rst_n                       ), // input wire aresetn.s_axis_config_tdata          (8'd1                         ), // input wire [7 : 0] s_axis_config_tdata.s_axis_config_tvalid         (1'b1                         ), // input wire s_axis_config_tvalid.s_axis_config_tready         (                             ), // output wire s_axis_config_tready.s_axis_data_tdata            (s_axis_data_tdata            ), // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid           (s_axis_data_tvalid           ), // input wire s_axis_data_tvalid.s_axis_data_tready           (s_axis_data_tready           ), // output wire s_axis_data_tready.s_axis_data_tlast            (s_axis_data_tlast            ), // input wire s_axis_data_tlast.m_axis_data_tdata            (m_axis_data_tdata            ), // output wire [31 : 0] m_axis_data_tdata.m_axis_data_tuser            (m_axis_data_tuser            ), // output wire [23 : 0] m_axis_data_tuser.m_axis_data_tvalid           (m_axis_data_tvalid           ), // output wire m_axis_data_tvalid.m_axis_data_tready           (m_axis_data_tready           ), // input wire m_axis_data_tready.m_axis_data_tlast            (m_axis_data_tlast            ), // output wire m_axis_data_tlast.m_axis_status_tdata          (                             ), // output wire [7 : 0] m_axis_status_tdata.m_axis_status_tvalid         (                             ), // output wire m_axis_status_tvalid.m_axis_status_tready         (1'b1                         ), // input wire m_axis_status_tready.event_frame_started          (                             ), // output wire event_frame_started.event_tlast_unexpected       (                             ), // output wire event_tlast_unexpected.event_tlast_missing          (                             ), // output wire event_tlast_missing.event_status_channel_halt    (                             ), // output wire event_status_channel_halt.event_data_in_channel_halt   (                             ), // output wire event_data_in_channel_halt.event_data_out_channel_halt  (                             )// output wire event_data_out_channel_halt
);//==========================================================
fft_shift u_fft_shift(
//.fft_data                     (m_axis_data_tdata            ), // (input ) .fft_cnt                      (m_axis_data_tuser[9:0]       ), // (input ) .fft_last                     (m_axis_data_tlast            ), // (input ) .fft_data_valid               (m_axis_data_tvalid           ), // (input ) .fftshift_data                (fftshift_data                ), // (output) .fftshift_data_valid          (fftshift_data_valid          ), // (output) .fftshift_cnt                 (fftshift_cnt[9:0]            ), // (output) 
//system signal.sys_clk                      (clk                          ), // (input ) .rst_n                        (rst_n                        )// (input ) );//==========================================================
abs_top u_abs_top(
//.plural_data                  (fftshift_data[31:0]            ), // (input ) (input ).plural_data_valid            (fftshift_data_valid            ), // (input ) (input ).abs_data                     (abs_data[15:0]               ), // (output) (output).abs_data_valid               (abs_data_valid               ), // (output) (output)
//system signal.clk                          (clk                          ), // (input ) (input ).rst_n                        (rst_n                        )  // (input ) (input )
);//==========================================================
xfft_0 u_ifft (.aclk                         ( clk                         ), // input wire aclk.aresetn                      ( rst_n                       ), // input wire aresetn.s_axis_config_tdata          (8'd1                         ), // input wire [7 : 0] s_axis_config_tdata.s_axis_config_tvalid         (1'b1                         ), // input wire s_axis_config_tvalid.s_axis_config_tready         (                             ), // output wire s_axis_config_tready.s_axis_data_tdata            (m_axis_data_tdata            ), // input wire [31 : 0] s_axis_data_tdata.s_axis_data_tvalid           (m_axis_data_tvalid           ), // input wire s_axis_data_tvalid.s_axis_data_tready           (m_axis_data_tready           ), // output wire s_axis_data_tready.s_axis_data_tlast            (m_axis_data_tlast            ), // input wire s_axis_data_tlast.m_axis_data_tdata            (                             ), // output wire [31 : 0] m_axis_data_tdata.m_axis_data_tuser            (                             ), // output wire [23 : 0] m_axis_data_tuser.m_axis_data_tvalid           (                             ), // output wire m_axis_data_tvalid.m_axis_data_tready           (1'b1                         ), // input wire m_axis_data_tready.m_axis_data_tlast            (                             ), // output wire m_axis_data_tlast.m_axis_status_tdata          (                             ), // output wire [7 : 0] m_axis_status_tdata.m_axis_status_tvalid         (                             ), // output wire m_axis_status_tvalid.m_axis_status_tready         (1'b1                         ), // input wire m_axis_status_tready.event_frame_started          (                             ), // output wire event_frame_started.event_tlast_unexpected       (                             ), // output wire event_tlast_unexpected.event_tlast_missing          (                             ), // output wire event_tlast_missing.event_status_channel_halt    (                             ), // output wire event_status_channel_halt.event_data_in_channel_halt   (                             ), // output wire event_data_in_channel_halt.event_data_out_channel_halt  (                             )// output wire event_data_out_channel_halt
);//================================================================
//================================================================
initial
beginclk = 0;rst_n=0;data_gen   =0;#100;rst_n      =1;#1000;data_gen   =1;#100;data_gen   =0;endalways @ (posedge clk or negedge rst_n)
beginif(rst_n == 1'b0)begin         data_flog   <= 1'b0;endelse if(data_gen == 1'b1)begindata_flog   <= 1'b1;end else if(cnt   >= 10'd1022)begindata_flog   <= 1'b0;end
endalways @ (posedge clk or negedge rst_n)
beginif(rst_n == 1'b0)begin         douta_vld   <= 1'b0;endelse begindouta_vld   <= data_flog;end endalways @ (posedge clk or negedge rst_n)
beginif(rst_n == 1'b0)begin         cnt <= 16'd0;endelse if(s_axis_data_tvalid == 1'b1 && s_axis_data_tready == 1'b1)begincnt <= cnt + 1'b1;end else begincnt <= cnt;endend//================================================================
//================================================================always #5 clk = ~clk;endmodule

复信号输入。

实信号输入。

逆傅里叶变换结果

相关文章:

关于xilinx的FFTIP的使用和仿真

工具&#xff1a;vivado2018.3&#xff0c;modelsim10.6d 场景&#xff1a;在进行数据进行频谱分析的时候&#xff0c;使用FPGA来完成FFT的计算可以加快数据的计算速度。 下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生&#xff0c;通过IP产生的波形数据…...

ant design pro 如何去保存颜色

上图 就是实现这样的效果 后端是这样的&#xff0c;这个颜色肯定是存到字符串里的 这是第一步 import mongoose, { Schema, Document } from mongoose;interface IDiscountCard extends Document {title: string;subtitle: string;image: string;shopUrl: string;bgColor: s…...

【Hadoop】建立圈内组件的宏观认识

01存储02计算03调度04其他05回忆 众多组件们构建了大规模分布式计算和存储平台。本文介绍Hadoop生态圈中各个组件的主要功能和作用&#xff0c;辅助学者理解每个组件的定位和用途&#xff0c;从而建立对圈内组件的宏观认识。梳理清楚HDFS、MapReduce、YARN、Hive、HBase、Spark…...

C++:命名空间与输入输出

目录 前言 一、命名空间 1.1 namespace的价值 1.2 namespace的定义 1.3 命名空间的使用 二、C输入&输出 前言 C是一种面向对象的计算机程序设计语言&#xff0c;‌它扩展了C语言的功能&#xff0c;‌并引入了面向对象编程的概念&#xff0c;‌如类、‌继承和多态等&a…...

Azure DevOps Server 数据库日志已满,TF30042: The database is full

Contents 1. 问题描述2. 处理方式 2.1 系统备份2.2 收缩日志2.3 恢复模式2.4 日志增长无法控制 1. 问题描述 Azure DevOps Server 作为微软的软件开发管理平台产品&#xff0c;理所当然地使用了微软的数据库软件SQL Server。 在一个大型的开发团队中&#xff0c;Azure DevOps S…...

[C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换

//转为 bitmap方法一&#xff1a; Bitmap map OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); process_pictureBox.Image map; //转为 bitmap方法二&#xff1a; Bitmap map new Bitmap(mat.ToMemoryStream()); process_pictureBox.Image map; //Image img 转为…...

【区块链+金融服务】基于区块链的供应链金融系统 | FISCO BCOS应用案例

传统供应链金融存在着信息不对称、信任问题和繁琐流程等弊端。为了解决这些问题&#xff0c;京北方搭建了基于区块链 的供应链金融系统&#xff0c;提供了更高效、透明、安全和可信的交易环境。 系 统 采 用 FISCO BCOS 为 底 层 链&#xff0c; 技 术 栈 使 用 Java 语 言 进…...

AI语言大模型商业价值深度解析

点击蓝字 关注我 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;特别是深度学习算法的进步&#xff0c;AI语言大模型在自然语言处理领域的表现日益突出。国内外多种语言大模型如&#xff1a;OpenAi 的 ChatGpt&#xff0c;阿里通义千问&#xff0c;百度文心…...

理解DDD领域驱动设计思想

一、引言 在软件开发的广袤领域中&#xff0c;领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称 DDD&#xff09;犹如一颗璀璨的明星&#xff0c;备受瞩目。对于期望运用 DDD 开展项目的研发人员而言&#xff0c;明晰 DDD 的本质是实现其有效应用的基石。需注意…...

音频剪辑软件哪个好用?五大音频剪辑软件分享

如果你正打算在家自学视频制作&#xff0c;那么恭喜你&#xff0c;你已经踏上了一段充满魔法与惊喜的旅程&#xff01;不过&#xff0c;别忘了&#xff0c;视频的灵魂不仅仅在于画面&#xff0c;更在于那直击心灵的音效。 想象一下&#xff0c;一个精心剪辑的片段&#xff0c;…...

12.2 使用prometheus-sdk向pushgateway打点

本节重点介绍 : 使用golang sdk打prometheus4种指标&#xff0c;推送到pushgateway gauge、counter、histogram、summary的初始化4种类似的设置值的方法推送到pushgateway的方法 prometheus配置采集pushgateway&#xff0c;grafana上配大盘 golang-sdk 项目地址 https://git…...

HTTPS 详解

HTTPS 是以安全为目标的 HTTP 通道&#xff0c;它在 HTTP 中加入 SSL 层以提高数据传输的安全性。HTTP 被用于在 Web 浏览器和网站服务器之间传递信息&#xff0c;但以明文形式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了 Web 浏览器和网站服务…...

Microsoft Edge 使用方法与秘诀概览

目录 ​编辑引言 Microsoft Edge 功能与技巧概览 掌握这些设置技巧&#xff0c;让 Edge 浏览器的体验更干净 1. 使用阅读视图 2. 开启广告过滤 3. 管理扩展 4. 个性化新标签页 5. 使用网页截图 6. 清理浏览器缓存 7. 管理启动设置 8. 自定义地址栏建议 9. 使用内置笔…...

【视频】onvif、RTP、RTCP、SDP、RTSP、gb21818区别

ONVIF (Open Network Video Interface Forum): ONVIF是一个全球性的开放网络视频接口论坛&#xff0c;致力于发展基于IP网络的物联网设备的标准化。它提供了一个通用的标准接口&#xff0c;使不同厂商生产的网络视频产品能够互相兼容。 RTP (Real-time Transport Protocol): R…...

8-4 循环神经网络

对于 (8.4.2)中的函数 f f f&#xff0c;隐变量模型不是近似值。 毕竟 h t h_{t} ht​是可以仅仅存储到目前为止观察到的所有数据&#xff0c; 然而这样的操作可能会使计算和存储的代价都变得昂贵。 回想一下&#xff0c;我们在前面讨论过的具有隐藏单元的隐藏层。 值得注意的…...

Linux系统编程 --- 多线程

线程&#xff1a;是进程内的一个执行分支&#xff0c;线程的执行粒度&#xff0c;要比进程要细。 一、线程的概念 1、Linux中线程该如何理解 地址空间就是进程的资源窗口。 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1…...

Grafana中的rate与irate以及histogram

用法 rate rate函数用于计算一个时间序列在给定时间范围内的平均速率。它对每个数据点进行线性插值来计算速率&#xff0c;因此对于平滑和稳定的数据来说&#xff0c;rate是一个不错的选择。语法如下&#xff1a; rate(metric_name[time_range])metric_name: 指标名称。time…...

什么是网络安全态势感知

态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力&#xff0c;是以安全大数据为基础&#xff0c;从全局视角提升对安全威胁的发现识别、理解分析、响应处置能力的一种方式、最终是为了决策与行动&#xff0c;是安全能力的落地 态势感知的重要性 随着网络与信息技术的…...

php 在app中唤起微信app进行支付,并处理回调通知

<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {...

高效同步与处理:ADTF流服务在自动驾驶数采中的应用

目录 一、ADTF 流服务 1、流服务源&#xff08;Streaming Source&#xff09; 2、流服务汇&#xff08;Streaming Sink&#xff09; 二、数据链路 1、数据管道&#xff08;Data Pipe&#xff09; 2、子流&#xff08;Substreams&#xff09; 3、触发管道&#xff08;Tri…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...