完成(2,1,7)編碼方式 多項式為[133,171],也可以完成(2,1,5)編碼方式多項式[23,35]的verilog實現
對應**中的注釋的位置。
相應的解碼器也寫已寫完,後續。。。。。。。。。。。。。
相關的卷積編碼的基礎知識請參看
`timescale 1ns / 1ps //
// company:
// engineer:
// // create date: 2018/03/30 11:00:01
// design name:
// module name: convolutiongen_module_v2
// project name:
// target devices:
// tool versions:
// description:
// dependencies:
// // revision:
// revision 0.01 - file created
// additional comments:
// //
module convolutiongen_module_v2(
i_clk, i_rst,
i_din,i_dinen,
o_dout1, o_dout2,
o_douten
);input i_clk;
input i_rst;
input i_din;
input i_dinen;//輸入資料
output o_dout1;
output o_dout2;
output o_douten;
reg o_dout1 = 'b0;
reg o_dout2 = 'b0;
reg o_douten = 'b0;
localparam s_idle = 2'b01,
s_s1_gen = 2'b10;
reg [1:0] r_currentstate = s_idle;
reg r_i_din = 'b0, r_din = 'b0;
reg r_i_dinen = 'b0;// r_dinen = 'b0;
reg r_startflag = 'b0, r_endflag = 'b0;
reg r_dout1 = 'b0, r_dout2 = 'b0;
reg r_douten = 'b0;
//reg [3:0] r_shiftreg = 'b0;//(2.1.5)編碼方式的暫存器為4bit
reg [5:0] r_shiftreg = 'b0;//(2.1.7)
always @ ( posedge i_clk )
begin
if ( i_rst )
begin
r_currentstate <= s_idle;
end
else
begin
case ( r_currentstate )
s_idle:
begin
if ( r_startflag )
begin
r_currentstate <= s_s1_gen;
end
else
begin
r_currentstate <= s_idle;
end
ends_s1_gen:
begin
if ( r_endflag )
begin
r_currentstate <= s_idle;
end
else
begin
r_currentstate <= s_s1_gen;
end
end
default:
begin
r_currentstate <= s_idle;
end
endcase
end
end
always @ ( posedge i_clk )
begin
r_i_din <= i_din;
r_i_dinen <= i_dinen;//輸入資料
r_din <= r_i_din;
//r_dinen <= r_i_dinen;//輸入資料
if ( r_currentstate == s_idle )
begin
if ( ~r_i_dinen & i_dinen )
begin
r_startflag <= 1'b1;
end
else
begin
r_startflag <= r_startflag;
end
end
else
begin
r_startflag <= 1'b0;
end
if ( r_currentstate == s_s1_gen )
begin
if ( r_i_dinen & ~i_dinen )
begin
r_endflag <= 1'b1;
end
else
begin
r_endflag <= r_endflag;
end
end
else
begin
r_endflag <= 1'b0;
end
if ( r_currentstate == s_s1_gen )
begin
r_dout1 <= r_shiftreg[5]^r_shiftreg[4]^r_shiftreg[2]^r_shiftreg[1]^r_din;
r_dout2 <= r_shiftreg[5]^r_shiftreg[2]^r_shiftreg[1]^r_shiftreg[0]^r_din; //(2,1,7)
/* r_dout1 <= r_shiftreg[3]^r_shiftreg[2]^r_din;
r_dout2 <= r_shiftreg[3]^r_shiftreg[1]^r_shiftreg[0]^r_din; */ //(2,1,5)
end
else
begin
r_dout1 <= 1'b0;
r_dout2 <= 1'b0;
end
r_douten <= r_currentstate == s_s1_gen;
if ( r_currentstate == s_s1_gen )
begin
//r_shiftreg <= ;//(2,1,5)
r_shiftreg <= ;//(2,1,7)
end
else
begin
r_shiftreg <= 4'd0;
end
o_dout1 <= r_dout1;
o_dout2 <= r_dout2;
o_douten <= r_douten;
end
endmodule
Matlab的卷積編碼實現
最近在做乙個scfde波形的c和向量實現,指導老師給了幾份matlab 要我把對應的c語言和向量寫出來 並行運算指令操作 簡單的 一下就寫完了,有些寫的還是有點煩躁,特別是卷積編碼的解碼,今天我們先不談解碼,先談下編碼,這個還是寫的比較流暢的。卷積編碼器,聽著就不好理解,沒事,我來分析一波,首先我們...
CRC迴圈編碼的Verilog實現
迷茫了幾天,痛苦了幾天,今天終於把crc迴圈編碼的verilog 搞定了,也許是心情好轉的緣故吧,不管怎麼說,終究是做出來了,之前寫的 也沒找出是什麼原因,不管輸入什麼,編碼輸出總是同一碼元,鬱悶 今天重新寫了一遍,原理還是一樣,結果卻是意料之中的,不管了,以後有時間再找原因吧,現在把寫好的 分享一...
卷積自編碼
這篇教程是翻譯paolo galeone寫的卷積自編碼分析教程,作者已經授權翻譯,這是原文。卷積操作符會對輸入訊號進行濾波操作,以便提取其內容的一部分。在傳統的方法中,自編碼沒有考慮到訊號可以被看做是和其他訊號的和。相反,卷積自編碼就是使用卷積操作來做訊號的疊加之和。他們對一組簡單的輸入訊號進行編碼...