线性调频Z变换 CZT

news2024/11/23 20:50:26

文章目录

  • 【1. 原理】
  • 【2. z k z_k zk 所在的路径】
  • 【3. CZT的实现步骤】
  • 【4. CZT的特点 】
  • 【5. CZT的应用】
    • 5.1 通过 CZT 变换求 DFT
    • 5.2 对信号的频谱进行细化分析
    • 5.3 求解Z变换X(z)的零、极点
    • 5.4 使用CZT进行Keystone变换
  • 【6.相关文献】

  • 线性调频Z变换(chirp Z-transform)

【1. 原理】

  • Z 变换公式:
    X ( z ) = ∑ n = 0 N − 1 x ( n ) z − n X(z)=\sum_{n=0}^{N-1}x(n)z^{-n} X(z)=n=0N1x(n)zn
  • z = z k = A W − k = ( A 0 e j θ 0 ) ( W 0 e − j φ 0 ) − k = ( A 0 e j θ 0 ) ( W 0 − k e j φ 0 k ) , k = 0 , 1... , M − 1 z=z_k=AW^{-k}=\left(A_0e^{j\theta_0}\right)\left(W_0e^{-j\varphi_0}\right)^{-k}=\left(A_0e^{j\theta_0}\right)\left(W_0^{-k}e^{j\varphi_0k}\right),k=0,1...,M-1 z=zk=AWk=(A0ejθ0)(W0ejφ0)k=(A0ejθ0)(W0kejφ0k),k=0,1...,M1,M代表欲分析的频谱的点数,M不一定等于N。代入上式化简,得到 CZT 变换公式
    C Z T ( z k ) = ∑ n = 0 N − 1 x ( n ) A − n W n k = ∑ n = 0 N − 1 x ( n ) ( A 0 − n e − j θ 0 n ) ( W 0 n k e − j φ 0 n k ) , k = 0 , 1... , M − 1 \begin{aligned}CZT(z_k)&=\sum_{n=0}^{N-1}x(n)A^{-n}W^{nk}\\&= \sum_{n=0}^{N-1}x(n)\left(A_0^{-n}e^{-j\theta_0n}\right)\left(W_0^{nk}e^{-j\varphi_0nk}\right),k=0,1...,M-1\end{aligned} CZT(zk)=n=0N1x(n)AnWnk=n=0N1x(n)(A0nejθ0n)(W0nkejφ0nk),k=0,1...,M1
  • 利用 Bluestein 等式 n k = 1 2 [ n 2 + k 2 − ( k − n ) 2 ] nk=\frac{1}{2}[n^2+k^2-(k-n)^2] nk=21[n2+k2(kn)2],代入上式得:
    C Z T ( z k ) = ∑ n = 0 N − 1 x ( n ) A − n W n k = ∑ n = 0 N − 1 x ( n ) A − n W n 2 2 W k 2 2 W − ( k − n ) 2 2 = W k 2 2 ∑ n = 0 N − 1 { [ x ( n ) A − n W n 2 2 ] W − ( k − n ) 2 2 } , k = 0 , 1... , M − 1 \begin{aligned}CZT(z_k)&= \sum_{n=0}^{N-1}x(n)A^{-n}W^{n k}\\ &= \sum_{n=0}^{N-1}x(n)A^{-n}W^{\frac{n^{2}}{2}}W^{\frac{k^{2}}{2}}W^{\frac{-(k-n)^{2}}{2}}\\ &=W^{\frac{k^2}{2}}\sum\limits_{n=0}^{N-1}\{[x(n)A^{-n}W^{\frac{n^2}{2}}]W^{\frac{-(k-n)^2}{2}}\},k=0,1...,M-1\end{aligned} CZT(zk)=n=0N1x(n)AnWnk=n=0N1x(n)AnW2n2W2k2W2(kn)2=W2k2n=0N1{[x(n)AnW2n2]W2(kn)2},k=0,1...,M1
  • g ( n ) = x ( n ) A − n W n 2 2 , 0 ≤ n ≤ N − 1 , h ( n ) = W − n 2 2 g(n)=x(n)A^{-n}W^{\frac{n^2}{2}},0≤n≤N-1,h(n)=W^{-\frac{n^2}{2}} g(n)=x(n)AnW2n2,0nN1h(n)=W2n2,代入上式,得到:
    C Z T ( z k ) = W k 2 2 ∑ n = 0 N − 1 g ( n ) h ( k − n ) , k = 0 , 1... , M − 1 CZT(z_k)=W^{\frac{k^2}{2}}\sum_{n=0}^{N-1}g(n)h(k-n),k=0,1...,M-1 CZT(zk)=W2k2n=0N1g(n)h(kn),k=0,1...,M1
  • 在上式中, ∑ n = 0 N − 1 g ( n ) h ( k − n ) \sum_{n=0}^{N-1}g(n)h(k-n) n=0N1g(n)h(kn)是线性卷积,故上式可理解为:
    C Z T ( z k ) = W k 2 2 g ( k ) ∗ h ( k ) , k = 0 , 1... , M − 1 CZT(z_k)=W^{\frac{k^2}{2}}g(k)*h(k),k=0,1...,M-1 CZT(zk)=W2k2g(k)h(k),k=0,1...,M1
  • 综上所述,CZT 的计算过程可化简为 :
    在这里插入图片描述
    即:让 x(n) 乘 A − n W n 2 2 A^{-n}W^{\frac{n^2}{2}} AnW2n2 成为 g(n) ,g(n) 再与 h ( n ) = W − n 2 2 h(n)=W^{-\frac{n^2}{2}} h(n)=W2n2 进行线性卷积,卷积的结果再与 W − k 2 2 W^{-\frac{k^2}{2}} W2k2 相乘,得到最终CZT变换的结果。
  • 总结
    C Z T ( z k ) = ∑ n = 0 N − 1 x ( n ) z k − n = ∑ n = 0 N − 1 x ( n ) ( A W − k ) − n = ∑ n = 0 N − 1 x ( n ) ( A 0 − n e − j θ 0 n ) ( W 0 n k e − j φ 0 n k ) , k = 0 , 1... , M − 1 \begin{aligned}CZT(z_k)&=\sum_{n=0}^{N-1}x(n)z_k^{-n}\\&=\sum_{n=0}^{N-1}x(n)(AW^{-k})^{-n}\\&= \sum_{n=0}^{N-1}x(n)\left(A_0^{-n}e^{-j\theta_0n}\right)\left(W_0^{nk}e^{-j\varphi_0nk}\right),k=0,1...,M-1\end{aligned} CZT(zk)=n=0N1x(n)zkn=n=0N1x(n)(AWk)n=n=0N1x(n)(A0nejθ0n)(W0nkejφ0nk),k=0,1...,M1
    其中, z k = A W − k z_k=AW^{-k} zk=AWk A = A 0 e j θ 0 A=A_0e^{j\theta_0} A=A0ejθ0 W = W 0 e − j φ 0 W=W_0e^{-j\varphi_0} W=W0ejφ0
    z k = A W − k = A 0 W 0 − k e j ( θ 0 + k φ 0 ) \\z_k=AW^{-k}=A_0W_0^{-k}e^{j(\theta_0+k\varphi_0)} zk=AWk=A0W0kej(θ0+kφ0)
    z 0 = A 0 e j θ 0 , z 1 = A 0 W 0 − 1 e j ( θ 0 + φ 0 ) \\z_0=A_0e^{j\theta_0},\\ z_1=A_0W_0^{-1}e^{j(\theta_0+\varphi_0)} z0=A0ejθ0,z1=A0W01ej(θ0+φ0)
    z 2 = A 0 W 0 − 2 e j ( θ 0 + 2 φ 0 ) z_2=A_0W_0^{-2}e^{j(\theta_0+2\varphi_0)} z2=A0W02ej(θ0+2φ0)
    ⋯ \cdots
    z M − 1 = A 0 W 0 − ( M − 1 ) e j [ θ 0 + ( M − 1 ) φ 0 ] z_{M-1}=A_0W_0^{-(M-1)}e^{j[\theta_0+(M-1)\varphi_0]} zM1=A0W0(M1)ej[θ0+(M1)φ0]

【2. z k z_k zk 所在的路径】

  • A = A 0 e j θ 0 A=A_0e^{j\theta _0} A=A0ejθ0 为起始点位置。
    A 0 A_0 A0 :起始点半径,通常 A 0 ≤ 1 A_0\leq1 A01,表示在圆内, A 0 = 1 A_0=1 A0=1 表示在单位圆上。
    θ 0 \theta_0 θ0:起始点相位角,可正可负。
  • z k = A 0 W 0 − k e j ( θ 0 + k φ 0 ) z_k=A_0W_0^{-k}e^{j(\theta_0+k\varphi_0)} zk=A0W0kej(θ0+kφ0) 是 z 平面一段螺线上的等分角上某一采样点。
    W 0 W_0 W0:螺线的伸展率。
    W 0 > 1 W_0>1 W0>1:随 k 的增加螺旋线向内盘旋。
    W 0 < 1 W_0<1 W0<1:随 k 的增加螺旋线向外盘旋。
    W 0 = 1 W_0=1 W0=1:对应半径为 A 0 A_0 A0 的一段圆弧,若又有 A 0 = 1 A_0=1 A0=1, 则这段圆弧是单位圆的一部分。
  • φ 0 \varphi_0 φ0 是两相邻点之间的角频率差。
    φ 0 < 0 \varphi_0<0 φ0<0:表示 z k z_k zk 的路径是顺时针旋转。
    φ 0 > 0 \varphi_0>0 φ0>0:表示 z k z_k zk 的路径是逆时针旋转。

【3. CZT的实现步骤】

  • 将线性卷积用循环圆卷积进行计算,从而可以变换到频域用FFT进行快速运算。下面为CZT的实现流程图。
    在这里插入图片描述

  • 选择一个最小数 L,使其满足 L ≥ N + M − 1 L\geq N+M-1 LN+M1,同时又满足 L = 2 m L=2^m L=2m

  • g ( n ) g(n) g(n) 尾补零变成列长为L的序列
    g ( n ) = { A − n W n 2 2 x ( n ) 0 ≤ n ≤ N − 1 0 N ≤ n ≤ L − 1 g(n)=\begin{cases}A^{-n}W^{\frac{n^2}{2}}x(n)&0\leq n\leq N-1\\ 0&N\leq n\leq L-1\end{cases} g(n)={AnW2n2x(n)00nN1NnL1

  • g ( n ) g(n) g(n) 的 FFT
    G ( r ) = ∑ n = 0 L − 1 g ( n ) e − j 2 π L n r , 0 ≤ r ≤ L − 1 G(r)=\sum\limits_{n=0}^{L-1}g(n)e^{-j\frac{2\pi}{L}nr},0\leq r \leq L-1 G(r)=n=0L1g(n)ejL2πnr0rL1

  • h ( n ) h(n) h(n) 补零加长,周期延拓成L点的序列
    h ( n ) = { W − n 2 2 0 ≤ n ≤ M − 1 0 M ≤ n ≤ L − N W − ( L − n ) 2 2 L − N + 1 ≤ n ≤ L − 1 h(n)=\left\{\begin{array}{cc}W^{-\frac{n^2}{2}}&0\leq n\leq M-1\\ 0&M\leq n\leq L-N\\ W^{-\frac{(L-n)^2}{2}}&L-N+1\leq n\leq L-1\end{array}\right. h(n)= W2n20W2(Ln)20nM1MnLNLN+1nL1

  • h ( n ) h(n) h(n) 的 FFT
    H ( r ) = ∑ n = 0 L − 1 h ( n ) e − j 2 π L n r , 0 ≤ r ≤ L − 1 H(r)=\sum_{n=0}^{L-1}h(n)e^{-j\frac{2\pi}{L}nr},0\leq r \leq L-1 H(r)=n=0L1h(n)ejL2πnr0rL1

  • G ( r ) G(r) G(r) H ( r ) H(r) H(r) 的乘积 Q ( r ) Q(r) Q(r) Q ( r ) Q(r) Q(r)为 L 点频域离散序列。
    Q ( r ) = G ( r ) ⋅ H ( r ) , 0 ≤ r ≤ L − 1 Q(r)=G(r)\cdot H(r),0\leq r \leq L-1 Q(r)=G(r)H(r)0rL1

  • Q ( r ) Q(r) Q(r) 的 IFFT
    q ( r ) = I D F T [ Q ( r ) ] , 0 ≤ n ≤ M − 1 q(r)=IDFT[Q(r)],0\leq n\leq M-1 q(r)=IDFT[Q(r)]0nM1

  • 最后求出 X ( z k ) X(z_k) X(zk)
    X ( z k ) = W − k 2 2 ⋅ q ( k ) , 0 ≤ k ≤ M − 1 X(z_k)=W^{-\frac{k^2}{2}}\cdot q(k),0\leq k\leq M-1 X(zk)=W2k2q(k)0kM1

【4. CZT的特点 】

  • 输入序列长N及输出序列长M不需要相等。
  • N及M不必是高度合成数,二者均可为素数。
  • z k z_k zk 的角间隔是任意的,频率分辨率也是任意的。
  • 围线不必是z平面.上的圆,在语音分析中螺旋围线具有某些优点。
  • 起始点 z 0 z_0 z0 可任意选定,因此可以从任意频率上开始对输入数据进行窄带高分辨率的分析。
  • CZT 是一个一般化的DFT:若 A=1,M=N,可用CZT来计算DFT,即使N为素数时也可以。

【5. CZT的应用】

5.1 通过 CZT 变换求 DFT

  • 当满足如下条件时, z k z_k zk 均匀分布在单位圆上,可由CZT变换求DFT。
    1、 M = N M=N M=N
    2、 A = A 0 e j θ 0 = 1 ⟹ A 0 = 1 , θ 0 = 0 ∘ A=A_0e^{j\theta_0}=1\Longrightarrow A_0=1,\theta_0=0^\circ A=A0ejθ0=1A0=1θ0=0
    3、 W = W 0 e − j φ 0 = e − j 2 π N ⟹ W 0 = 1 , φ 0 = 2 π N W=W_{0}e^{-j\varphi_{0}}=e^{-j\frac{2\pi}{N}}\Longrightarrow W_0=1,\varphi_0=\frac{2\pi}{N} W=W0ejφ0=ejN2πW0=1,φ0=N2π
  • 如果取 A 0 = 1 A_0=1 A0=1 θ 0 \theta_0 θ0为任意值,则所求的DFT是一段任意频率范围的频谱,也就是单位圆上某一段的频谱。这与直接计算DFT求整个频率范围的频谱是不一样的,即使调整N的大小,例如增加N,也只是增加了一段频率范围的计算量而已。

5.2 对信号的频谱进行细化分析

  • 其中对窄带信号频谱或对部分感兴趣的频谱进行细化分析。 z k z_k zk 必须在z平面的单位圆上, A 0 = 1 A_0=1 A0=1 W 0 = 1 W_0=1 W0=1,即:
    z k = A 0 W 0 − k e j ( θ 0 + k φ 0 ) = e j ( θ 0 + k φ 0 ) z_{k}=A_{0}W_{0}^{-k}e^{j(\theta_{0}+k\varphi_{0})}=e^{j(\theta_{0}+k\varphi_{0})} zk=A0W0kej(θ0+kφ0)=ej(θ0+kφ0)
    θ 0 \theta_0 θ0 由感兴趣的起始频率决定。
    φ 0 \varphi_0 φ0 由频率分辨率决定。
    M 由 φ 0 \varphi_0 φ0 和频率采样的范围决定。

5.3 求解Z变换X(z)的零、极点

  • 用于语音信号处理过程中。
  • 利用不同半径同心圆,进行等间隔采样,令 W 0 = 1 W_0=1 W0=1 θ 0 = 0 \theta_0=0 θ0=0 φ 0 = 2 π N \varphi_0=\frac{2\pi}{N} φ0=N2π,改变 A 0 A_0 A0,计算
    20 lg ⁡ ∣ X ( z k ) ∣ = 20 lg ⁡ ∣ X ( r e j ω ) ∣ ω = 2 π N k , k = 0 , 1 , . . . N − 1 20\operatorname{lg}|X(z_k)|=20\operatorname{lg}|X(re^{j\omega})|_{\omega=\frac{2\pi}{N}k},k=0,1,...N-1 20lgX(zk)=20lgX(re)ω=N2πk,k=0,1,...N1
    其中, 20 lg ⁡ ∣ X ( r e j w ) ∣ ( d B ) 20\lg|X(re^{jw})|(dB) 20lgX(rejw)dB的峰值决定 X(z) 的极点,谷值决定零点。

5.4 使用CZT进行Keystone变换

  • A = 1 , W = e − j f 0 + f f 0 2 π M A=1,W=e^{-j\frac{f_0+f}{f_0}\frac{2\pi}{M}} A=1,W=ejf0f0+fM2π ,即
    N = M A 0 = W 0 = 1 θ 0 = 0 ϕ 0 = f 0 + f f 0 2 π M \begin{array}{l}N=M\\ A_0=W_0=1\\ \theta_0=0\\ \phi_0=\frac{f_0+f}{f_0}\frac{2\pi}{M}\end{array} N=MA0=W0=1θ0=0ϕ0=f0f0+fM2π
    然后按照CZT的计算步骤进行计算。使用此方法可以大大减小Keystone变换的计算量。

【6.相关文献】

线性调频Z变换
Keystone学习笔记(5)——Keystone变换的实现方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FL Studio中文版V21的主要功能与下载教程

FL Studio21最新版是流行的数字音频工作站(DAW)其最新版本FL Studio 21,主要功能和下载教程如下: FL Studio21中文版功能介绍: 1. 全新界面:采用简洁现代的设计风格,工具栏和菜单进行重组,更加直观。提供智能提示与工作流指导,易于学习和操作。 2. 多显示器支持:可以在不同屏…

野火STM32电机系列(六)Cubemx配置ADC规则和注入通道

前文已经配置了GPIO、编码器 本节讲解CubeMXADC规则和注入通道 本文adc注入通道采用定时器触发&#xff0c;因此在上文定时器配置的基础上进行 常规信号&#xff08;温度等&#xff09;使用带DMA的常规通道连续采样 注入采样由定时器触发&#xff0c;采集电机三相电流&…

科大版中国版ChatGPT来啦!抢先体验

随着文心一言、通义千问等国内顶尖级ChatGPT大模型相继问世&#xff0c;具有语言理解和生成能力的人工智能正在引领行业创新发展。作为人工智能公司中的佼佼者&#xff0c;科大讯飞也开始加入到这场竞争中来。 4月20日&#xff0c;科大讯飞宣布即将于5月6日正式发布其最新的“…

【QT5:CAN卡通信的上位机-代码练习-收发数据+布局+引用外部库+基础样例(1)】

【QT5:CAN卡通信的上位机-代码练习-收发数据布局引用外部库基础样例1】 1、概述2、实验环境3、自我总结和提升4、事先声明5、效果展示6、代码编写过程&#xff08;1&#xff09;操作步骤部分1、新建工程2、加入外部库&#xff0c;并且加入qt工程中3、ui页面布局4、代码练习5、运…

荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

文章目录 前言一、配置 buildroot 及编译二、写 QT 代码三、编译可执行文件四、拷贝到 SD 卡五、上板子测试六、资源自取 前言 有这样一个需求&#xff0c;通过配置 QT&#xff0c;在 linux 下实现显示我所想要显示的图片&#xff0c;实现的方式是我可以在命令行将图片的路径作…

人工智能之配置环境教程二:在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境

人工智能之配置环境教程二&#xff1a;在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境 作者介绍一. 查看自己电脑的CUDA版本1.1 方式一1.2 方式二 二. 下载安装CUDA三. 查看环境变量四. 创建虚拟环境4.1 使用指令创建虚拟环境4.2 查看Anc…

【刷题之路Ⅱ】LeetCode 24. 两两交换链表中的节点

【刷题之路Ⅱ】LeetCode 24. 两两交换链表中的节点 一、题目描述解题1、方法1——递归1.1、思路分析1.2、代码实现 2、方法2——迭代2.1、思路分析2.2、代码实现 3、方法3——交替的尾插3.1、思路分析3.2、代码实现 一、题目描述 原题连接&#xff1a; 24. 两两交换链表中的节…

人群计数经典方法Density Map Estimation,密度图估计

&#xff08;3&#xff09;Density Map Estimation&#xff08;主流&#xff09; 这是crowd counting的主流方法 传统方法不好在哪里&#xff1f;object detection-based method和regression-based method无法从图像中提取更抽象的有助于完成人群计数任务的语义特征 概况&…

asp.net个人信息管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net个人信息管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net个人信息管理系统VS开发s…

第七章 单行函数

MySQL系列文章目录 http://t.csdn.cn/YTPe9 文章目录 MySQL系列文章目录前言一、函数的理解1、 什么是函数2 、不同DBMS函数的差异3 、MySQL的内置函数及分类 二、 数值函数1 、基本函数2、 角度与弧度互换函数3、 三角函数4、 指数与对数5、进制间的转换 三、字符串函数四、日…

音视频八股文(8)-- h264 AnnexB

NALU(Network Abstract Layer Unit) ⾳视频编码在流媒体和⽹络领域占有重要地位&#xff1b;流媒体编解码流程⼤致如下图所示&#xff1a; H264简介 H.264从1999年开始&#xff0c;到2003年形成草案&#xff0c;最后在2007年定稿有待核实。在ITU的标准⾥称为H.264&#xff0c…

Docker快速创建一个单机版的Jenkins实例

目录 一、创建 Jenkins 实例 二、Pipeline 项目 三、总结 谈到 CI/CD&#xff0c;那便少不了这里面的佼佼者 Jenkins&#xff0c;正如 Jenkins 官网说的一样&#xff1a;“Build great things at any scale”&#xff0c;构建伟大&#xff0c;无所不能&#xff01; 话不多说…

常用传感器-温湿度传感器SHT30

SHT30温湿度传感器 基本信息 工作电压&#xff1a;2.4V-5.5V 通讯协议&#xff1a;IIC 湿度测量范围&#xff1a;0-100 温度测量范围&#xff1a;-40-125 引脚 VIN&#xff1a;电源正极GND&#xff1a;电源负极SCL&#xff1a;数据线SDA&#xff1a;数据线 操作 1.加载库…

digiKam 8.0发布,带来了许多新的功能和改进

导读digiKam 8.0开源、跨平台、免费的专业照片管理软件现在可以下载&#xff0c;这是一个重大更新&#xff0c;带来了许多新的功能和改进。 digiKam 8.0最大的变化是&#xff0c;该软件被移植到最新的Qt 6开源应用框架&#xff0c;以获得更现代和面向未来的体验。然而&#xff…

MATLAB矩阵运算

文章目录 前言一、矩阵的输入与结构操作1-1 矩阵输入1-2 矩阵扩充&#xff08;1&#xff09;扩充行&#xff08;2&#xff09;扩充列&#xff08;3&#xff09;其他命令&#xff08;4&#xff09;矩阵的修改和元素的删除 1-3 特殊矩阵生成 二、矩阵的计算2-1 、矩阵的基本运算2…

详解时间复杂度和空间复杂度问题

前言&#xff1a;本来我并不认为时间复杂度和空间复杂的有多重要&#xff0c;只要日常会判断和分析算法的复杂度即可&#xff0c;但是&#xff0c;不论是在考研的数据结构与算法中&#xff0c;还是在日常的刷题中&#xff0c;我们都会见到&#xff0c;限制我们时间和空间复杂度…

RK3588平台开发系列讲解(进程篇)Linux中进程的一生

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux 系统中进程的一生二、Linux 系统中的进程树三、Linux 进程的分类四、进程优先级五、进程系统调用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 Linux 进程的相关知识。 一、Linux 系统…

vscode开发wdk

findwdk https://github.com/SergiusTheBest/FindWDK.git 拷贝FindWdk.cmake模块到下面路径中 CMake\share\cmake-3.22\Modules 注意定义系统变量或者修改下面路径&#xff0c;确保能找到wdk工具路径 构建项目 cmake中构建项目通过wdk_add_driver实现 wdk_add_driver(simp…

深度学习训练营之彩色图片分类2

深度学习训练营之彩色图片分类 原文链接环境介绍前置工作设置GPU 导入数据数据查看 构建CNN网络CNN网络的简单介绍代码 进行编译模型训练正式训练 结果可视化使用准确度和损失值进行结果的优良进行分析 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习…

【源码解析】SpringBoot日志系统源码分析

LoggingApplicationListener 日志组件的处理是LoggingApplicationListener实现的。LoggingApplicationListener#onApplicationEvent&#xff0c;监听事件。如果实现接口GenericApplicationListener&#xff0c;可以允许适配事件类型。 private static final Class<?>[]…