在Verilog中具有噪声+1,-1的三角信号

时间:2017-04-05 08:23:19

标签: verilog fpga system-verilog hdl

我已经挣扎了一段时间,我找不到一个简单实用的解决方案。

我想模拟大小为16位的三角形信号

signal

并为其添加值为1,0,-1的随机噪声。重要的是,带噪声的信号与原始噪声和噪声信号中的先前值之间的差异不得超过1。 例如,我希望这样的价值观:

原始信号:11111 22222 33333 44444 55555 ...

NOISED SIGNAL:12321 12332 23434 34345 45665 ...

我模拟了0到30766之间的值的信号,因为现在的主要焦点是为这个原始信号添加噪声。此代码正常工作,因为我删除了限制最大值1之间差异的条件。

此信号用于测试台。

cat file.txt | ./executable

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

1 个答案:

答案 0 :(得分: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