通信中大家普遍编号编码序列探测仪用以检验通信帧的同歩帧头,因此保证同歩的目的。编码序列检验就是对于不断输入的二进制数据信息流分析中查验出独特编码序列的二进制数据流分析。
比如在10101100100101中检验110010。这类一般采用移位寄存器来进行,可以独立网页搜索:移位寄存器进行编码序列检验。
关键字:滑动窗口法;verilog;FPGA;均值滤波
却不知道这篇博闻强记想传播的逻辑思维是:大伙儿能不能马上移动检验抽样后的数据流分析呢? 比如抽样8bit din:8‘d55,8’d111,8’d40,8’d122,8’d100,8’d30,8’d120,大伙儿想检验出8’d111,8’d40,8’d122,8’d100。
那般做会对数据进行均值滤波,这类意识还可以用来做扩频通信接纳中的匹配滤波捕获,原文中就拿均值滤波来举个案例吧。
假设我们要在抽样到的数据流分析进行均值滤波,数据流分析输入为12bit,一帧有6五个数据信息,提示框规格为5,对导进数据信息采用1/4均值。
编号下列:
module data_capture ( input clk,rstn, input in_vld, input[11:0] din, output reg out_vld, output reg[31:0] dout ); parameter AVE_DATA_NUM = 3'd5; /////////////////////Shift register/////////////////////////// reg [11:0] data_reg [AVE_DATA_NUM-1:0]; reg [3:0]temp_i; always @ (posedge clk) begin if(rstn || !in_vld) for (temp_i=0; temp_i<AVE_DATA_NUM; temp_i=temp_i 1) data_reg[temp_i] <= 'd0; else begin data_reg[0] <= din; for (temp_i=0; temp_i<AVE_DATA_NUM-1; temp_i=temp_i 1) data_reg[temp_i 1] <= data_reg[temp_i]; end end /////////////////////sum////////////////////////////// reg [31:0] sum; always @ (posedge clk ) begin if (rstn || !in_vld) sum <= 'd0; else sum <= sum din - data_reg[AVE_DATA_NUM-1]; //Replace the oldest data with the latest input data end ////////////////////cnt//////////////////////////// reg[8:0] cnt; always @(posedge clk) begin if (rstn || !in_vld) cnt <= 'd0; else if(cnt == 9'd64) cnt <= 0; else cnt <= cnt 1'b1; end ///////////////////dout//////////////////////////// always @(posedge clk) begin if (rstn || !in_vld) begin dout <= 11'd0; out_vld <= 1'd0; end else if(cnt > 9'd4) begin out_vld <= 1'b1; dout <= sum>>2; //sum/4。 end else begin out_vld <= 1'b0; dout <= 0; end end endmodule
一帧64个12bit,因为提示框规格为5,仅有当第5个数据信息来临时性才慢慢取均值,此外拉涨out_vld。
testbeach下列:
`timescale 1ns/1ns module capture_tb(); reg clk,rstn; reg in_vld; reg[11:0] din; wire out_vld; wire[31:0] dout; Initial begin clk = 1; rstn = 1; in_vld = 0; #200 rstn = 0; in_vld = 1; #10000 $stop(); end always #10 clk = ~clk; always #20 din = {$random}%100; data_capture tb( .clk(clk),.rstn(rstn), .in_vld(in_vld), .din(din), .out_vld(out_vld), .dout(dout) ); endmodule
仿真模拟图下列所表明:
第一个dout为in_vld拉涨之后的29,18,97,29,12的1/4均值;
第二个dout为in_vld拉涨后第二个clk慢慢抽样得到的数据信息18,97,29,12,89的均值,刚到的89把最开始的29给顶离开。
事实上计算有一些是有小数的,但是FPGA就这样,小数都想下求整了。
下载必看:
1、神器源码网,仅供学习参考,不保证可用性。
2、如果资源涉及你的合法权益,第一时间删除。
3、联系方式:haoziu@163.com
1、神器源码网,仅供学习参考,不保证可用性。
2、如果资源涉及你的合法权益,第一时间删除。
3、联系方式:haoziu@163.com