2017-04-05 179 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