一、信号模型与优化问题建立
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,…,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]T∈R6
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=0∑N−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;θ]=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 ⎩ ⎨ ⎧0≤Ak≤Amaxfmin≤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=0∑N−1rn(θ)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=0∑N−1Re(∂θ∂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)} ∂A0∂rn=−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) ∂A0∂J=2Re(n=0∑N−1[−e−j(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)} ∂f0∂rn=−j⋅2π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) ∂f0∂J=2Re(n=0∑N−1[j⋅2πnTsA0e−j(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)} ∂ϕ0∂rn=−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) ∂ϕ0∂J=2Re(n=0∑N−1[jA0e−j(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=0∑N−1Re(∂θ∂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=[∂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 k←k+1转步骤2
三、边界约束处理策略
采用投影梯度法处理边界约束:
- 在每次迭代更新后,检查参数是否越界:
θ 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
- 对于相位周期性约束,投影后需归一化到 [ − π , π ] [-\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为粒子数
六、论文书写建议
- 问题建模部分:
-
明确定义复信号模型和参数向量
-
给出完整的最小二乘目标函数和约束条件
- 算法推导部分:
-
详细说明Wirtinger导数的推导过程
-
给出Gauss-Newton法的矩阵形式更新公式
-
解释边界投影算子的实现
- 实验部分:
-
比较梯度解析计算与数值微分的精度差异
-
展示不同SNR下的参数估计Cramér-Rao界
- 附录:
-
提供核心算法的伪代码
-
补充投影梯度的收敛性证明
通过以上数学化表达,可避免出现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
常用步长选择方法:
-
固定步长(不推荐):需要经验且难以适应不同迭代。
-
精确线搜索:求解α使J(θ_k + αδ_k)最小化,计算量大。
-
非精确线搜索(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