Matlab中的rng

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)
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

你可能感兴趣的:(无线通信)