日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

高斯白噪声的Verilog实现

發(fā)布時間:2025/7/25 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高斯白噪声的Verilog实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??????本文章主要討論高斯白噪聲的FPGA實現(xiàn)。簡單的方法可以采用在Matlab中產(chǎn)生服從一定均值和方差的I、Q兩路噪聲信號。然后將兩組數(shù)據(jù)存在FPGA中進行回放,以此來產(chǎn)生高斯白噪聲。這種方法優(yōu)點是產(chǎn)生方法簡單占用FPGA資源少,但是他只能保證在回放噪聲的一段數(shù)據(jù)是滿足不相關(guān)特性的,段與段之間的數(shù)據(jù)是相關(guān)的。為了使整個過程中的噪聲都滿足不相關(guān)特性,可以通過LSFR序列的交錯異或,得到均勻分布的偽隨機信號,采用在一個ROM中存儲sin函數(shù)值另一個ROM中存儲log函數(shù)值。通過產(chǎn)生隨機讀地址的方式隨機讀取兩個ROM中的數(shù)據(jù),將兩組隨機的函數(shù)值相乘得到高斯白噪聲。模塊功能框圖如下圖。

??????chipscope調(diào)試結(jié)果:

?

//
//子模塊1
module
rand_gen(input wire clk100,input wire rst, output reg [10:0] orbit_sin_addr, //rand number for sin ROM addr, [10:]output reg [9:0] orbit_log_addr //rand number for log ROM addr, [9:0] ); wire resetup; // asynchronous clear, high active wire [10:0] orbit_1; wire [10:0] orbit_2; wire [9:0] orbit_3; wire [9:0] orbit_4; parameter initval_1=24'b010110010010110111110001,initval_2=24'b100000111100010111010001,initval_3=24'b001101000001010010010001,initval_4=24'b111010100110010011110001; // 交錯異或子模塊 inter_feedback_rand_1 inter_feedback_rand_1_inst (.orbit(orbit_1), //[10:0] .clk(clk100), .resetup(resetup), .initval(initval_1) //[23:0] );
// inter_feedback_rand_2 inter_feedback_rand_2_inst (.orbit(orbit_2),
//[10:0] .clk(clk100), .resetup(resetup), .initval(initval_2) //[23:0] );
// inter_feedback_rand_3 inter_feedback_rand_3_inst (.orbit(orbit_3),
//[9:0] .clk(clk100), .resetup(resetup), .initval(initval_3) //[23:0] );
// inter_feedback_rand_4 inter_feedback_rand_4_inst (.orbit(orbit_4),
//[9:0] .clk(clk100), .resetup(resetup), .initval(initval_4) //[23:0] ); // // orbit_sin_addr [10:0] // // always @ (posedge clk100 or posedge rst) beginif(rst) beginorbit_sin_addr <= 11'b0;endelse orbit_sin_addr <= orbit_1 ^ orbit_2;end // // orbit_log_addr [9:0 ] // // always @ (posedge clk100 or posedge rst) beginif(rst) beginorbit_log_addr <= 10'b0;endelse orbit_log_addr <= orbit_3 ^ orbit_4;end // // resetup // // reg resetup_r = 1'b0; assign resetup = resetup_r; always @ (posedge clk100 or posedge rst) beginif(rst)resetup_r <= 1'd1;elseresetup_r <= 1'd0;end endmodule //
//子模塊2 module noise_gen(input wire clk100,input wire rst,input wire noise_en,input wire [10:0] orbit_sin_addr,input wire [9:0] orbit_log_addr,output wire [15:0] noise_out ); wire [7:0] sin_data; wire [7:0] log_data; // 正弦、對數(shù)、乘法IP核 Sin Sin_inst ( .clka(clk100), // input clka.ena(noise_en), // input ena.addra(orbit_sin_addr), // input [10 : 0] addra.douta(sin_data) // output [7 : 0] douta ); Log Log_inst ( .clka(clk100), // input clka.ena(noise_en), // input ena.addra(orbit_log_addr), // input [9 : 0] addra.douta(log_data) // output [7 : 0] douta ); Mult_signed Mult_signed_inst (.clk(clk100), // input clk.a(sin_data), // input [7 : 0] a.b(log_data), // input [7 : 0] b.ce(noise_en), // input ce.sclr(rst), // input sclr.p(noise_out) // output [15 : 0] p ); endmodule
//
//頂層模塊(部分)

?rand_gen rand_gen_inst_1 (
??.clk100(clk100),
??.rst(rst),
??.orbit_sin_addr(orbit_sin_addr_1),??
??.orbit_log_addr(orbit_log_addr_1)???
??);

?noise_gen noise_gen_inst_1 (
??.clk100(clk100),
??.rst(rst),
??.noise_en(noise_en),
??.orbit_sin_addr(orbit_sin_addr_1),
??.orbit_log_addr(orbit_log_addr_1),
??.noise_out(noise_out_1)
??);?
/feedback1 `define FEXPR sr_a[23]^(sr_a[22]^(sr_a[17]^sr_a[0])) module inter_feedback_rand_1(output wire [10:0] orbit,input wire clk,input wire resetup, //置數(shù),高電平有效input wire [23:0] initval); reg[23:0] sr_a; assign orbit[10:0]=sr_a[10:0]; always@(posedge clk or posedge resetup) beginif(resetup)sr_a<=initval;elsebeginsr_a[22:0]<=sr_a[23:1];sr_a[23]<=`FEXPR;end end endmodule `undef FEXPR /feedback2 `define FEXPR sr_a[23]^(sr_a[22]^(sr_a[7]^sr_a[0])) module inter_feedback_rand_2( output wire [10:0] orbit,input wire clk,input wire resetup, //置數(shù),高電平有效input wire [23:0] initval); reg[23:0] sr_a; assign orbit[10]=sr_a[0],orbit[9]=sr_a[1],orbit[8]=sr_a[2],orbit[7]=sr_a[3],orbit[6]=sr_a[4],orbit[5]=sr_a[5],orbit[4]=sr_a[6],orbit[3]=sr_a[7],orbit[2]=sr_a[8],orbit[1]=sr_a[9],orbit[0]=sr_a[10]; always@(posedge clk or posedge resetup) beginif(resetup)sr_a<=initval;elsebeginsr_a[22:0]<=sr_a[23:1];sr_a[23]<=`FEXPR;end end endmodule `undef FEXPR /feedback3 `define FEXPR sr_a[23]^(sr_a[21]^(sr_a[20]^sr_a[0])) module inter_feedback_rand_3(output wire [9:0] orbit,input wire clk,input wire resetup, //置數(shù),高電平有效input wire [23:0] initval ); reg[23:0] sr_a; assign orbit=sr_a[9:0]; always@(posedge clk or posedge resetup) beginif(resetup)sr_a<=initval;elsebeginsr_a[22:0]<=sr_a[23:1];sr_a[23]<=`FEXPR;end end endmodule `undef FEXPR /feedback4 `define FEXPR sr_a[23]^(sr_a[21]^(sr_a[11]^sr_a[0])) module inter_feedback_rand_4(output wire [9:0] orbit,input wire clk,input wire resetup, //置數(shù),高電平有效input wire [23:0] initval ); reg[23:0] sr_a; assign orbit[9]=sr_a[0],orbit[8]=sr_a[1],orbit[7]=sr_a[2],orbit[6]=sr_a[3],orbit[5]=sr_a[4],orbit[4]=sr_a[5],orbit[3]=sr_a[6],orbit[2]=sr_a[7],orbit[1]=sr_a[8],orbit[0]=sr_a[9]; always@(posedge clk or posedge resetup) beginif(resetup)sr_a<=initval;elsebeginsr_a[22:0]<=sr_a[23:1];sr_a[23]<=`FEXPR;end end endmodule `undef FEXPR

?轉(zhuǎn)載請聲明出處,謝謝。


?

?

轉(zhuǎn)載于:https://www.cnblogs.com/yinknight/p/6972837.html

總結(jié)

以上是生活随笔為你收集整理的高斯白噪声的Verilog实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。