帶約束的高斯牛頓法求解多音信號分離問題

一、信號模型與優化問題建立

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]=A0?ej(2πf0?nTs?+?0?)+A1?ej(2πf1?nTs?+?1?)+w[n],n=0,1,,N?1

其中:

  • 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 θmin?J(θ)=n=0N?1?x[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;θ]=A0?ej(2πf0?nTs?+?0?)+A1?ej(2πf1?nTs?+?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 ? ? ??0Ak?Amax?fmin?fk?fmax??π?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=0N?1?rn?(θ)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=0N?1?Re(?θ?rn??Hrn?)

其中 ( ? ) 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)} ?A0??rn??=?ej(2πf0?nTs?+?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) ?A0??J?=2Re(n=0N?1?[?e?j(2πf0?nTs?+?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)} ?f0??rn??=?j?2πnTs?A0?ej(2πf0?nTs?+?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) ?f0??J?=2Re(n=0N?1?[j?2πnTs?A0?e?j(2πf0?nTs?+?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)} ??0??rn??=?jA0?ej(2πf0?nTs?+?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) ??0??J?=2Re(n=0N?1?[jA0?e?j(2πf0?nTs?+?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=0N?1?Re(?θ?rn??H?θ?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??=[?A0??rn??,?f0??rn??,??0??rn??,?A1??rn??,?f1??rn??,??1??rn??]

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δmin?J(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)?,,rN?1(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;我始終堅信"技術是解決問題…