0
我已经挣扎了一段时间了,我找不到一个简单而有用的解决方案。Verilog中带有噪声+1,-1的三角信号
我想在尺寸以模拟的三角波信号的16位
和随机噪声与值1,0添加到它,-1。具有噪声的信号从原始噪声和噪声信号的先前值决不会相差1以上是很重要的。 例如,我想值那样:
原始信号:11111 22222 33333 44444 55555 ......
降噪信号:12321 12332 23434 34345 45665 ......
我模拟信号值介于0和30766之间,因为主要焦点现在将噪声添加到此原始信号。此代码正常工作,因为我删除了限制最大值1之间的差值的条件。
此信号用于测试台。
reg [15:0] SIGNAL_i;
reg [15:0] SIGNAL_ii;
reg [15:0] SIGNAL_noise_i;
reg [15:0] SIGNAL_noise_reg; //za hranjenje zasumljenega signala
int RANDOM_noise_i;
int COUNT_end;
int COUNT;
initial SIGNAL_i=1;
initial COUNT_end=0;
initial COUNT=3'd4;
initial SIGNAL_ii=0;
initial SIGNAL_noise_i=1;
initial SIGNAL_noise_reg=0;
initial RANDOM_noise_i=1;
initial CLK = 1;
always #5 CLK = ~CLK;
always #10
begin
SIGNAL_noise_reg <= SIGNAL_noise_i;
RANDOM_noise_i = $signed($urandom_range(0,2))-1; //random noise generation
//upcount
if ((SIGNAL_i<16'd30766) && (SIGNAL_ii<SIGNAL_i)) //32765
begin
begin
if (COUNT_end==COUNT)
begin
assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i);
SIGNAL_i=SIGNAL_i + 1;
SIGNAL_ii=SIGNAL_ii + 1;
COUNT_end=0;
COUNT_end=0;
end
else
begin
assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i);
COUNT_end= COUNT_end + 1;
end
end
end
//counter on zero
else if (SIGNAL_i == 0)
begin
SIGNAL_i = 1;
SIGNAL_ii = 0;
SIGNAL_noise_i = SIGNAL_i + RANDOM_noise_i;
end
//down count
else
begin
if (COUNT_end==COUNT)
begin
assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i);
SIGNAL_i=SIGNAL_i - 1;
SIGNAL_ii=SIGNAL_ii + 1;
COUNT_end=0;
COUNT_end=0;
end
else
begin
assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i);
COUNT_end= COUNT_end + 1;
end
end
end
end
我真的很感谢你的帮忙! 谢谢。
可能重复[如何获得粗糙的随机信号在verilog不好?](http://stackoverflow.com/questions/43197205/how-to-get-the-a-coarse-随机信号在verilog不罚款) –
我认为你的问题是如何产生一个只有+1,0和-1值的随机序列?你想要什么类型的发行? – Morgan
我想要一个三角形波形,从0到65,534,然后再回到零,它是继续。每个值重复4次。当此表被成功做我想要的噪声加到这个值,因为我在我的问题给了例子: 原始信号:11111 22222 33333 44444 55555 ...... 降噪信号:12321 12332 23434 34345 45665 ...... 我想为这种模拟生成这种噪声信号 – surfer113