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