一、信号模型与优化问题建立

1. 复信号模型

设观测的复信号由两个单频复指数信号加噪声组成:

x [ n ] = A 0 e j ( 2 π f 0 n T s + ϕ 0 ) + A 1 e j ( 2 π f 1 n T s + ϕ 1 ) + w [ n ] , n = 0 , 1 , … , N − 1 x[n] = A_0 e^{j(2\pi f_0 n T_s + \phi_0)} + A_1 e^{j(2\pi f_1 n T_s + \phi_1)} + w[n], \quad n=0,1,\dots,N-1 x[n]=A0ej(2πf0nTs+ϕ0)+A1ej(2πf1nTs+ϕ1)+w[n],n=0,1,,N1

其中:

  • A 0 , A 1 > 0 A_0, A_1 > 0 A0,A1>0 为幅度

  • f 0 , f 1 ∈ ( 0 , f s / 2 ) f_0, f_1 \in (0, f_s/2) f0,f1(0,fs/2) 为频率

  • ϕ 0 , ϕ 1 ∈ [ − π , π ] \phi_0, \phi_1 \in [-\pi, \pi] ϕ0,ϕ1[π,π] 为相位

  • T s = 1 / f s T_s = 1/f_s Ts=1/fs 为采样间隔

  • w [ n ] ∼ C N ( 0 , σ 2 ) w[n] \sim \mathcal{CN}(0, \sigma^2) w[n]CN(0,σ2) 为复高斯噪声

2. 参数向量定义

将待估计参数定义为向量形式:

θ = [ A 0 , f 0 , ϕ 0 , A 1 , f 1 , ϕ 1 ] T ∈ R 6 \boldsymbol{\theta} = \left[ A_0, f_0, \phi_0, A_1, f_1, \phi_1 \right]^T \in \mathbb{R}^6 θ=[A0,f0,ϕ0,A1,f1,ϕ1]TR6

3. 优化目标

通过最小二乘准则估计参数:
min ⁡ θ J ( θ ) = ∑ n = 0 N − 1 ∣ x [ n ] − s [ n ; θ ] ∣ 2 \min_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) = \sum_{n=0}^{N-1} \left| x[n] - s[n; \boldsymbol{\theta}] \right|^2 θminJ(θ)=n=0N1x[n]s[n;θ]2
其中信号模型为:

s [ n ; θ ] = A 0 e j ( 2 π f 0 n T s + ϕ 0 ) + A 1 e j ( 2 π f 1 n T s + ϕ 1 ) s[n; \boldsymbol{\theta}] = A_0 e^{j(2\pi f_0 n T_s + \phi_0)} + A_1 e^{j(2\pi f_1 n T_s + \phi_1)} s[n;θ]=A0ej(2πf0nTs+ϕ0)+A1ej(2πf1nTs+ϕ1)

4. 约束条件

根据物理意义添加边界约束:

{ 0 ≤ A k ≤ A max ⁡ f min ⁡ ≤ f k ≤ f max ⁡ − π ≤ ϕ k ≤ π , k = 0 , 1 \begin{cases} 0 \leq A_k \leq A_{\max} \\ f_{\min} \leq f_k \leq f_{\max} \\ -\pi \leq \phi_k \leq \pi \end{cases}, \quad k=0,1 0AkAmaxfminfkfmaxπϕkπ,k=0,1


二、优化问题求解推导

1. 目标函数的复变函数处理

由于目标函数是复值,需用Wirtinger微积分求导。定义残差:

r n ( θ ) = x [ n ] − s [ n ; θ ] r_n(\boldsymbol{\theta}) = x[n] - s[n; \boldsymbol{\theta}] rn(θ)=x[n]s[n;θ]

则目标函数可写为:

J ( θ ) = ∑ n = 0 N − 1 r n ( θ ) r n ( θ ) ‾ J(\boldsymbol{\theta}) = \sum_{n=0}^{N-1} r_n(\boldsymbol{\theta}) \overline{r_n(\boldsymbol{\theta})} J(θ)=n=0N1rn(θ)rn(θ)

其中 ( ⋅ ) ‾ \overline{(\cdot)} ()表示复共轭。

2. 梯度计算(Wirtinger导数)

Wirtinger导数定义为:
∇ θ J = 2 ∑ n = 0 N − 1 Re ⁡ ( ∂ r n ∂ θ H r n ) \nabla_{\boldsymbol{\theta}} J = 2 \sum_{n=0}^{N-1} \operatorname{Re} \left( \frac{\partial r_n}{\partial \boldsymbol{\theta}}^H r_n \right) θJ=2n=0N1Re(θrnHrn)

其中 ( ⋅ ) H (\cdot)^H ()H表示共轭转置。具体到每个参数:

  • 幅度 A 0 A_0 A0的梯度分量

∂ r n ∂ A 0 = − e j ( 2 π f 0 n T s + ϕ 0 ) \frac{\partial r_n}{\partial A_0} = -e^{j(2\pi f_0 n T_s + \phi_0)} A0rn=ej(2πf0nTs+ϕ0)

∂ J ∂ A 0 = 2 Re ⁡ ( ∑ n = 0 N − 1 [ − e − j ( 2 π f 0 n T s + ϕ 0 ) ] r n ) \frac{\partial J}{\partial A_0} = 2 \operatorname{Re} \left( \sum_{n=0}^{N-1} \left[ -e^{-j(2\pi f_0 n T_s + \phi_0)} \right] r_n \right) A0J=2Re(n=0N1[ej(2πf0nTs+ϕ0)]rn)

  • 频率 f 0 f_0 f0的梯度分量

∂ r n ∂ f 0 = − j ⋅ 2 π n T s A 0 e j ( 2 π f 0 n T s + ϕ 0 ) \frac{\partial r_n}{\partial f_0} = -j \cdot 2\pi n T_s A_0 e^{j(2\pi f_0 n T_s + \phi_0)} f0rn=j2πnTsA0ej(2πf0nTs+ϕ0)

∂ J ∂ f 0 = 2 Re ⁡ ( ∑ n = 0 N − 1 [ j ⋅ 2 π n T s A 0 e − j ( 2 π f 0 n T s + ϕ 0 ) ] r n ) \frac{\partial J}{\partial f_0} = 2 \operatorname{Re} \left( \sum_{n=0}^{N-1} \left[ j \cdot 2\pi n T_s A_0 e^{-j(2\pi f_0 n T_s + \phi_0)} \right] r_n \right) f0J=2Re(n=0N1[j2πnTsA0ej(2πf0nTs+ϕ0)]rn)

  • 相位 ϕ 0 \phi_0 ϕ0的梯度分量

∂ r n ∂ ϕ 0 = − j A 0 e j ( 2 π f 0 n T s + ϕ 0 ) \frac{\partial r_n}{\partial \phi_0} = -j A_0 e^{j(2\pi f_0 n T_s + \phi_0)} ϕ0rn=jA0ej(2πf0nTs+ϕ0)

∂ J ∂ ϕ 0 = 2 Re ⁡ ( ∑ n = 0 N − 1 [ j A 0 e − j ( 2 π f 0 n T s + ϕ 0 ) ] r n ) \frac{\partial J}{\partial \phi_0} = 2 \operatorname{Re} \left( \sum_{n=0}^{N-1} \left[ j A_0 e^{-j(2\pi f_0 n T_s + \phi_0)} \right] r_n \right) ϕ0J=2Re(n=0N1[jA0ej(2πf0nTs+ϕ0)]rn)

A 1 , f 1 , ϕ 1 A_1, f_1, \phi_1 A1,f1,ϕ1的梯度形式类似,只需将下标0改为1)

3. Hessian矩阵近似

为加速收敛,采用Gauss-Newton法近似Hessian:

H ( θ ) ≈ 2 ∑ n = 0 N − 1 Re ⁡ ( ∂ r n ∂ θ H ∂ r n ∂ θ ) \mathbf{H}(\boldsymbol{\theta}) \approx 2 \sum_{n=0}^{N-1} \operatorname{Re} \left( \frac{\partial r_n}{\partial \boldsymbol{\theta}}^H \frac{\partial r_n}{\partial \boldsymbol{\theta}} \right) H(θ)2n=0N1Re(θrnHθrn)

其中雅可比矩阵的行向量为:

J n = ∂ r n ∂ θ = [ ∂ r n ∂ A 0 , ∂ r n ∂ f 0 , ∂ r n ∂ ϕ 0 , ∂ r n ∂ A 1 , ∂ r n ∂ f 1 , ∂ r n ∂ ϕ 1 ] \mathbf{J}_n = \frac{\partial r_n}{\partial \boldsymbol{\theta}} = \left[ \frac{\partial r_n}{\partial A_0}, \frac{\partial r_n}{\partial f_0}, \frac{\partial r_n}{\partial \phi_0}, \frac{\partial r_n}{\partial A_1}, \frac{\partial r_n}{\partial f_1}, \frac{\partial r_n}{\partial \phi_1} \right] Jn=θrn=[A0rn,f0rn,ϕ0rn,A1rn,f1rn,ϕ1rn]

4. 带约束的Gauss-Newton算法

迭代格式如下:

步骤1:初始化参数 θ ( 0 ) \boldsymbol{\theta}^{(0)} θ(0),设置迭代索引 k = 0 k=0 k=0

步骤2:计算当前残差 r n ( k ) = x [ n ] − s [ n ; θ ( k ) ] r_n^{(k)} = x[n] - s[n; \boldsymbol{\theta}^{(k)}] rn(k)=x[n]s[n;θ(k)]

步骤3:计算梯度 g ( k ) = ∇ J ( θ ( k ) ) \mathbf{g}^{(k)} = \nabla J(\boldsymbol{\theta}^{(k)}) g(k)=J(θ(k))和近似Hessian H ( k ) \mathbf{H}^{(k)} H(k)

步骤4:求解带约束的线性最小二乘问题:

δ ( k ) = arg ⁡ min ⁡ δ ∥ J ( k ) δ + r ( k ) ∥ 2 \boldsymbol{\delta}^{(k)} = \arg \min_{\boldsymbol{\delta}} \| \mathbf{J}^{(k)} \boldsymbol{\delta} + \mathbf{r}^{(k)} \|^2 δ(k)=argδminJ(k)δ+r(k)2

s.t. θ ( k ) + δ ∈ Ω \text{s.t.} \quad \boldsymbol{\theta}^{(k)} + \boldsymbol{\delta} \in \Omega s.t.θ(k)+δΩ

其中 Ω \Omega Ω为参数可行域, r ( k ) = [ r 0 ( k ) , … , r N − 1 ( k ) ] T \mathbf{r}^{(k)} = [r_0^{(k)}, \dots, r_{N-1}^{(k)}]^T r(k)=[r0(k),,rN1(k)]T

步骤5:更新参数 θ ( k + 1 ) = θ ( k ) + μ δ ( k ) \boldsymbol{\theta}^{(k+1)} = \boldsymbol{\theta}^{(k)} + \mu \boldsymbol{\delta}^{(k)} θ(k+1)=θ(k)+μδ(k) μ \mu μ为步长)

步骤6:若 ∥ δ ( k ) ∥ < ϵ \|\boldsymbol{\delta}^{(k)}\| < \epsilon δ(k)<ϵ则停止,否则 k ← k + 1 k \leftarrow k+1 kk+1转步骤2


三、边界约束处理策略

采用投影梯度法处理边界约束:

  1. 在每次迭代更新后,检查参数是否越界:

θ new = P Ω ( θ + μ δ ) \boldsymbol{\theta}_{\text{new}} = \mathcal{P}_{\Omega} \left( \boldsymbol{\theta} + \mu \boldsymbol{\delta} \right) θnew=PΩ(θ+μδ)

其中投影算子 P Ω \mathcal{P}_{\Omega} PΩ定义为:

P Ω ( θ i ) = { θ min ⁡ , i θ i < θ min ⁡ , i θ i θ min ⁡ , i ≤ θ i ≤ θ max ⁡ , i θ max ⁡ , i θ i > θ max ⁡ , i \mathcal{P}_{\Omega}(\theta_i) = \begin{cases} \theta_{\min,i} & \theta_i < \theta_{\min,i} \\ \theta_i & \theta_{\min,i} \leq \theta_i \leq \theta_{\max,i} \\ \theta_{\max,i} & \theta_i > \theta_{\max,i} \end{cases} PΩ(θi)= θmin,iθiθmax,iθi<θmin,iθmin,iθiθmax,iθi>θmax,i

  1. 对于相位周期性约束,投影后需归一化到 [ − π , π ] [-\pi, \pi] [π,π]
    ϕ proj = m o d ( ϕ + π , 2 π ) − π \phi_{\text{proj}} = \mod(\phi + \pi, 2\pi) - \pi ϕproj=mod(ϕ+π,2π)π

四、算法完整流程(伪代码)


输入:观测信号 x[0..N-1], 采样率 fs, 初始估计 θ_init输出:优化参数 θ_opt设定:最大迭代次数 K, 容差 ε, 步长 μ=0.1θ_prev ← θ_initfor k = 1 to K do// 1. 计算当前残差和雅可比矩阵for n = 0 to N-1 dor_n = x[n] - s(n; θ_prev)J_n = [∂r/∂A0, ∂r/∂f0, ∂r/∂φ0, ∂r/∂A1, ∂r/∂f1, ∂r/∂φ1]  // 按Wirtinger导数公式end// 2. 构造正规方程H = Re(J^H * J)  // 6×6实对称矩阵g = Re(J^H * r)  // 6×1实向量// 3. 求解线性系统 (带约束)δ = H \ g  // 高斯消去法或Cholesky分解// 4. 带投影的参数更新θ_temp = θ_prev + μ * δθ_new = ProjectToBounds(θ_temp)  // 边界投影// 5. 收敛检查if ||θ_new - θ_prev|| < ε thenbreakendθ_prev ← θ_newendθ_opt ← θ_new

五、与现有方法的理论对比

| 算法 | 计算复杂度 | 收敛速度 | 全局最优保证 | 边界处理 |

|-----------------|-------------|---------|------------|---------|

| 本文方法 | O(6^2N) | 二次收敛 | 局部最优 | 投影法 |

| SSA-BSS | O(N log N) | 一次迭代 | 依赖初始化 | 无 |

| 粒子滤波 | O(NM) | 渐近收敛 | 概率保证 | 重采样 |

| 循环对消 | O(N log N) | 一次迭代 | 无 | 无 |

注:M为粒子数


六、论文书写建议

  1. 问题建模部分
  • 明确定义复信号模型和参数向量

  • 给出完整的最小二乘目标函数和约束条件

  1. 算法推导部分
  • 详细说明Wirtinger导数的推导过程

  • 给出Gauss-Newton法的矩阵形式更新公式

  • 解释边界投影算子的实现

  1. 实验部分
  • 比较梯度解析计算与数值微分的精度差异

  • 展示不同SNR下的参数估计Cramér-Rao界

  1. 附录
  • 提供核心算法的伪代码

  • 补充投影梯度的收敛性证明

通过以上数学化表达,可避免出现MATLAB工具箱依赖,提升论文的理论严谨性。实际实现时,可基于上述推导自主编写优化器(如用C++或Python实现),无需调用现成优化库。

取前两个峰值位置 f ^ 0 , f ^ 1 \hat{f}_0, \hat{f}_1 f^0,f^1

@article{chen2022,
title={Precision Extraction of Weak Harmonic Signals in Strong Interference Environments},
author={Chen, Y. and Wang, L. and Smith, J.},
journal={IEEE Transactions on Instrumentation and Measurement},
volume={71},
pages={1–10},
year={2022},
doi={10.1109/TIM.2022.3147321}
}
其中 θ = [ A 0 , f 0 , ϕ 0 , A 1 , f 1 , ϕ 1 ] T \boldsymbol{\theta} = [A_0, f_0, \phi_0, A_1, f_1, \phi_1]^T θ=[A0,f0,ϕ0,A1,f1,ϕ1]T 是 6维参数向量

δ = − ( J T J ) − 1 J T r \boldsymbol{\delta} = -(\mathbf{J}^T\mathbf{J})^{-1}\mathbf{J}^T\mathbf{r} δ=(JTJ)1JTr

常用步长选择方法:

  1. 固定步长(不推荐):需要经验且难以适应不同迭代。

  2. 精确线搜索:求解α使J(θ_k + αδ_k)最小化,计算量大。

  3. 非精确线搜索(Armijo准则等):折中方案,保证充分下降且计算量小。

对于大多数应用,内置的 lsqnonlin 配合 Levenberg-Marquardt 算法是最佳选择。只有在研究算法细节或需要特殊修改时,才需要自己实现高斯牛顿法。

代码:

function estimateSignalParameters()% 生成测试信号N = 128;n = (0:N-1)';w_true = [0.3*pi, 0.5*pi]; % 角频率在[0, pi]内c_true = [1.2-0.3i, 0.8+0.5i]; % 复振幅y = c_true(1)*exp(1i*w_true(1)*n) + c_true(2)*exp(1i*w_true(2)*n);y = y + 0.1*(randn(N,1) + 1i*randn(N,1)); % 添加噪声% FFT初始估计Y = fft(y);[~, idx] = sort(abs(Y(1:N/2)), 'descend');f_init = (idx(1:2)-1)/N; % 归一化频率w_init = 2*pi*f_init; % 角频率% 最小二乘估计初始振幅A = [exp(1i*w_init(1)*n), exp(1i*w_init(2)*n)];c_init = A \ y;% 初始参数向量 [ω1, ω2, Re(c1), Im(c1), Re(c2), Im(c2)]theta0 = [w_init(1), w_init(2), real(c_init(1)), imag(c_init(1)), real(c_init(2)), imag(c_init(2))];% 设置边界约束lb = [0, 0, -10, -10, -10, -10]; % 频率下限0,振幅范围-10~10ub = [pi, pi, 10, 10, 10, 10];   % 频率上限pi% 优化选项options = optimoptions('lsqnonlin', ...'Algorithm', 'trust-region-reflective', ...'Display', 'iter', ...'MaxFunctionEvaluations', 3000, ...'FunctionTolerance', 1e-8, ...'StepTolerance', 1e-10);% 运行约束优化[theta_opt, resnorm, residual, exitflag, output] = lsqnonlin(...@(theta) computeResiduals(theta, n, y), ...theta0, lb, ub, options);% 提取优化结果w_est = theta_opt(1:2);c_est = [theta_opt(3)+1i*theta_opt(4), theta_opt(5)+1i*theta_opt(6)];% 显示结果disp('真实参数:');disp(['频率: ', num2str(w_true)]);disp(['振幅: ', num2str(abs(c_true)), ' 相位: ', num2str(angle(c_true))]);disp('估计参数:');disp(['频率: ', num2str(w_est)]);disp(['振幅: ', num2str(abs(c_est)), ' 相位: ', num2str(angle(c_est))]);% 绘图验证s_opt = c_est(1)*exp(1i*w_est(1)*n) + c_est(2)*exp(1i*w_est(2)*n);figure;subplot(2,1,1);plot(n, real(y), 'b', n, real(s_opt), 'r--');title('实部对比'); legend('观测', '模型');subplot(2,1,2);plot(n, imag(y), 'b', n, imag(s_opt), 'r--');title('虚部对比'); legend('观测', '模型');
endfunction residuals = computeResiduals(theta, n, y)w1 = theta(1); w2 = theta(2);a1 = theta(3); b1 = theta(4);a2 = theta(5); b2 = theta(6);s = (a1 + 1i*b1)*exp(1i*w1*n) + (a2 + 1i*b2)*exp(1i*w2*n);r = y - s;residuals = [real(r); imag(r)]; % 实值残差向量
end

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程中高效缓存设计的哲学

文章目录 引言详解缓存的设计和演进基于缓存存储运算结果锁分段散列减小锁粒度异步化提升处理效率原子化避免重复运算小结参考引言 本文将基于并发编程和算法中经典的哈希取模、锁分段、 异步化、原子化。这几个核心设计理念编写逐步推演出一个相对高效的缓存工具,希望对你有…

MATLAB的.mat文件

.mat文件是MATLAB的专有二进制数据文件格式&#xff0c;用于保存MATLAB工作空间中的变量和数据。 主要特点&#xff1a; 1. 存储内容&#xff1a; 各种类型的变量&#xff08;数组、矩阵、结构体、单元数组等&#xff09;函数句柄、对象稀疏矩阵多维数组 2. 文件特性&#…

ICM-20948 Wake on Motion功能开发全过程(7)

接前一篇文章:ICM-20948 Wake on Motion功能开发全过程(6) 探索工作 深入探索 上一回讲到,笔者在InvenSense官网上找到了实现Wake on Motion功能的指导文档。其中主要步骤如下: 本回就来结合文档中的步骤,详细讲解每一步。 (1)第1步 —— 初始化所有配置 注意,文档…

Dipal D1:数字人时代的全新人机关系形态

在科技不断突破的今天,虚拟与现实之间的界限正变得越来越模糊。Dipal D1 作为全球首款搭载2.5K曲面OLED显示屏的3D AI数字人硬件产品,不仅是一款情感陪伴设备,更是AI、AIGC、动漫文化与情感科技深度融合下的全新交互入口。它代表着“孤独经济”、“创作者经济”和“虚拟互动…

Linux离线编译安装nginx

Linux离线安装nginx 1.切换到root用户 #切换到root用户 su - #退出root用户 exit2.目录操作 #切到根目录 cd / #查看目录 ls #切目录 cd /home/... #到对应的目录下解压3.安装Nginx 在有网络的设备上下载以下文件&#xff1a; Nginx&#xff1a;从 nginx.org/en/download…

Qt PyQt与PySide技术-C++库的Python绑定

Qt PyQt与PySide技术-C库的Python绑定 一、概述二、区别于联系1、PyQt&#xff1a;Riverbank Computing的解决方案a、发展历程b、许可模式c、技术特点 2、PySide&#xff1a;Qt官方的Python绑定a、发展历程b、许可模式c、技术特点 三、对比许可证功能与兼容性社区与维护其他差异…

使用.detach()代替requires=False避免计算图错误

解决对一个对象多次BP更新时造成的RuntimeError: you can only change requires_grad flags of leaf variables.问题_解决对一个对象多次bp更新时造成的问题-CSDN博客 代码中存在一个特征需要参与辅助损失的计算&#xff0c;由于需要反复进行反向传播更新&#xff0c;计算图容易…

linux+docker+ollama+git常用指令

1、Linux命令 新建txt文件&#xff1a;touch xxx.txt 给txt文件夹权限&#xff1a;chmod x xxx.txt 查看日志&#xff1a;tail -f xxx.log / less xxx.log 根据关键字查看日志&#xff1a;grep "error" 文件名 查看端口状态&#xff1a;netstat -an|grep xxxxx 查看…

【八股消消乐】消息队列优化—系统架构设计

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本专栏《八股消消乐》旨在记录个人所背的八股文&#xff0c;包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…

WebSocket长连接在小程序中的实践:消息推送与断线重连机制设计

一、引言&#xff1a;为什么需要WebSocket长连接&#xff1f; 传统方案的痛点&#xff1a;HTTP轮询的低效性&#xff08;高延迟、高资源消耗&#xff09;小程序场景需求&#xff1a;实时消息推送&#xff08;如IM、直播弹幕、IoT设备状态同步&#xff09;技术选型对比&#xf…

MySQL索引使用指南:何时该为字段添加索引?

在MySQL的性能优化中&#xff0c;索引是最常用且有效的手段之一。但“索引不是万能药”——盲目添加索引可能导致写操作变慢、存储空间浪费&#xff0c;甚至引发索引失效问题。本文将结合原理与实战场景&#xff0c;帮你理清​​“何时该用索引”​​的核心判断逻辑。 一、先理…

AI时代关键词SEO优化

内容概要 在人工智能&#xff08;AI&#xff09;驱动的时代浪潮下&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;正迎来深刻变革&#xff0c;关键词策略已成为流量获取的核心战场。本文将系统剖析AI时代关键词优化的前沿方法&#xff0c;涵盖语义分析的精准研究、用户意…

GO 语言学习 之 代码风格

1. 命名规范 字母数字和下划线组成 以小写字母、大写字母或下划线开头 不允许包含标点符号、运算符、空白字符&#xff08;空格、TAB、换行&#xff09;等 采用驼峰命名法 &#xff08;大驼峰、小驼峰&#xff09; 见名知义&#xff1a;命名要有实际意义&#xff0c;易读性&am…

【软考高级系统架构论文】论云上自动化运维及其应用

论文真题 云上自动化运维是传统IT运维和 DevOps的延伸,通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本,提升系统的灵活度,以及系统的交付速度,增强系统的可靠性,构建更加安全、可信、开放的业务平台。 请围绕“云上自动化运维及其应用”…

错误: 程序包androidx.fragment.app不存在 import android

错误: 程序包androidx.fragment.app不存在 import androidx.fragment.app.FragmentActivity; 这个是什么错?dependencies { //implementation fileTree(dir: libs, include: [*.jar]) implementation project(path: :libscan) //noinspection GradleCompatible implementation…

Java UDP Socket 实时在线刷卡扫码POS消费机门禁控制板服务端示例源码

本示例使用的设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bYG0BuO&ftt&id17021194999 一、获取本电脑所有网卡IP public static String getIP() {Enumeration<NetworkInterface> netInterfaces;ArrayList<String>…

MATLAB基础应用精讲-【数模应用】层次分析法(AHP)(附MATLAB和python代码实现)

目录 前言 算法原理 什么是层次分析法(AHP) 注意事项 基本原理 算法步骤 1建立层次结构 2构建判断矩阵 3计算权重向量 4一致性检验 SPSSAU AHP层次分析案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 数据如何录入? 如何…

Macintosh小电脑、小手机 | openKylin最新硬件创意形态首次亮相!

近期&#xff0c;OpenAtom openKylin&#xff08;简称 “openKylin”&#xff09;社区与嘉立创旗下的立创开发板团队展开深度技术合作&#xff0c;成功完成立创・泰山派1开发板与openKylin 2.0操作系统的兼容适配。5月24日&#xff0c;嘉立创“第三届开源硬件星火会”在深圳盛大…

基于Spring Boot的计算机考研交流系统的设计与实现

基于Spring Boot的计算机考研交流系统的设计与实现 随着计算机科学的发展&#xff0c;越来越多的学生选择考研来提高自己的专业水平。然而&#xff0c;考研的过程中&#xff0c;学生们面临着各种问题&#xff0c;如学习资料的获取、交流平台的缺乏等。为了更好地满足这些需求&…

技术逐梦之旅:从C语言到Vue的成长之路

董翔&#xff0c;一个对软件技术充满热忱的00后。从初次在屏幕上敲出"Hello World"的激动&#xff0c;到如今能够独立开发完整Web应用的从容&#xff0c;我的编程之路见证了技术的迭代与自我的蜕变。 作为软件专业的学生&#xff0c;我始终坚信"技术是解决问题…