Matlab中的rng
Matlab中的rng
问题发现
在我的毕业设计中涉及到⽤rayleighchan产⽣两个不同的单径瑞利信道。⼀开始我是这样做的:
Channel_leg =rayleighchan(Ts/Lofdm,fd);
Channel_leg.StorePathGains =1;
Channel_leg.ResetBeforeFiltering =0;
reset(Channel_leg);
Channel_illeg =rayleighchan(Ts/Lofdm,fd);
Channel_illeg.StorePathGains =1;
Channel_illeg.ResetBeforeFiltering =0;
reset(Channel_illeg);
后来出结果的时候发⽣了⼀系列奇怪的问题。后来我观察这两个信道的信道响应发现,虽然是两个信道,但是他们的信道响应⾮常接近。WTF这和我⼀开始的初衷完全不同啊。于是问了师兄,原来在这个rayleighchan函数⾥⾯存在随机数的⽣成,必须要改变随机数⽣成器才可以使得两个信道特性不同。
MATLAB中的rng函数
rng:控制随机数⽣成
语法:
rng(seed)
rng(‘shuffle’)
rng(seed, generator)
rng(‘shuffle’, generator)
rng(‘default’)
scurr = rng
rng(s)
matlab生成随机数sprev = rng(…)
说明:
要将 rng 函数(⽽⾮ rand 或 randn)与 ‘seed’、‘state’ 或 ‘twister’ 输⼊结合使⽤。
rng(seed) 使⽤⾮负整数 seed 为随机数⽣成函数提供种⼦,以使 rand、randi 和 randn ⽣成可预测的数字序列。
rng(‘shuffle’) 根据当前时间为随机数⽣成函数提供种⼦。这样,rand、randi 和 randn 会在您每次调⽤ rng 时⽣成不同的数字序列。
rng(seed, generator) 和 rng(‘shuffle’, generator) 另外指定 rand、randi 和 randn 使⽤的随机数⽣成函数的类型。generator 输⼊为以下项之⼀:
‘twister’:Mersenne Twister
‘simdTwister’:⾯向 SIMD 的快速 Mersenne Twister 算法
‘combRecursive’:合并的多个递归
‘multFibonacci’:乘法滞后 Fibonacci
‘v5uniform’:传统 MATLAB® 5.0 均匀⽣成函数
‘v5normal’:传统 MATLAB 5.0 正常⽣成函数
‘v4’:传统 MATLAB 4.0 ⽣成函数
rng(‘default’) 将 rand、randi 和 randn 使⽤的随机数⽣成函数的设置重置为其默认值。这样,会⽣成相同的随机数,就好像您重新启动了 MATLAB。默认设置是种⼦为 0 的 Mersenne Twister。
scurr = rng 返回 rand、randi 和 randn 使⽤的随机数⽣成函数的当前设置。这些设置将在包含字段 ‘Type’、‘Seed’ 和‘State’ 的结构体 scurr 中返回。
rng(s) 将 rand、randi 和 randn 使⽤的随机数⽣成函数的设置还原回之前⽤ s = rng 等命令捕获的值。
sprev = rng(…) 返回 rand、randi 和 randn 使⽤的随机数⽣成函数的以前设置,然后更改这些设置。
⽰例:
s = rng;
调⽤ rand 以⽣成随机值向量:
x = rand(1,5)
x =
0.8147 0.9058 0.1270 0.9134 0.6324
通过调⽤ rng 还原原始⽣成函数设置。⽣成⼀组新的随机值并验证 x 和 y 是否相等:
rng(s);
y = rand(1,5)
y =
0.8147 0.9058 0.1270 0.9134 0.6324

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。