精华内容
下载资源
问答
  • Matlab中产生白噪声的命令,wgn和awgn (转),非原创,只是为了学习,分享而已。
  • MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。WGN:产生高斯白噪声y = wgn(m,n,p) 产生一个m行n列的高斯白噪声...

    MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。

    WGN:产生高斯白噪声

    y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度。

    y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。

    y = wgn(m,n,p,imp,state) 重置RANDN的状态。

    在数值变量后还可附加一些标志性参数:

    y = wgn(…,POWERTYPE) 指定p的单位。POWERTYPE可以是’dBW’, ‘dBm’或’linear’。线性强度(linear power)以瓦特(Watt)为单位。

    y = wgn(…,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE可以是’real’或’complex’。

    AWGN:在某一信号中加入高斯白噪声

    y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。

    y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为’measured’,则函数将在加入噪声之前测定信号强度。

    y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的状态。

    y = awgn(…,POWERTYPE)指定SNR和SIGPOWER的单位。POWERTYPE可以是’dB’或’linear’。如果POWERTYPE是’dB’,那么SNR以dB为单位,而SIGPOWER以dBW为单位。如果POWERTYPE是’linear’,那么SNR作为比值来度量,而SIGPOWER以瓦特为单位。

    注释

    分贝(decibel,dB):分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个能量之间的差别的一种表示单位,它不是一个绝对单位。例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比取对数,再乘以20作为电平的分贝数(功率的电平值改乘10)。

    分贝瓦(dBW, dB Watt):指以1W的输出功率为基准时,用分贝来测量的功率放大器的功率值。

    dBm (dB-milliWatt):即与1milliWatt(毫瓦)作比较得出的数字。

    0 dBm = 1 mW

    10 dBm = 10 mW

    20 dBm = 100 mW

    也可直接用randn函数产生高斯分布序列,例如:

    程序代码

    y=randn(1,2500);

    y=y/std(y);

    y=y-mean(y);

    a=0.0128;

    b=sqrt(0.9596);

    y=a+b*y;

    就得到了 N ( 0.0128, 0.9596 ) 的高斯分布序列

    产生指定方差和均值的随机数

    设某个随机变量x均值为mu,方差为var^2,若要产生同样分布的随机变量y,但使新的随

    机变量参数改变,均值为mu_1,方差为var_1^2,可以用如下公式进行变换:

    y=var_1/var*(x-mu)+mu_1,其中x为随机变量,其余为常数(原分布参数)。

    具体到正态分布,若要产生均值为u,方差为o^2的MN的随机数矩阵,可以用

    y=orandn(M,N)+u得到。

    对于均匀分布,若要产生[a,b]区间的均匀分布的MN的随机数矩阵,则可以用

    y=rand(M,N)(b-a)+a得到。

    %===========================================================%

    上述资料基本上完整地描述了原始问题,不过有几点内容附带说明一下:

    首先更正一个错误,我认为在“生成N ( 0.0128, 0.9596 ) 的高斯分布序列”的程序中,应该改为以下的代码:

    程序代码

    y=randn(1,2500);

    y=y-mean(y);

    y=y/std(y);

    a=0.0128;

    b=sqrt(0.9596);

    y=a+b*y;

    2. 上面资料最后部分隐含了一个出自zhyuer 版友的结论:

    %zhyuer=========%

    rand产生的是[0,1]上的均匀分布的随机序列

    randn产生均值为0,方差为1的高斯随机序列,也就是白噪声序列;

    %===================================================================%

    也就是说,可以直接使用上面两个函数对原始信号添加噪声(例如y=x+rand(length(x),1)或者y=x+randn(length(x),1))

    3.事实上,无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即,wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。下面就我熟悉的“向已知信号添加某个信噪比(SNR)的高斯白噪声”来说明一下,不过如果大家阅读过awgn的实现代码就不用看下去了,呵呵。从上述可知,这个任务可以使用awgn函数实现,具体命令是:awgn(x,snr,’measured’,'linear’),命令的作用是对原信号f(x)添加信噪比(比值)为SNR的噪声,在添加之前先估计信号f的强度。这里涉及三个问题:在awgn这个函数中,SNR是如何计算的?什么是信号的强度?awgn函数具体是如何添加噪声的?事实上,前两个问题是相关的,因为根据定义,SNR就是信号的强度除以噪声的强度,所以,首先来讲讲信号的强度。其实信号的强度指的就是信号的能量,在连续的情形就是对f(x)平方后求积分,而在离散的情形自然是求和代替积分了。在matlab中也是这样实现的,只不过多了一个规范化步骤罢了:

    sigPower = sum(abs(sig(?).^2)/length(sig(?)

    这就是信号的强度。至此,SNR的具体实现也不用多说了(注:由于采用的是比值而非db,所以与下面“计算信噪比”所使用的方式不同,即没有求对数步骤)。

    最后说说awgn函数具体是如何添加噪声的。事实上也很简单,在求出f的强度后,结合指定的信噪比,就可以求出需要添加的噪声的强度noisePower=sigPower/SNR。由于使用的是高斯白噪声即randn函数,而randn的结果是一个强度为1的随机序列(自己试试sum(randn(1000,1).^2)/1000就知道了,注意信号的长度不能太小)。于是,所要添加的噪声信号显然就是:sqrt(noisePower)*randn(n,1),其中n为信号长度。

    展开全文
  • MATLAB中白噪声的WGN和AWGN函数的使用说明 MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。 WGN:产生高斯白...

    MATLAB中白噪声的WGN和AWGN函数的使用说明


    MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。

    1. WGN:产生高斯白噪声
      y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度。
      y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。
      y = wgn(m,n,p,imp,state) 重置RANDN的状态。
      在数值变量后还可附加一些标志性参数:
      y = wgn(…,POWERTYPE) 指定p的单位。POWERTYPE可以是’dBW’, ‘dBm’或’linear’。线性强度(linear power)以瓦特(Watt)为单位。
      y = wgn(…,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE可以是’real’或’complex’。
    2. AWGN:在某一信号中加入高斯白噪声
      y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。
      y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为’measured’,则函数将在加入噪声之前测定信号强度。
      y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的状态。
      y = awgn(…,POWERTYPE)指定SNR和SIGPOWER的单位。POWERTYPE可以是’dB’或’linear’。如果POWERTYPE是’dB’,那么SNR以dB为单位,而SIGPOWER以dBW为单位。如果POWERTYPE是’linear’,那么SNR作为比值来度量,而SIGPOWER以瓦特为单位。
      注释
    3. 分贝(decibel,dB):分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个能量之间的差别的一种表示单位,它不是一个绝对单位。例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比取对数,再乘以20作为电平的分贝数(功率的电平值改乘10)。
    4. 分贝瓦(dBW, dB Watt):指以1W的输出功率为基准时,用分贝来测量的功率放大器的功率值。
    5. dBm (dB-milliWatt):即与1milliWatt(毫瓦)作比较得出的数字。
      0 dBm = 1 mW
      10 dBm = 10 mW
      20 dBm = 100 mW
      也可直接用randn函数产生高斯分布序列,例如:

    程序代码
    y=randn(1,2500);
    y=y/std(y);
    y=y-mean(y);
    a=0.0128;
    b=sqrt(0.9596);
    y=a+b*y;

    就得到了 N ( 0.0128, 0.9596 ) 的高斯分布序列
    产生指定方差和均值的随机数
    设某个随机变量x均值为mu,方差为var^2,若要产生同样分布的随机变量y,但使新的随
    机变量参数改变,均值为mu_1,方差为var_1^2,可以用如下公式进行变换:
    y=var_1/var*(x-mu)+mu_1,其中x为随机变量,其余为常数(原分布参数)。
    具体到正态分布,若要产生均值为u,方差为o^2的MN的随机数矩阵,可以用
    y=o
    randn(M,N)+u得到。
    对于均匀分布,若要产生[a,b]区间的均匀分布的MN的随机数矩阵,则可以用
    y=rand(M,N)
    (b-a)+a得到。
    %===========================================================%
    上述资料基本上完整地描述了原始问题,不过有几点内容附带说明一下:

    1. 首先更正一个错误,我认为在“生成N ( 0.0128, 0.9596 ) 的高斯分布序列”的程序中,应该改为以下的代码:

    程序代码
    y=randn(1,2500);
    y=y-mean(y);
    y=y/std(y);
    a=0.0128;
    b=sqrt(0.9596);
    y=a+b*y;
    2. 上面资料最后部分隐含了一个出自zhyuer 版友的结论:
    %zhyuer=========%

    1.     rand产生的是[0,1]上的均匀分布的随机序列
      
    2.     randn产生均值为0,方差为1的高斯随机序列,也就是白噪声序列;
      

    %===================================================================%
    也就是说,可以直接使用上面两个函数对原始信号添加噪声(例如y=x+rand(length(x),1)或者y=x+randn(length(x),1))
    3.事实上,无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即,wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。下面就我熟悉的“向已知信号添加某个信噪比(SNR)的高斯白噪声”来说明一下,不过如果大家阅读过awgn的实现代码就不用看下去了,呵呵。从上述可知,这个任务可以使用awgn函数实现,具体命令是:awgn(x,snr,’measured’,'linear’),命令的作用是对原信号f(x)添加信噪比(比值)为SNR的噪声,在添加之前先估计信号f的强度。这里涉及三个问题:在awgn这个函数中,SNR是如何计算的?什么是信号的强度?awgn函数具体是如何添加噪声的?事实上,前两个问题是相关的,因为根据定义,SNR就是信号的强度除以噪声的强度,所以,首先来讲讲信号的强度。其实信号的强度指的就是信号的能量,在连续的情形就是对f(x)平方后求积分,而在离散的情形自然是求和代替积分了。在matlab中也是这样实现的,只不过多了一个规范化步骤罢了:
    sigPower = sum(abs(sig( : )).^2)/length(sig( : ))
    这就是信号的强度。至此,SNR的具体实现也不用多说了(注:由于采用的是比值而非db,所以与下面“计算信噪比”所使用的方式不同,即没有求对数步骤)。
    最后说说awgn函数具体是如何添加噪声的。事实上也很简单,在求出f的强度后,结合指定的信噪比,就可以求出需要添加的噪声的强度noisePower=sigPower/SNR。由于使用的是高斯白噪声即randn函数,而randn的结果是一个强度为1的随机序列(自己试试sum(randn(1000,1).^2)/1000就知道了,注意信号的长度不能太小)。于是,所要添加的噪声信号显然就是:sqrt(noisePower)*randn(n,1),其中n为信号长度。

    展开全文
  • 将以下两个.m文件放到同一文件夹内运行ps:这两个m文件来自 "MATLAB\R2009a\toolbox\comm\comm"awgn.mfunction y=awgn(varargin)%AWGN Add white Gaussian noise to a signal.% Y = AWGN(X,SNR) adds white Gaussian...

    将以下两个.m文件放到同一文件夹内运行

    ps:这两个m文件来自  "MATLAB\R2009a\toolbox\comm\comm"

    awgn.m

    function y=awgn(varargin)

    %AWGN Add white Gaussian noise to a signal.

    % Y = AWGN(X,SNR) adds white Gaussian noise to X. The SNR is in dB.

    % The power of X is assumed to be 0 dBW. If X is complex, then

    % AWGN adds complex noise.

    %

    % Y = AWGN(X,SNR,SIGPOWER) when SIGPOWER is numeric, it represents

    % the signal power in dBW. When SIGPOWER is 'measured', AWGN measures

    % the signal power before adding noise.

    %

    % Y = AWGN(X,SNR,SIGPOWER,STATE) resets the state of RANDN to STATE.

    %

    % Y = AWGN(..., POWERTYPE) specifies the units of SNR and SIGPOWER.

    % POWERTYPE can be 'db' or 'linear'. If POWERTYPE is 'db', then SNR

    % is measured in dB and SIGPOWER is measured in dBW. If POWERTYPE is

    % 'linear', then SNR is measured as a ratio and SIGPOWER is measured

    % in Watts.

    %

    % Example 1:

    % % To specify the power of X to be 0 dBW and add noise to produce

    % % an SNR of 10dB, use:

    % X = sqrt(2)*sin(0:pi/8:6*pi);

    % Y = awgn(X,10,0);

    %

    % Example 2:

    % % To specify the power of X to be 3 Watts and add noise to

    % % produce a linear SNR of 4, use:

    % X = sqrt(2)*sin(0:pi/8:6*pi);

    % Y = awgn(X,4,3,'linear');

    %

    % Example 3:

    % % To cause AWGN to measure the power of X and add noise to

    % % produce a linear SNR of 4, use:

    % X = sqrt(2)*sin(0:pi/8:6*pi);

    % Y = awgn(X,4,'measured','linear');

    %

    % See also WGN, RANDN, and BSC.

    % Copyright 1996-2008 The MathWorks, Inc.

    % $Revision: 1.9.4.6 $ $Date: 2008/08/22 20:23:43 $

    % --- Initial checks

    error(nargchk(2,5,nargin,'struct'));

    % --- Value set indicators (used for the string flags)

    pModeSet = 0;

    measModeSet = 0;

    % --- Set default values

    sigPower = 0;

    pMode = 'db';

    measMode = 'specify';

    state = [];

    % --- Placeholder for the signature string

    sigStr = '';

    % --- Identify string and numeric arguments

    for n=1:nargin

    if(n>1)

    sigStr(size(sigStr,2)+1) = '/';

    end

    % --- Assign the string and numeric flags

    if(ischar(varargin{n}))

    sigStr(size(sigStr,2)+1) = 's';

    elseif(isnumeric(varargin{n}))

    sigStr(size(sigStr,2)+1) = 'n';

    else

    error('comm:awgn:InvalidArg','Only string and numeric arguments are allowed.');

    end

    end

    % --- Identify parameter signatures and assign values to variables

    switch sigStr

    % --- awgn(x, snr)

    case 'n/n'

    sig = varargin{1};

    reqSNR = varargin{2};

    % --- awgn(x, snr, sigPower)

    case 'n/n/n'

    sig = varargin{1};

    reqSNR = varargin{2};

    sigPower = varargin{3};

    % --- awgn(x, snr, 'measured')

    case 'n/n/s'

    sig = varargin{1};

    reqSNR = varargin{2};

    measMode = lower(varargin{3});

    measModeSet = 1;

    % --- awgn(x, snr, sigPower, state)

    case 'n/n/n/n'

    sig = varargin{1};

    reqSNR = varargin{2};

    sigPower = varargin{3};

    state = varargin{4};

    % --- awgn(x, snr, 'measured', state)

    case 'n/n/s/n'

    sig = varargin{1};

    reqSNR = varargin{2};

    measMode = lower(varargin{3});

    state = varargin{4};

    measModeSet = 1;

    % --- awgn(x, snr, sigPower, 'db|linear')

    case 'n/n/n/s'

    sig = varargin{1};

    reqSNR = varargin{2};

    sigPower = varargin{3};

    pMode = lower(varargin{4});

    pModeSet = 1;

    % --- awgn(x, snr, 'measured', 'db|linear')

    case 'n/n/s/s'

    sig = varargin{1};

    reqSNR = varargin{2};

    measMode = lower(varargin{3});

    pMode = lower(varargin{4});

    measModeSet = 1;

    pModeSet = 1;

    % --- awgn(x, snr, sigPower, state, 'db|linear')

    case 'n/n/n/n/s'

    sig = varargin{1};

    reqSNR = varargin{2};

    sigPower = varargin{3};

    state = varargin{4};

    pMode = lower(varargin{5});

    pModeSet = 1;

    % --- awgn(x, snr, 'measured', state, 'db|linear')

    case 'n/n/s/n/s'

    sig = varargin{1};

    reqSNR = varargin{2};

    measMode = lower(varargin{3});

    state = varargin{4};

    pMode = lower(varargin{5});

    measModeSet = 1;

    pModeSet = 1;

    otherwise

    error('comm:awgn:InvalidSyntax','Syntax error.');

    end

    % --- Parameters have all been set, either to their defaults or by the values passed in,

    % so perform range and type checks

    % --- sig

    if(isempty(sig))

    error('comm:awgn:NoInput','An input signal must be given.');

    end

    if(ndims(sig)>2)

    error('comm:awgn:InvalidSignalDims','The input signal must have 2 or fewer dimensions.');

    end

    % --- measMode

    if(measModeSet)

    if(~strcmp(measMode,'measured'))

    error('comm:awgn:InvalidSigPower','The signal power parameter must be numeric or ''measured''.');

    end

    end

    % --- pMode

    if(pModeSet)

    switch pMode

    case {'db' 'linear'}

    otherwise

    error('comm:awgn:InvalidPowerType','The signal power mode must be ''db'' or ''linear''.');

    end

    end

    % -- reqSNR

    if(any([~isreal(reqSNR) (length(reqSNR)>1) (isempty(reqSNR))]))

    error('comm:awgn:InvalidSNR','The signal-to-noise ratio must be a real scalar.');

    end

    if(strcmp(pMode,'linear'))

    if(reqSNR<=0)

    error('comm:awgn:InvalidSNRForLinearMode','In linear mode, the signal-to-noise ratio must be > 0.');

    end

    end

    % --- sigPower

    if(~strcmp(measMode,'measured'))

    % --- If measMode is not 'measured', then the signal power must be specified

    if(any([~isreal(sigPower) (length(sigPower)>1) (isempty(sigPower))]))

    error('comm:awgn:InvalidSigPower','The signal power value must be a real scalar.');

    end

    if(strcmp(pMode,'linear'))

    if(sigPower<0)

    error('comm:awgn:InvalidSigPowerForLinearMode','In linear mode, the signal power must be >= 0.');

    end

    end

    end

    % --- state

    if(~isempty(state))

    if(any([~isreal(state) (length(state)>1) (isempty(state)) any((state-floor(state))~=0)]))

    error('comm:awgn:InvaildState','The State must be a real, integer scalar.');

    end

    end

    % --- All parameters are valid, so no extra checking is required

    % --- Check the signal power. This needs to consider power measurements on matrices

    if(strcmp(measMode,'measured'))

    sigPower = sum(abs(sig(:)).^2)/length(sig(:));

    if(strcmp(pMode,'db'))

    sigPower = 10*log10(sigPower);

    end

    end

    % --- Compute the required noise power

    switch lower(pMode)

    case 'linear'

    noisePower = sigPower/reqSNR;

    case 'db'

    noisePower = sigPower-reqSNR;

    pMode = 'dbw';

    end

    % --- Add the noise

    if(isreal(sig))

    opType = 'real';

    else

    opType = 'complex';

    end

    y = sig+wgn(size(sig,1), size(sig,2), noisePower, 1, state, pMode, opType);

    wgn.m

    function y = wgn(varargin)

    %WGN Generate white Gaussian noise.

    % Y = WGN(M,N,P) generates an M-by-N matrix of white Gaussian noise.

    % P specifies the power of the output noise in dBW.

    %

    % Y = WGN(M,N,P,IMP) specifies the load impedance in Ohms.

    %

    % Y = WGN(M,N,P,IMP,STATE) resets the state of RANDN to STATE.

    %

    % Additional flags that can follow the numeric arguments are:

    %

    % Y = WGN(..., POWERTYPE) specifies the units of P. POWERTYPE can

    % be 'dBW', 'dBm' or 'linear'. Linear power is in Watts.

    %

    % Y = WGN(..., OUTPUTTYPE); Specifies the output type. OUTPUTTYPE can

    % be 'real' or 'complex'. If the output type is complex, then P

    % is divided equally between the real and imaginary components.

    %

    % Example 1:

    % % To generate a 1024-by-1 vector of complex noise with power

    % % of 5 dBm across a 50 Ohm load, use:

    % Y = wgn(1024, 1, 5, 50, 'dBm', 'complex')

    %

    % Example 2:

    % % To generate a 256-by-5 matrix of real noise with power

    % % of 10 dBW across a 1 Ohm load, use:

    % Y = wgn(256, 5, 10, 'real')

    %

    % Example 3:

    % % To generate a 1-by-10 vector of complex noise with power

    % % of 3 Watts across a 75 Ohm load, use:

    % Y = wgn(1, 10, 3, 75, 'linear', 'complex')

    %

    % See also RANDN, AWGN.

    % Copyright 1996-2008 The MathWorks, Inc.

    % $Revision: 1.11.4.5 $ $Date: 2008/08/01 12:17:45 $

    % --- Initial checks

    error(nargchk(3,7,nargin,'struct'));

    % --- Value set indicators (used for the strings)

    pModeSet = 0;

    cplxModeSet = 0;

    % --- Set default values

    p = [];

    row = [];

    col = [];

    pMode = 'dbw';

    imp = 1;

    cplxMode = 'real';

    seed = [];

    % --- Placeholders for the numeric and string index values

    numArg = [];

    strArg = [];

    % --- Identify string and numeric arguments

    % An empty in position 4 (Impedance) or 5 (Seed) are considered numeric

    for n=1:nargin

    if(isempty(varargin{n}))

    switch n

    case 4

    if(ischar(varargin{n}))

    error('comm:wgn:InvalidDefaultImp','The default impedance should be marked by [].');

    end;

    varargin{n} = imp; % Impedance has a default value

    case 5

    if(ischar(varargin{n}))

    error('comm:wgn:InvalidNumericInput','The default seed should be marked by [].');

    end;

    varargin{n} = []; % Seed has no default

    otherwise

    varargin{n} = '';

    end;

    end;

    % --- Assign the string and numeric vectors

    if(ischar(varargin{n}))

    strArg(size(strArg,2)+1) = n;

    elseif(isnumeric(varargin{n}))

    numArg(size(numArg,2)+1) = n;

    else

    error('comm:wgn:InvalidArg','Only string and numeric arguments are allowed.');

    end;

    end;

    % --- Build the numeric argument set

    switch(length(numArg))

    case 3

    % --- row is first (element 1), col (element 2), p (element 3)

    if(all(numArg == [1 2 3]))

    row = varargin{numArg(1)};

    col = varargin{numArg(2)};

    p = varargin{numArg(3)};

    else

    error('comm:wgn:InvalidSyntax','Illegal syntax.')

    end;

    case 4

    % --- row is first (element 1), col (element 2), p (element 3), imp (element 4)

    %

    if(all(numArg(1:3) == [1 2 3]))

    row = varargin{numArg(1)};

    col = varargin{numArg(2)};

    p = varargin{numArg(3)};

    imp = varargin{numArg(4)};

    else

    error('comm:wgn:InvalidSyntax','Illegal syntax.')

    end;

    case 5

    % --- row is first (element 1), col (element 2), p (element 3), imp (element 4), seed (element 5)

    if(all(numArg(1:3) == [1 2 3]))

    row = varargin{numArg(1)};

    col = varargin{numArg(2)};

    p = varargin{numArg(3)};

    imp = varargin{numArg(4)};

    seed = varargin{numArg(5)};

    else

    error('comm:wgn:InvalidSyntax','Illegal syntax.');

    end;

    otherwise

    error('comm:wgn:InvalidSyntax','Illegal syntax.');

    end;

    % --- Build the string argument set

    for n=1:length(strArg)

    switch lower(varargin{strArg(n)})

    case {'dbw' 'dbm' 'linear'}

    if(~pModeSet)

    pModeSet = 1;

    pMode = lower(varargin{strArg(n)});

    else

    error('comm:wgn:TooManyPowerTypes','The Power mode must only be set once.');

    end;

    case {'db'}

    error('comm:wgn:InvalidPowerType','Incorrect power mode passed in. Please use ''dBW'', ''dBm'', or ''linear.''');

    case {'real' 'complex'}

    if(~cplxModeSet)

    cplxModeSet = 1;

    cplxMode = lower(varargin{strArg(n)});

    else

    error('comm:wgn:TooManyOutputTypes','The complexity mode must only be set once.');

    end;

    otherwise

    error('comm:wgn:InvalidArgOption','Unknown option passed in.');

    end;

    end;

    % --- Arguments and defaults have all been set, either to their defaults or by the values passed in

    % so, perform range and type checks

    % --- p

    if(isempty(p))

    error('comm:wgn:InvalidPowerVal','The power value must be a real scalar.');

    end;

    if(any([~isreal(p) (length(p)>1) (length(p)==0)]))

    error('comm:wgn:InvalidPowerVal','The power value must be a real scalar.');

    end;

    if(strcmp(pMode,'linear'))

    if(p<0)

    error('comm:wgn:NegativePower','In linear mode, the required noise power must be >= 0.');

    end;

    end;

    % --- Dimensions

    if(any([isempty(row) isempty(col) ~isscalar(row) ~isscalar(col)]))

    error('comm:wgn:InvalidDims','The required dimensions must be real, integer scalars > 1.');

    end;

    if(any([(row<=0) (col<=0) ~isreal(row) ~isreal(col) ((row-floor(row))~=0) ((col-floor(col))~=0)]))

    error('comm:wgn:InvalidDims','The required dimensions must be real, integer scalars > 1.');

    end;

    % --- Impedance

    if(any([~isreal(imp) (length(imp)>1) (length(imp)==0) any(imp<=0)]))

    error('comm:wgn:InvalidImp','The Impedance value must be a real scalar > 0.');

    end;

    % --- Seed

    if(~isempty(seed))

    if(any([~isreal(seed) (length(seed)>1) (length(seed)==0) any((seed-floor(seed))~=0)]))

    error('comm:wgn:InvalidState','The State must be a real, integer scalar.');

    end;

    end;

    % --- All parameters are valid, so no extra checking is required

    switch lower(pMode)

    case 'linear'

    noisePower = p;

    case 'dbw'

    noisePower = 10^(p/10);

    case 'dbm'

    noisePower = 10^((p-30)/10);

    end;

    % --- Generate the noise

    if(~isempty(seed))

    randn('state',seed);

    end;

    if(strcmp(cplxMode,'complex'))

    z = randn(2*row,col);

    y = (sqrt(imp*noisePower/2))*(z(1:row,:)+j*z(row+1:end,:));

    else

    y = (sqrt(imp*noisePower))*randn(row,col);

    end;

    展开全文
  • MATLAB中白噪声的WGN和AWGN函数的使用

    万次阅读 2018-05-17 10:48:32
    MATLAB中白噪声的WGN和AWGN函数的使用MATLAB中白噪声的WGN和AWGN函数的 使用如下:MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一 信号...

    MATLAB中白噪声的WGN和AWGN函数的使用

    MATLAB中白噪声的WGN和AWGN函数的 使用如下:

    MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一 信号中加入高斯白噪声。

    1. WGN:产生高斯白噪声
    y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度。
    y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。
    y = wgn(m,n,p,imp,state) 重置RANDN的状态。


    在数值变量后还可附加一些标志性参数:
    y = wgn(…,POWERTYPE) 指定p的单位。POWERTYPE可以是'dBW', 'dBm'或'linear'。线性强度(linear power)以瓦特(Watt)为单位。
    y = wgn(…,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE可以是'real'或'complex'。
    2. AWGN:在某一信号中加入高斯白噪声
    y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。
    y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为'measured',则函数将在加入噪声之前测定信号强度。
    y = awgn(x,SNR,SIGPOWER,STATE) 重置RANDN的状态。
    y = awgn(…,POWERTYPE) 指定SNR和SIGPOWER的单位。POWERTYPE可以是'dB'或'linear'。如果POWERTYPE是'dB',那么SNR以dB为单 位,而SIGPOWER以dBW为单位。如果POWERTYPE是'linear',那么SNR作为比值来度量,而SIGPOWER以瓦特为单位
    展开全文
  • 文档说明http://blog.csdn.net/szlcw1/article/details/41758711
  • 我需要用到awgn函数,然后从网上找来了awgn的代码。但是它又提示需要wgn函数,跪求wgn函数的代码。 或者哪里能下载到函数包?谢谢了!!!!!!!!万分感谢!!!
  • Matlab函数——wgn

    万次阅读 2013-10-29 18:28:37
    wgn 产生白色高斯噪声 语法  y = wgn(m,n,p) y = wgn(m,n,p,imp) y = wgn(m,n,p,imp,state) y = wgn(...,powertype) y = wgn(...,outputtype) 描述 y = wgn(m,n,p)产生一个m*n的白...
  • Matlab中rand,randn,wgn的区别

    千次阅读 2018-12-14 10:24:50
    (1)rand 生成在(0,1)之间均匀分布的随机数 (2)randn 生成N(0,1)的正态分布的随机数,randn(m,n)表示生成矩阵的规模 ...y = wgn(m,n,p)产生一个m*n的高斯白噪声的矩阵,p以dBW为单位的指定输出噪声的强度...
  • MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。1. WGN:产生高斯白噪声y = wgn(m,n,p) 产生一个m行n列的高斯白...
  • matlab中rand randn wgn 的区别

    千次阅读 2017-11-17 14:53:08
    matlab中rand randn wgn 的区别1)rand 生成在(0, 1)之间均匀分布的随机数2)randn 生成N(0,1)的正态分布的随机数,randn(m,n)表示生成矩阵的规模ps:若要生成均值p,方差q的正态分布随机数序列x 则x=p+sqrt(q)*...
  •  在matlab中无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即,wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。 根据awgn的实现代码可以知道“向已知信号添加某个信噪比(SNR)的高斯白噪声”, ...
  • matlab中awgn函數為例說明:在matlab中無論是wgn還是awgn函數,實質都是由randn函數產生的噪聲。即:wgn函數中調用了randn函數,而awgn函數中調用了wgn函數。根據awgn的實現代碼可以知道”向已知信號添加某個...
  • 分析matlab中agwn函数

    2021-04-18 10:29:50
    % 第4个量非空 并且 确定输入是字符向量还是MATLAB字符串标量 % isCharOrStringScalar(S)是字符或字符串标量返回1。 否则,它返回0。 if isStream && ~isa(varargin{4}, 'RandStream') % Random stream seed % is...
  • matlab中awgn函数为例说明:在matlab中无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即:wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。根据awgn的实现代码可以知道”向已知信号添加某个...
  • MATLAB中产生高斯白噪声可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于将高斯白噪声加入到某一信号中 。 1. WGN:产生高斯白噪声 y = wgn(m,n,p) 产生一个m行n列的高斯白噪声...
  • 通过matlab产生wav的白噪声MATLAB 中产生高斯白噪声MATLAB 中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN 用于产生高斯白噪声,AWGN 则用于在某一信号中加入高斯白噪声。1. WGN:...
  • awgn、wgn函数添加噪声原理

    千次阅读 2017-05-21 10:48:28
     在matlab中无论是wgn还是awgn函数,实质都是由randn函数产生的噪声。即:wgn函数中调用了randn函数,而awgn函数中调用了wgn函数。  根据awgn的实现代码可以知道”向已知信号添加某个信噪比(SNR)的高斯白噪声...
  • MATLAB程序: fs=100; T=5; n=round(T*fs);%采样点个数 t=linspace(0,T,n); y=wgn(1,n,0);%LFM信号 注:这边wgn函数中前两个参数分别为要产生的信号矩阵的行数与列数,第三个参数为噪声信号的功率,这边设置为0就是...
  • 高斯白噪声(white Gaussian noise,WGN)及matlab演示

    万次阅读 多人点赞 2014-12-05 22:03:11
     下面以matlab程序演示,感性认识一下高斯白噪声。   程序1(高斯白噪声): noise = wgn(1000,1,0); %生成1000*1个高斯白噪声,功率为0dBW(分贝瓦) y1 = fft(noise,1000); %采样点个数1000个 p1 =...
  • MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。 1. WGN:产生高斯白噪声 y = wgn(m,n,p) 产生一个m行n列的...
  • MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。 % 1. WGN:产生高斯白噪声 % 产生一个m行n列的高斯白噪声的...
  • y=wgn(m,n,p,imp):产生m*n的白噪声矩阵,功率(dBW)为p,指定负载的电阻为imp,单位欧姆。 例如: >> y1=wgn(5,6,0) y1 = -1.1564 -0.0200 -0.7145 -0.8479 -1.2571 -2.3299 -0.5336 -0.0348 1.3514 -1....
  • MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。 1.WGN:产生高斯白噪声 y = wgn(m,n,p) 产生一个m行n列的高斯白...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 530
精华内容 212
关键字:

matlabwgn

matlab 订阅