✨ 长期致力于正交频分复用、实时数字信号处理、符号定时同步、信道估计、采样时钟频率同步、高阶正交幅度调制研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于符号位互相关的低复杂度符号定时同步算法SB-CC针对硬件实现中乘法器资源紧张的问题提出仅使用接收数据与本地训练序列的符号位进行互相关计算。将每个采样点的实部与虚部符号1或-1代替原始幅度互相关运算仅需异或门和加法器。在定点仿真中该算法的定时度量峰值比传统互相关方法低约1.2dB但在信噪比大于12dB时检测成功率仍高于99.9%。在FPGA中实现仅消耗126个LUT和2个DSP slice而传统方法需要约350个LUT和28个DSP。在实时DDO-OFDM系统中该算法正确检测了帧起始位置训练序列开销为1.5%。2基于导频的采样时钟频率偏差估计与两级同步方案P-SCFO针对大范围采样时钟偏差导致子载波间干扰的问题设计基于导频子载波的相位差估计方法。在每个OFDM符号的4个指定导频位置上计算相邻符号的相位旋转量通过线性回归估计采样偏差。当估计偏差超过50ppm时启用辅助同步电路对ADC采样时钟进行粗调将偏差快速拉到20ppm以内然后再由数字域补偿残余偏差。在20km单模光纤传输实验中初始偏差为120ppm时两级同步方案在0.5秒内将偏差锁定到±5ppm误码率从无法锁定时的2.1e-2降低到1.2e-3。该方案不需要高精度的压控振荡器显著降低了系统成本。31024QAM调制的自适应限幅与数字预失真校正AL-DPC针对高阶QAM OFDM信号峰值平均功率比过高导致数模转换器量化噪声恶化的问题提出自适应限幅率优化算法。根据DAC的有效位数和信号瞬时功率动态调整限幅阈值使限幅噪声与量化噪声之和最小。在8.88bit/s/Hz频谱效率的1024QAM-OFDM系统中最佳限幅率确定为4.2dB接收灵敏度为-19.5dBmBER3.8e-3。同时采用记忆多项式数字预失真补偿马赫曾德尔调制器的非线性三阶交调失真改善12dB。在FPGA上实现了实时1024QAM OFDM收发机经过20km光纤传输后误差向量幅度为2.8%。import numpy as np from scipy.signal import correlate def SB_CC_timing(signal, training_seq, threshold0.6): # signal: complex baseband, training_seq: known symbol sequence bin_signal np.sign(np.real(signal)) 1j*np.sign(np.imag(signal)) bin_train np.sign(np.real(training_seq)) 1j*np.sign(np.imag(training_seq)) corr correlate(bin_signal, bin_train[::-1], modevalid) metric np.abs(corr) / len(training_seq) peak_idx np.argmax(metric) if metric[peak_idx] threshold: return peak_idx, metric[peak_idx] else: return -1, 0 def P_SCFO_estimation(pilots_phase, expected_phase_diff, symbol_index): # pilots_phase: list of measured phases at pilot subcarriers phase_errors np.array(pilots_phase) - expected_phase_diff slope np.polyfit(symbol_index, phase_errors, 1)[0] ppm_estimate slope * 1e6 / (2 * np.pi * 10e6) # 10MHz sampling return ppm_estimate def AL_DPC_adaptive_clipping(signal, dac_bits10, papr_target4.2): # signal: time domain OFDM symbol clip_level np.sqrt(papr_target) * np.std(signal) clipped np.clip(signal, -clip_level, clip_level) quant_noise (clip_level / (2**(dac_bits-1)))**2 / 12 clip_noise np.mean((np.abs(signal) - clip_level)**2 * (np.abs(signal) clip_level)) total_noise quant_noise clip_noise return clipped, total_noise def memory_polynomial_dpd(x, coeffs, memory_depth3): # coeffs: [order, memory] array y np.zeros(len(x), dtypecomplex) for n in range(memory_depth, len(x)): for m in range(memory_depth): for k in range(len(coeffs)): y[n] coeffs[k,m] * x[n-m] * np.abs(x[n-m])**(2*k) return y def evm_calculation(tx_symbols, rx_symbols): error tx_symbols - rx_symbols evm np.sqrt(np.mean(np.abs(error)**2) / np.mean(np.abs(tx_symbols)**2)) * 100 return evm