一种基于联合检测的自动增益控制方法与流程

专利2022-06-29  77


本发明属于通信技术领域,具体涉及一种基于联合检测的自动增益控制方法。



背景技术:

在宽带通信系统中,由于受到距离、温度、天气和阻碍等各种未知因素的影响,接收机接收到的信号不仅及其微弱,而且还会不定的发生变化。在类如网线或电力线通信的有线通信系统中,由于接入线路的设备复杂多样、负载设备不定时接入和切出,再加上电缆损耗等多方面的因素,使得有线信道中的噪声种类复杂,接收信号的强度呈现多样性,为了使接收机可以高效的工作,需要设计一种数字自动增益控制算法,实现在输入信号强度不断变化时,通过对增益的自动调节,使输出维持在一个稳定的状态,保证接收机后级可以正常的工作。

自动增益控制常用的方法是基于功率电平检测来实现的,大致处理过程为:对接收端a/d输出的数字信号,选取长度为n的样点的,sample_in0、sample_in1......sample_inn-1,然后对该长度为n的样点求和sum,之后再计算n点的平均值:sample_inaver(n)=(sample_in0 sample_in1 ..... sample_inn-1)/n;得到当前接收信号的功率电平:p=sample_inaver(n),再根据预先设置的期望功率pe计算差值delta_gain,根据计算结果delta_gain对输出增益g进行更新。

上述常规方法检测弊端在于单一的功率电平检测,不能同时兼顾收敛的速度和稳定性的问题,检测结果可靠性低,实际通信的可利用性差。



技术实现要素:

本发明的目的在于提供一种基于联合检测的自动增益控制方法,以解决上述问题。

为实现上述目的,本发明采用以下技术方案:

一种基于联合检测的自动增益控制方法,包括:对a/d输出信号的强度大小进行包括饱和状态检测处理、峰值检测处理、峰均比检测处理、滤波运算、自动增益更新处理和辅助接收机符号定时检测处理的增益调整;其中,饱和检测处理、峰值检测处理、峰均比检测处理和滤波运算的结果输出到自动增益更新处理模块的输入端,经过增益更新处理后,输出最终需要补偿的增益值,对a/d输出信号进行增益调整;具体包括以下步骤:

步骤s1,初始检测数据长度t_freeze等于预先设置值n_freeze,检测起始位置t_update等于预先设置值n_update,a/d输出信号初始补偿增益gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last等于预设增益gain0;

步骤s2,比较t_updata与t_freeze,若t_updata小于t_freeze,对a/d输出样点sample_in0、sample_in1......sample_int_freeze-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积filt_fxpj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_int_freeze-1样点后,输出filt_fxp0、filt_fxp1......filt_fxpt_freeze-1;

步骤s3,将表征饱和状态检测标志sat_run、饱和定时器sat_tmr、饱和计数器sat_cnt置为0,将表征峰值检测标志peak_run、峰值定时器peak_tmr、峰值计数器peak_cnt置为0,将峰均比定时器papr_tmr、增益变量delta_gain、滤波器输出filt_mag置为0;

步骤s4,对样点filt_fxp0、filt_fxp1......filt_fxpt_update-1,分别进行:

将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

将绝对值samp_magi送入滤波运算输出filt_mag,其中滤波运算过程filt_mag=(filt_mag*(2^n-1))/2^n samp_magi,n为预先设置位宽,同时计算滤波计数器filt_cnt,如果前一次的filt_cnt小于预先设置值n_filt,filt_cnt=filt_cnt 1,否则,filt_cnt保持不变;

步骤s5,遍历完filt_fxp0、filt_fxp1......filt_fxpt_update-1样点后,输出filt_mag,同时将filt_cnt置为0;

步骤s6,对样点filt_fxpt_update、filt_fxpt_update 1......filt_fxpt_freeze-1执行状态联合检测;

步骤s7,判断收敛条件delta_gain等于0是否满足,如果不满足,跳转到步骤s2,否则,停止检测,输出最终的补偿增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last;

步骤s8,对a/d输出样点sample_in0、sample_in1......sample_insize_in-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积sample_outj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_insize_in-1样点后,输出自动增益调整后的信号sample_out0、sample_out1......sample_outsize_in-1;

步骤s9,查找最后一个增益变化位置t_dgain,具体过程是:将gain_vectorj_last作为检测增益,计算gain_vectorj_last与gain_vectorj-1_last的绝对值abs_gain,如果abs_gain大于预先设置值delta_ave,执行t_dgain=j;

步骤s10,遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。

进一步的,步骤s6具体包括:

步骤s61,将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

步骤s62,饱和状态检测、峰值检测、峰均比检测,具体过程是s621-s626:

步骤s621,若步骤s61中绝对值samp_magi大于预设饱和门限thr_sat,将饱和标志sat_flag写“1”,否则,sat_flag写“0”;若步骤s61中绝对值samp_magi大于预设峰值门限thr_peak,将峰值标志peak_flag写“1”,否则,peak_flag写“0”;若步骤s61中绝对值samp_magi大于预设峰均比门限thr_papr,将峰均比标志papr_flag写“1”,否则,papr_flag写“0”;

步骤s622,若步骤s621中饱和标志sat_flag为“1”,将sat_run写“1”,同时sat_cnt=sat_cnt 1,sat_tmr=sat_tmr 1;若步骤s621中饱和标志sat_flag等于“0”,判断前一次检测的饱和计数器运行标志sat_run是否等于“1”,若成立,sat_tmr=sat_tmr 1;

步骤s623,若步骤s622中sat_tmr大于预先设置值n_sat_tmr并且步骤s622中饱和计数器sat_cnt小于预先设置值n_sat_cnt,将sat_run、sat_tmr、sat_cnt写“0”,否则,sat_run、sat_tmr、sat_cnt保持步骤s622的结果不变;

步骤s624,若步骤s621中峰值标志peak_flag为“1”,将peak_run写“1”,同时peak_cnt=peak_cnt 1,peak_tmr=peak_tmr 1;若步骤s621中峰值标志peak_flag等于“0”,判断前一次检测的峰值计数器运行标志peak_run是否等于“1”,若成立,peak_tmr=peak_tmr 1;

步骤s625,若步骤s624中峰值定时器peak_tmr大于预先设置值n_peak_tmr,将peak_run、peak_tmr、peak_cnt写“0”,否则,peak_run、peak_tmr、peak_cnt保持步骤s624的结果不变;

步骤s626,若步骤s621中峰均比标志papr_flag等于“1”,将峰均比定时器papr_tmr写“0”,否则,papr_tmr=papr_tmr 1;

步骤s63,参考步骤66,对步骤s61中绝对值samp_magi进行滤波运算,输出filt_mag,filt_cnt;

步骤s64,计算增益变量delta_gain值,具体过程是:

步骤s641,设置delta_gain为“0”;

步骤s642,将步骤s623中sat_cnt与预先设置值n_cnt1进行比较,若sat_cnt大于n_cnt1,输出delta_gain为预先设置增益delta_sat,同时,将sat_run、sat_tmr、sat_cnt清“0”,跳到步骤s646;若sat_cnt小于n_cnt1,跳到步骤s643;

步骤s643,将步骤s625中peak_cnt与预先设置值n_cnt2进行比较,若peak_cnt大于n_cnt2,将步骤s625中peak_tmr与预先设置值n_cnt3进行比较,若peak_tmr小于n_cnt3,输出delta_gain为预先设置增益delta_peak1,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s646,若peak_tmr大于等于n_cnt3,输出delta_gain为预先设置增益delta_peak2,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s646;若peak_cnt小于等于n_cnt2,跳到步骤s644;

步骤s644,将步骤s626中papr_tmr与预先设置值n_cnt4进行比较,若papr_tmr等于n_cnt4,输出delta_gain为预先设置增益delta_papr,同时,将papr_tmr清“0”,跳到步骤s646;若papr_tmr不等于n_cnt4,跳到步骤s645;

步骤s645,将步骤s63中filt_cnt、filt_mag与预先设置值n_filt-1、thr_rms_lo、thr_rms_hi进行比较,若filt_cnt大于n_filt-1并且filt_mag小于thr_rms_lo,输出delta_gain为预先设置值delta_filt1,跳到步骤s646;若filt_cnt大于n_filt-1并且filt_mag大于thr_rms_hi,输出delta_gain为预先设置值delta_filt2,跳到步骤s646;

步骤s646,通过步骤s641-s645的判决,完成增益变量delta_gain的计算过程;

步骤s65,更新增益,具体过程是:

步骤s651,若步骤s646中delta_gain为“0”,执行i=i 1,跳到步骤s61;若步骤s646中delta_gain不为“0”,更新第i点的增益gain_vectori_next=gain_vectori_last delta_gain,其中,gain_vectori_next代表第i个样点更新后增益,gain_vectori_last代表第i个样点更新前的增益,同时将gain_vectori_next限制在(gain_low,gain_high)区间内,若gain_vectori_next小于gain_low,gain_vectori_next等于gain_low,若gain_vectori_next大于gain_high,gain_vectori_next等于gain_high;

步骤s652,若步骤s651中gain_vectori_next不等于gain_vectori_last,用gain_vectori_next更新增益向量表中第i 1,i 2......size_in-1个元素,[gain_vectori 1_last、gain_vectori 2_last......gain_vectorsize_in-1_last]=[gain_vectori_next、gain_vectori_next......gain_vectori_next],同时更新t_update=i 1,跳到步骤s9;若步骤s651中gain_vectori_next等于gain_vectori_last,将delta_gain写“0”,执行i=i 1,若i大于t_freeze-1,跳到步骤s9,否则,跳到步骤s61。

进一步的,步骤s621中预设饱和门限thr_sat大于预设峰值门限thr_peak。

进一步的,步骤s621中预设峰值门限thr_peak大于预设峰均比门限thr_papr。

进一步的,步骤s623中预设值n_sat_tmr大于预设值n_sat_cnt。

进一步的,步骤s645中预设值thr_rms_hi大于预设值thr_rms_lo。

进一步的,当执行到步骤s9时,若收敛条件delta_gain等于0成立,输出增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last。

进一步的,步骤s12中遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。

与现有技术相比,本发明有以下技术效果:

本发明通过饱和状态检测、峰值检测、峰均比检测和滤波处理各级检测有效结合,实现增益的快速锁定及智能化分档切换,算法收敛快、硬件实时性高度可控。

更进一步的,该方法在饱和状态检测过程中,通过饱和计数结合定时器同时工作,一方面确保当接收信号过饱和时能够以最快的速度对当前增益进行衰减,同时防止突发随机脉冲引起的虚假饱和检测,进而导致收敛时间过长。

更进一步的,该方法在峰值检测过程中,采用阶梯式增益补偿,避免了由于单一增益补偿导致的增益来回跳变。

更进一步的,该方法在联合检测过程中引入峰均比检测,对采用ofdm系统的通信接收机,极大改善了由于功率放大器的非线性和ofdm的高峰均比所引起的非线性失真;

更进一步的,该方法在滤波运算处理中,采用双门限协同检测,避免了单一门限检测引起的agc输出信号边界震荡问题。

本发明的有益效果还在于,在自动增益控制的同时确定符号定时检测起始位置,方便接收机后级同步模块的快速实现,简化设计,降低成本。

附图说明

图1为本发明的结构示意图;

图2为本发明中饱和标志、峰值标志、峰均比标志生成示意图;

图3为本发明中增益变量delta_gain生成示意图;

具体实施方式

下面结合附图和具体实施例对本发明的技术方案进一步说明。

一种基于联合检测的自动增益控制方法,包括:对a/d输出信号的强度大小进行包括饱和状态检测处理、峰值检测处理、峰均比检测处理、滤波运算、自动增益更新处理和辅助接收机符号定时检测处理的增益调整;其中,饱和检测处理、峰值检测处理、峰均比检测处理和滤波运算的结果输出到自动增益更新处理模块的输入端,经过增益更新处理后,输出最终需要补偿的增益值,对a/d输出信号进行增益调整;具体包括以下步骤:

步骤s1,初始检测数据长度t_freeze等于预先设置值n_freeze,检测起始位置t_update等于预先设置值n_update,a/d输出信号初始补偿增益gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last等于预设增益gain0;

步骤s2,比较t_updata与t_freeze,若t_updata小于t_freeze,对a/d输出样点sample_in0、sample_in1......sample_int_freeze-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积filt_fxpj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_int_freeze-1样点后,输出filt_fxp0、filt_fxp1......filt_fxpt_freeze-1;

步骤s3,将表征饱和状态检测标志sat_run、饱和定时器sat_tmr、饱和计数器sat_cnt置为0,将表征峰值检测标志peak_run、峰值定时器peak_tmr、峰值计数器peak_cnt置为0,将峰均比定时器papr_tmr、增益变量delta_gain、滤波器输出filt_mag置为0;

步骤s4,对样点filt_fxp0、filt_fxp1......filt_fxpt_update-1,分别进行:

将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

将绝对值samp_magi送入滤波运算输出filt_mag,其中滤波运算过程filt_mag=(filt_mag*(2^n-1))/2^n samp_magi,n为预先设置位宽,同时计算滤波计数器filt_cnt,如果前一次的filt_cnt小于预先设置值n_filt,filt_cnt=filt_cnt 1,否则,filt_cnt保持不变;

步骤s5,遍历完filt_fxp0、filt_fxp1......filt_fxpt_update-1样点后,输出filt_mag,同时将filt_cnt置为0;

步骤s6,对样点filt_fxpt_update、filt_fxpt_update 1......filt_fxpt_freeze-1执行状态联合检测;

步骤s7,判断收敛条件delta_gain等于0是否满足,如果不满足,跳转到步骤s2,否则,停止检测,输出最终的补偿增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last;

步骤s8,对a/d输出样点sample_in0、sample_in1......sample_insize_in-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积sample_outj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_insize_in-1样点后,输出自动增益调整后的信号sample_out0、sample_out1......sample_outsize_in-1;

步骤s9,查找最后一个增益变化位置t_dgain,具体过程是:将gain_vectorj_last作为检测增益,计算gain_vectorj_last与gain_vectorj-1_last的绝对值abs_gain,如果abs_gain大于预先设置值delta_ave,执行t_dgain=j;

步骤s10,遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。

步骤s6具体包括:

步骤s61,将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

步骤s62,饱和状态检测、峰值检测、峰均比检测,具体过程是s621-s626:

步骤s621,若步骤s61中绝对值samp_magi大于预设饱和门限thr_sat,将饱和标志sat_flag写“1”,否则,sat_flag写“0”;若步骤s61中绝对值samp_magi大于预设峰值门限thr_peak,将峰值标志peak_flag写“1”,否则,peak_flag写“0”;若步骤s61中绝对值samp_magi大于预设峰均比门限thr_papr,将峰均比标志papr_flag写“1”,否则,papr_flag写“0”;

步骤s622,若步骤s621中饱和标志sat_flag为“1”,将sat_run写“1”,同时sat_cnt=sat_cnt 1,sat_tmr=sat_tmr 1;若步骤s621中饱和标志sat_flag等于“0”,判断前一次检测的饱和计数器运行标志sat_run是否等于“1”,若成立,sat_tmr=sat_tmr 1;

步骤s623,若步骤s622中sat_tmr大于预先设置值n_sat_tmr并且步骤s622中饱和计数器sat_cnt小于预先设置值n_sat_cnt,将sat_run、sat_tmr、sat_cnt写“0”,否则,sat_run、sat_tmr、sat_cnt保持步骤s622的结果不变;

步骤s624,若步骤s621中峰值标志peak_flag为“1”,将peak_run写“1”,同时peak_cnt=peak_cnt 1,peak_tmr=peak_tmr 1;若步骤s621中峰值标志peak_flag等于“0”,判断前一次检测的峰值计数器运行标志peak_run是否等于“1”,若成立,peak_tmr=peak_tmr 1;

步骤s625,若步骤s624中峰值定时器peak_tmr大于预先设置值n_peak_tmr,将peak_run、peak_tmr、peak_cnt写“0”,否则,peak_run、peak_tmr、peak_cnt保持步骤s624的结果不变;

步骤s626,若步骤s621中峰均比标志papr_flag等于“1”,将峰均比定时器papr_tmr写“0”,否则,papr_tmr=papr_tmr 1;

步骤s63,参考步骤66,对步骤s61中绝对值samp_magi进行滤波运算,输出filt_mag,filt_cnt;

步骤s64,计算增益变量delta_gain值,具体过程是:

步骤s641,设置delta_gain为“0”;

步骤s642,将步骤s623中sat_cnt与预先设置值n_cnt1进行比较,若sat_cnt大于n_cnt1,输出delta_gain为预先设置增益delta_sat,同时,将sat_run、sat_tmr、sat_cnt清“0”,跳到步骤s646;若sat_cnt小于n_cnt1,跳到步骤s643;

步骤s643,将步骤s625中peak_cnt与预先设置值n_cnt2进行比较,若peak_cnt大于n_cnt2,将步骤s625中peak_tmr与预先设置值n_cnt3进行比较,若peak_tmr小于n_cnt3,输出delta_gain为预先设置增益delta_peak1,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s646,若peak_tmr大于等于n_cnt3,输出delta_gain为预先设置增益delta_peak2,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s646;若peak_cnt小于等于n_cnt2,跳到步骤s644;

步骤s644,将步骤s626中papr_tmr与预先设置值n_cnt4进行比较,若papr_tmr等于n_cnt4,输出delta_gain为预先设置增益delta_papr,同时,将papr_tmr清“0”,跳到步骤s646;若papr_tmr不等于n_cnt4,跳到步骤s645;

步骤s645,将步骤s63中filt_cnt、filt_mag与预先设置值n_filt-1、thr_rms_lo、thr_rms_hi进行比较,若filt_cnt大于n_filt-1并且filt_mag小于thr_rms_lo,输出delta_gain为预先设置值delta_filt1,跳到步骤s646;若filt_cnt大于n_filt-1并且filt_mag大于thr_rms_hi,输出delta_gain为预先设置值delta_filt2,跳到步骤s646;

步骤s646,通过步骤s641-s645的判决,完成增益变量delta_gain的计算过程;

步骤s65,更新增益,具体过程是:

步骤s651,若步骤s646中delta_gain为“0”,执行i=i 1,跳到步骤s61;若步骤s646中delta_gain不为“0”,更新第i点的增益gain_vectori_next=gain_vectori_last delta_gain,其中,gain_vectori_next代表第i个样点更新后增益,gain_vectori_last代表第i个样点更新前的增益,同时将gain_vectori_next限制在(gain_low,gain_high)区间内,若gain_vectori_next小于gain_low,gain_vectori_next等于gain_low,若gain_vectori_next大于gain_high,gain_vectori_next等于gain_high;

步骤s652,若步骤s651中gain_vectori_next不等于gain_vectori_last,用gain_vectori_next更新增益向量表中第i 1,i 2......size_in-1个元素,[gain_vectori 1_last、gain_vectori 2_last......gain_vectorsize_in-1_last]=[gain_vectori_next、gain_vectori_next......gain_vectori_next],同时更新t_update=i 1,跳到步骤s9;若步骤s651中gain_vectori_next等于gain_vectori_last,将delta_gain写“0”,执行i=i 1,若i大于t_freeze-1,跳到步骤s9,否则,跳到步骤s61。

步骤s621中预设饱和门限thr_sat大于预设峰值门限thr_peak。

步骤s621中预设峰值门限thr_peak大于预设峰均比门限thr_papr。

步骤s623中预设值n_sat_tmr大于预设值n_sat_cnt。

步骤s645中预设值thr_rms_hi大于预设值thr_rms_lo。

当执行到步骤s9时,若收敛条件delta_gain等于0成立,输出增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last。

步骤s12中遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。

如图1所示,一种自动增益控制的方法,包括以下步骤:

步骤s1,初始检测数据长度t_freeze等于预先设置值n_freeze,检测起始位置t_update等于预先设置值n_update,a/d输出信号初始补偿增益gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last等于预设增益gain0;

步骤s2,比较t_updata与t_freeze,若t_updata小于t_freeze,对a/d输出样点sample_in0、sample_in1......sample_int_freeze-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积filt_fxpj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_int_freeze-1样点后,输出filt_fxp0、filt_fxp1......filt_fxpt_freeze-1;

步骤s3,将表征饱和状态检测标志sat_run、饱和定时器sat_tmr、饱和计数器sat_cnt置为0,将表征峰值检测标志peak_run、峰值定时器peak_tmr、峰值计数器peak_cnt置为0,将峰均比定时器papr_tmr、增益变量delta_gain、滤波器输出filt_mag置为0;

步骤s4,对样点filt_fxp0、filt_fxp1......filt_fxpt_update-1,分别进行步骤s5-s7;

步骤s5,将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

步骤s6,将步骤s5中绝对值samp_magi送入滤波运算输出filt_mag,其中滤波运算过程filt_mag=(filt_mag*(2^n-1))/2^n samp_magi,n为预先设置位宽,同时计算滤波计数器filt_cnt,如果前一次的filt_cnt小于预先设置值n_filt,filt_cnt=filt_cnt 1,否则,filt_cnt保持不变;

步骤s7,遍历完filt_fxp0、filt_fxp1......filt_fxpt_update-1样点后,输出filt_mag,同时将filt_cnt置为0;

步骤s8,对样点filt_fxpt_update、filt_fxpt_update 1......filt_fxpt_freeze-1执行步骤s81-s85;

步骤s81,将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

步骤s82,饱和状态检测、峰值检测、峰均比检测,具体过程是s821-s826:

步骤s821,如图2,若步骤s81中绝对值samp_magi大于预设饱和门限thr_sat,将饱和标志sat_flag写“1”,否则,sat_flag写“0”;若步骤s81中绝对值samp_magi大于预设峰值门限thr_peak,将峰值标志peak_flag写“1”,否则,peak_flag写“0”;若步骤s81中绝对值samp_magi大于预设峰均比门限thr_papr,将峰均比标志papr_flag写“1”,否则,papr_flag写“0”;

步骤s822,若步骤s821中饱和标志sat_flag为“1”,将sat_run写“1”,同时sat_cnt=sat_cnt 1,sat_tmr=sat_tmr 1;若步骤s821中饱和标志sat_flag等于“0”,判断前一次检测的饱和计数器运行标志sat_run是否等于“1”,若成立,sat_tmr=sat_tmr 1;

步骤s823,若步骤s822中sat_tmr大于预先设置值n_sat_tmr并且步骤s822中饱和计数器sat_cnt小于预先设置值n_sat_cnt,将sat_run、sat_tmr、sat_cnt写“0”,否则,sat_run、sat_tmr、sat_cnt保持步骤s822的结果不变;

步骤s824,若步骤s821中峰值标志peak_flag为“1”,将peak_run写“1”,同时peak_cnt=peak_cnt 1,peak_tmr=peak_tmr 1;若步骤s821中峰值标志peak_flag等于“0”,判断前一次检测的峰值计数器运行标志peak_run是否等于“1”,若成立,peak_tmr=peak_tmr 1;

步骤s825,若步骤s824中峰值定时器peak_tmr大于预先设置值n_peak_tmr,将peak_run、peak_tmr、peak_cnt写“0”,否则,peak_run、peak_tmr、peak_cnt保持步骤s824的结果不变;

步骤s826,若步骤s821中峰均比标志papr_flag等于“1”,将峰均比定时器papr_tmr写“0”,否则,papr_tmr=papr_tmr 1;

步骤s83,参考步骤s6,对步骤s81中绝对值samp_magi进行滤波运算,输出filt_mag,filt_cnt;

步骤s84,如图3,计算增益变量delta_gain值,具体过程是:

步骤s841,设置delta_gain为“0”;

步骤s842,将步骤s823中sat_cnt与预先设置值n_cnt1进行比较,若sat_cnt大于n_cnt1,输出delta_gain为预先设置增益delta_sat,同时,将sat_run、sat_tmr、sat_cnt清“0”,跳到步骤s846;若sat_cnt小于n_cnt1,跳到步骤s843;

步骤s843,将步骤s825中peak_cnt与预先设置值n_cnt2进行比较,若peak_cnt大于n_cnt2,将步骤s825中peak_tmr与预先设置值n_cnt3进行比较,若peak_tmr小于n_cnt3,输出delta_gain为预先设置增益delta_peak1,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s846,若peak_tmr大于等于n_cnt3,输出delta_gain为预先设置增益delta_peak2,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s846;若peak_cnt小于等于n_cnt2,跳到步骤s844;

步骤s844,将步骤s826中papr_tmr与预先设置值n_cnt4进行比较,若papr_tmr等于n_cnt4,输出delta_gain为预先设置增益delta_papr,同时,将papr_tmr清“0”,跳到步骤s846;若papr_tmr不等于n_cnt4,跳到步骤s845;

步骤s845,将步骤s83中filt_cnt、filt_mag与预先设置值n_filt-1、thr_rms_lo、thr_rms_hi进行比较,若filt_cnt大于n_filt-1并且filt_mag小于thr_rms_lo,输出delta_gain为预先设置值delta_filt1,跳到步骤s846;若filt_cnt大于n_filt-1并且filt_mag大于thr_rms_hi,输出delta_gain为预先设置值delta_filt2,跳到步骤s846;

步骤s846,通过步骤s841-s845的判决,完成增益变量delta_gain的计算过程;

步骤s85,更新增益,具体过程是:

步骤s851,若步骤s846中delta_gain为“0”,执行i=i 1,跳到步骤s81;若步骤s846中delta_gain不为“0”,更新第i点的增益gain_vectori_next=gain_vectori_last delta_gain,其中,gain_vectori_next代表第i个样点更新后增益,gain_vectori_last代表第i个样点更新前的增益,同时将gain_vectori_next限制在(gain_low,gain_high)区间内,若gain_vectori_next小于gain_low,gain_vectori_next等于gain_low,若gain_vectori_next大于gain_high,gain_vectori_next等于gain_high。

步骤s852,若步骤s851中gain_vectori_next不等于gain_vectori_last,用gain_vectori_next更新增益向量表中第i 1,i 2......size_in-1个元素,[gain_vectori 1_last、gain_vectori 2_last......gain_vectorsize_in-1_last]=[gain_vectori_next、gain_vectori_next......gain_vectori_next],同时更新t_update=i 1,跳到步骤s9;若步骤s851中gain_vectori_next等于gain_vectori_last,将delta_gain写“0”,执行i=i 1,若i大于t_freeze-1,跳到步骤s9,否则,跳到步骤s81;

步骤s9,判断收敛条件delta_gain等于0是否满足,如果不满足,跳转到步骤s2,否则,停止检测,输出最终的补偿增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last;

步骤s10,对a/d输出样点sample_in0、sample_in1......sample_insize_in-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积sample_outj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_insize_in-1样点后,输出自动增益调整后的信号sample_out0、sample_out1......sample_outsize_in-1;

步骤s11,查找最后一个增益变化位置t_dgain,具体过程是:将gain_vectorj_last作为检测增益,计算gain_vectorj_last与gain_vectorj-1_last的绝对值abs_gain,如果abs_gain大于预先设置值delta_ave,执行t_dgain=j;

步骤s12,遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。


技术特征:

1.一种基于联合检测的自动增益控制方法,其特征在于,包括:对a/d输出信号的强度大小进行包括饱和状态检测处理、峰值检测处理、峰均比检测处理、滤波运算、自动增益更新处理和辅助接收机符号定时检测处理的增益调整;其中,饱和检测处理、峰值检测处理、峰均比检测处理和滤波运算的结果输出到自动增益更新处理模块的输入端,经过增益更新处理后,输出最终需要补偿的增益值,对a/d输出信号进行增益调整;具体包括以下步骤:

步骤s1,初始检测数据长度t_freeze等于预先设置值n_freeze,检测起始位置t_update等于预先设置值n_update,a/d输出信号初始补偿增益gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last等于预设增益gain0;

步骤s2,比较t_updata与t_freeze,若t_updata小于t_freeze,对a/d输出样点sample_in0、sample_in1......sample_int_freeze-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积filt_fxpj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_int_freeze-1样点后,输出filt_fxp0、filt_fxp1......filt_fxpt_freeze-1;

步骤s3,将表征饱和状态检测标志sat_run、饱和定时器sat_tmr、饱和计数器sat_cnt置为0,将表征峰值检测标志peak_run、峰值定时器peak_tmr、峰值计数器peak_cnt置为0,将峰均比定时器papr_tmr、增益变量delta_gain、滤波器输出filt_mag置为0;

步骤s4,对样点filt_fxp0、filt_fxp1......filt_fxpt_update-1,分别进行:

将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

将绝对值samp_magi送入滤波运算输出filt_mag,其中滤波运算过程filt_mag=(filt_mag*(2^n-1))/2^n samp_magi,n为预先设置位宽,同时计算滤波计数器filt_cnt,如果前一次的filt_cnt小于预先设置值n_filt,filt_cnt=filt_cnt 1,否则,filt_cnt保持不变;

步骤s5,遍历完filt_fxp0、filt_fxp1......filt_fxpt_update-1样点后,输出filt_mag,同时将filt_cnt置为0;

步骤s6,对样点filt_fxpt_update、filt_fxpt_update 1......filt_fxpt_freeze-1执行状态联合检测;

步骤s7,判断收敛条件delta_gain等于0是否满足,如果不满足,跳转到步骤s2,否则,停止检测,输出最终的补偿增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last;

步骤s8,对a/d输出样点sample_in0、sample_in1......sample_insize_in-1分别进行增益补偿,具体过程是:将sample_inj作为待检测样点,计算sample_inj与f[gain_vectorj_last]的乘积sample_outj,其中f(x)=10^(x/20),遍历完sample_in0、sample_in1......sample_insize_in-1样点后,输出自动增益调整后的信号sample_out0、sample_out1......sample_outsize_in-1;

步骤s9,查找最后一个增益变化位置t_dgain,具体过程是:将gain_vectorj_last作为检测增益,计算gain_vectorj_last与gain_vectorj-1_last的绝对值abs_gain,如果abs_gain大于预先设置值delta_ave,执行t_dgain=j;

步骤s10,遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。

2.根据权利要求1所述的一种基于联合检测的自动增益控制方法,其特征在于,步骤s6具体包括:

步骤s61,将filt_fxpi作为检测样点,计算filt_fxpi的绝对值samp_magi;

步骤s62,饱和状态检测、峰值检测、峰均比检测,具体过程是s621-s626:

步骤s621,若步骤s61中绝对值samp_magi大于预设饱和门限thr_sat,将饱和标志sat_flag写“1”,否则,sat_flag写“0”;若步骤s61中绝对值samp_magi大于预设峰值门限thr_peak,将峰值标志peak_flag写“1”,否则,peak_flag写“0”;若步骤s61中绝对值samp_magi大于预设峰均比门限thr_papr,将峰均比标志papr_flag写“1”,否则,papr_flag写“0”;

步骤s622,若步骤s621中饱和标志sat_flag为“1”,将sat_run写“1”,同时sat_cnt=sat_cnt 1,sat_tmr=sat_tmr 1;若步骤s621中饱和标志sat_flag等于“0”,判断前一次检测的饱和计数器运行标志sat_run是否等于“1”,若成立,sat_tmr=sat_tmr 1;

步骤s623,若步骤s622中sat_tmr大于预先设置值n_sat_tmr并且步骤s622中饱和计数器sat_cnt小于预先设置值n_sat_cnt,将sat_run、sat_tmr、sat_cnt写“0”,否则,sat_run、sat_tmr、sat_cnt保持步骤s622的结果不变;

步骤s624,若步骤s621中峰值标志peak_flag为“1”,将peak_run写“1”,同时peak_cnt=peak_cnt 1,peak_tmr=peak_tmr 1;若步骤s621中峰值标志peak_flag等于“0”,判断前一次检测的峰值计数器运行标志peak_run是否等于“1”,若成立,peak_tmr=peak_tmr 1;

步骤s625,若步骤s624中峰值定时器peak_tmr大于预先设置值n_peak_tmr,将peak_run、peak_tmr、peak_cnt写“0”,否则,peak_run、peak_tmr、peak_cnt保持步骤s624的结果不变;

步骤s626,若步骤s621中峰均比标志papr_flag等于“1”,将峰均比定时器papr_tmr写“0”,否则,papr_tmr=papr_tmr 1;

步骤s63,参考步骤66,对步骤s61中绝对值samp_magi进行滤波运算,输出filt_mag,filt_cnt;

步骤s64,计算增益变量delta_gain值,具体过程是:

步骤s641,设置delta_gain为“0”;

步骤s642,将步骤s623中sat_cnt与预先设置值n_cnt1进行比较,若sat_cnt大于n_cnt1,输出delta_gain为预先设置增益delta_sat,同时,将sat_run、sat_tmr、sat_cnt清“0”,跳到步骤s646;若sat_cnt小于n_cnt1,跳到步骤s643;

步骤s643,将步骤s625中peak_cnt与预先设置值n_cnt2进行比较,若peak_cnt大于n_cnt2,将步骤s625中peak_tmr与预先设置值n_cnt3进行比较,若peak_tmr小于n_cnt3,输出delta_gain为预先设置增益delta_peak1,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s646,若peak_tmr大于等于n_cnt3,输出delta_gain为预先设置增益delta_peak2,同时,将peak_run、peak_tmr、peak_cnt清“0”,跳到步骤s646;若peak_cnt小于等于n_cnt2,跳到步骤s644;

步骤s644,将步骤s626中papr_tmr与预先设置值n_cnt4进行比较,若papr_tmr等于n_cnt4,输出delta_gain为预先设置增益delta_papr,同时,将papr_tmr清“0”,跳到步骤s646;若papr_tmr不等于n_cnt4,跳到步骤s645;

步骤s645,将步骤s63中filt_cnt、filt_mag与预先设置值n_filt-1、thr_rms_lo、thr_rms_hi进行比较,若filt_cnt大于n_filt-1并且filt_mag小于thr_rms_lo,输出delta_gain为预先设置值delta_filt1,跳到步骤s646;若filt_cnt大于n_filt-1并且filt_mag大于thr_rms_hi,输出delta_gain为预先设置值delta_filt2,跳到步骤s646;

步骤s646,通过步骤s641-s645的判决,完成增益变量delta_gain的计算过程;

步骤s65,更新增益,具体过程是:

步骤s651,若步骤s646中delta_gain为“0”,执行i=i 1,跳到步骤s61;若步骤s646中delta_gain不为“0”,更新第i点的增益gain_vectori_next=gain_vectori_last delta_gain,其中,gain_vectori_next代表第i个样点更新后增益,gain_vectori_last代表第i个样点更新前的增益,同时将gain_vectori_next限制在(gain_low,gain_high)区间内,若gain_vectori_next小于gain_low,gain_vectori_next等于gain_low,若gain_vectori_next大于gain_high,gain_vectori_next等于gain_high;

步骤s652,若步骤s651中gain_vectori_next不等于gain_vectori_last,用gain_vectori_next更新增益向量表中第i 1,i 2......size_in-1个元素,[gain_vectori 1_last、gain_vectori 2_last......gain_vectorsize_in-1_last]=[gain_vectori_next、gain_vectori_next......gain_vectori_next],同时更新t_update=i 1,跳到步骤s9;若步骤s651中gain_vectori_next等于gain_vectori_last,将delta_gain写“0”,执行i=i 1,若i大于t_freeze-1,跳到步骤s9,否则,跳到步骤s61。

3.根据权利要求2所述的一种基于联合检测的自动增益控制方法,其特征在于,步骤s621中预设饱和门限thr_sat大于预设峰值门限thr_peak。

4.根据权利要求2所述的一种基于联合检测的自动增益控制方法,其特征在于,步骤s621中预设峰值门限thr_peak大于预设峰均比门限thr_papr。

5.根据权利要求2所述的一种基于联合检测的自动增益控制方法,其特征在于,步骤s623中预设值n_sat_tmr大于预设值n_sat_cnt。

6.根据权利要求2所述的一种基于联合检测的自动增益控制方法,其特征在于,步骤s645中预设值thr_rms_hi大于预设值thr_rms_lo。

7.根据权利要求1所述的一种基于联合检测的自动增益控制方法,其特征在于,当执行到步骤s9时,若收敛条件delta_gain等于0成立,输出增益值gain_vector0_last、gain_vector1_last......gain_vectorsize_in-1_last。

8.根据权利要求1所述的一种基于联合检测的自动增益控制方法,其特征在于,步骤s12中遍历完增益gain_vector0_last、gain_vector1_last......gain_vectort_freeze-1_last后,输出最后一个增益变化的位置t_dgain,作为符号定时检测的起始位置。

技术总结
本发明公开了一种基于联合检测的自动增益控制方法,该检测方法通过饱和状态检测处理、峰值检测处理、峰均比检测处理和滤波运算处理相结合,快速稳定的输出接收机信号,算法收敛快、硬件实时性高度可控;更进一步,在饱和判断及计数中,通过饱和计数结合定时器同时工作,一方面确保当接收信号过饱和时能够以最快的速度对当前增益进行衰减,同时防止突发随机脉冲引起的虚假饱和检测,进而导致收敛时间过长;在峰值判断及计数过程中,采用阶梯式增益补偿,避免采用单一增益补偿引起的增益变量震荡问题。

技术研发人员:胡小菲;傅鑫;陈宁;周博
受保护的技术使用者:磐基技术有限公司
技术研发日:2020.01.16
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-22400.html

最新回复(0)