师兄毕设--双滑动窗能量检测算法实现突发信号检测
Posted 者乎之类的
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了师兄毕设--双滑动窗能量检测算法实现突发信号检测相关的知识,希望对你有一定的参考价值。
通过双滑动窗法检测接收信号中的突发报文段,其中两个相邻的窗口在相对于接收信号滑动的过程中是相对静止的,当两个窗都处于噪声段或者都处于信号加噪声段时,前后两个窗内的能量比值Sn相对平坦。当信号加噪声开始滑入前窗W1时,W1中的能量一直增加,而W2仍处于噪声段,此时Sn的值逐渐上升,直到突发信号的开始部分都包含在W1中而信号加噪声段即将进入W2时,两个窗内的能量比值Sn到达一个峰值。继续接收信号时,信号加噪声段也开始滑入W2,Sn逐渐开始下降,直到W2也全部处于信号加噪声段时恢复平坦。因此,在双窗滑动的过程中,能量比值Sn会呈现一个三角波形,峰值位置为噪声与信号的交界位置,即为突发信号的起始位置。根据两个滑动窗内的信号能量比值超过判决门限Th的位置来得到突发报文的起始端和结束端的位置,提取出突发报文。
matlab程序
for i=1:len-2*L
window1_energy(i)=sum(input_energy(i:i+L-1));
window2_energy(i)=sum(input_energy(i+L:i+2*L-1));
energy_r1(i)=window2_energy(i)/window1_energy(i);
energy_r2(i)=window1_energy(i)/window2_energy(i);
end
verilog代码
由于FPGA中为时序信息,所以不能像matlab中一样有一个累加过程(如果,把信号进行延迟1位,2位,3位…然后累加将消耗太多资源。因此可以
begin
window_A<=window_A+energy_IQ-energy_IQ_delay48;
window_B<=window_B+energy_IQ_delay48-energy_IQ_delay4848;
end
品,细品。
//为了避免结束端少几个符号
reg msg_end_flag_pre;//当结束端的峰值第一次到达阈值时置高位
always@(posedge clk)
begin
if(!rst)
begin
msg_end_flag_pre<=1'd0;
end
else if(peake_k>=valid_gate&&msg_valid_flag==1'b1)
begin
msg_end_flag_pre<=1'd1;
end
else if(msg_valid_flag==1'b0)
begin
msg_end_flag_pre<=1'd0;
end
end
always@(posedge clk)
begin
if(!rst)
begin
msg_valid_flag<=1'd0;
end
else if(peaks_k>=valid_gate)
begin
msg_valid_flag<=1'd1;
end
else if(peake_k<valid_gate&&msg_end_flag_pre==1'b1)
begin
msg_valid_flag<=1'd0;
end
end
以上是关于师兄毕设--双滑动窗能量检测算法实现突发信号检测的主要内容,如果未能解决你的问题,请参考以下文章
FPGA教程案例52语音案例1——基于能量检测的语音信号端点检测FPGA实现