2017-04-05 175 views
0

我已经挣扎了一段时间了,我找不到一个简单而有用的解决方案。Verilog中带有噪声+1,-1的三角信号

我想在尺寸以模拟的三角波信号的16位

signal

和随机噪声与值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 

我真的很感谢你的帮忙! 谢谢。

+0

可能重复[如何获得粗糙的随机信号在verilog不好?](http://stackoverflow.com/questions/43197205/how-to-get-the-a-coarse-随机信号在verilog不罚款) –

+0

我认为你的问题是如何产生一个只有+1,0和-1值的随机序列?你想要什么类型的发行? – Morgan

+0

我想要一个三角形波形,从0到65,534,然后再回到零,它是继续。每个值重复4次。当此表被成功做我想要的噪声加到这个值,因为我在我的问题给了例子: 原始信号:11111 22222 33333 44444 55555 ...... 降噪信号:12321 12332 23434 34345 45665 ...... 我想为这种模拟生成这种噪声信号 – surfer113

回答

0

我得到了我想要的信号,但肯定也存在着无法实现的信号。我简化了一下。

always #10  
    begin 
    SIGNAL_noise_reg <= SIGNAL_noise_i; 
    RANDOM_noise_i = $signed($urandom_range(0,2))-1; 

    if ((SIGNAL_i<16'd30766) && (SIGNAL_ii<SIGNAL_i)) //32765 
    begin 

     if(COUNT_end==COUNT-1) 
     begin 
     assign SIGNAL_noise_i=SIGNAL_i-1; 
     SIGNAL_i=SIGNAL_i + 1; 
     SIGNAL_ii=SIGNAL_ii + 1; 
     COUNT_end=0; 
     end 

     else if (COUNT_end == 0) 
     begin 
     assign SIGNAL_noise_i=SIGNAL_i -1; 
     COUNT_end= COUNT_end + 1; 
     end 

     else 
     begin 
     if (SIGNAL_i + RANDOM_noise_i - SIGNAL_noise_i > 1) 
     begin 
      assign SIGNAL_noise_i=SIGNAL_i; 
      COUNT_end= COUNT_end + 1; 
     end 
     else 
     begin  
      assign SIGNAL_noise_i=SIGNAL_i + RANDOM_noise_i; 
      COUNT_end= COUNT_end + 1; 
     end 
     end 
    end 

    else if (SIGNAL_i == 0) 
    begin 
     SIGNAL_i = 1; 
     SIGNAL_ii = 0; 
     SIGNAL_noise_i = SIGNAL_i + RANDOM_noise_i; 
    end 

    else  
    begin 

    if(COUNT_end==COUNT-1) 
    begin 
     assign SIGNAL_noise_i=SIGNAL_i+1; 
     SIGNAL_i=SIGNAL_i - 1; 
     SIGNAL_ii=SIGNAL_ii + 1; 
     COUNT_end=0; 
    end 

    else if (COUNT_end == COUNT-2) 
    begin 
     assign SIGNAL_noise_i=SIGNAL_i; 
     COUNT_end= COUNT_end + 1; 
    end 

    else 
    begin 
     if (SIGNAL_i + RANDOM_noise_i - SIGNAL_noise_i > 1) 
     begin 
     assign SIGNAL_noise_i=SIGNAL_i; 
     COUNT_end= COUNT_end + 1; 
     end 
     else 
     begin  
     assign SIGNAL_noise_i=SIGNAL_i + RANDOM_noise_i; 
     COUNT_end= COUNT_end + 1; 
     end 
    end 
    end 
    end