matlab中给信号加高斯白噪声的方法

合集下载

matlab添加高斯噪声的原理

matlab添加高斯噪声的原理

matlab添加高斯噪声的原理在MATLAB中,可以通过以下步骤向一个信号添加高斯噪声:
1. 生成一个具有期望值为0和方差为σ^2的高斯分布随机变量。

这可以使用`randn`函数实现,该函数生成一个符合标准正态分布(均值为0,方差为1)的随机数。

2. 为了使高斯噪声的方差达到所需值σ^2,需要缩放该随机变量。

可以通过乘以标准差(σ)来实现,即使用`randn`函数生成的随机数乘以方差的平方根。

3. 将生成的高斯噪声添加到信号上。

可以通过将信号与高斯噪声相加来实现。

以下是一个简单的MATLAB代码示例,演示如何向一个信号添加高斯噪声:
```matlab
% 假设原始信号为x
x = ... % 原始信号值
% 生成高斯噪声
mean = 0; % 期望值
variance = σ^2; % 方差
noise = sqrt(variance) * randn(size(x)) + mean; % 添加高斯噪声
% 添加高斯噪声到信号
noisy_signal = x + noise; % 添加高斯噪声到信号
```
这样,变量`noisy_signal`将包含原始信号与高斯噪声相加后的结果。

高斯白噪声 matlab

高斯白噪声 matlab

高斯白噪声matlab摘要:1.高斯白噪声的定义和特性2.MATLAB 中生成高斯白噪声的方法3.高斯白噪声在各个领域的应用正文:1.高斯白噪声的定义和特性高斯白噪声(Gaussian White Noise)是一种在各个频率上具有相同能量分布的随机信号,它是信号处理领域中常见的一种噪声模型。

高斯白噪声具有以下特性:- 它的概率密度函数服从正态分布(高斯分布),即均值为0,方差为常数σ的正态分布。

- 在各个频率上的能量分布是均匀的,即具有平坦的功率谱。

- 高斯白噪声是各态历经(ergodic)的,这意味着在一个长时间内,信号的任何一段样本都是可能出现的。

2.MATLAB 中生成高斯白噪声的方法在MATLAB 中,可以使用内置函数`wgn`来生成高斯白噪声。

以下是一个简单的示例:```matlab% 指定信号的长度= 1000;% 生成高斯白噪声oise = wgn(n, 1);% 显示噪声信号figure;plot(noise);title("高斯白噪声示例");```其中,`wgn`函数的第一个参数`n`表示信号的长度,第二个参数`1`表示信号的均值为1。

需要注意的是,`wgn`函数生成的高斯白噪声是在均值为0,标准差为1 的条件下生成的,因此在实际应用中,可能需要根据需要对信号进行缩放。

3.高斯白噪声在各个领域的应用高斯白噪声在许多领域都有广泛的应用,包括通信、信号处理、图像处理等。

例如,在通信系统中,高斯白噪声常常被用作信道噪声的模型,以研究信道对信号传输性能的影响;在图像处理中,高斯白噪声可以作为随机噪声加入到图像中,以生成具有自然随机纹理的效果。

产生高斯白噪声和有色噪声的MATLAB程序

产生高斯白噪声和有色噪声的MATLAB程序

1.产生一个高斯白噪声t=0:0.1:100;x=wgn(1,1001,2);y=sin(50*t);i=y+x;subplot(2,1,1),plot(x);subplot(2,1,2),plot(i);产生白噪声的函数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.2.给信号叠加一个高斯白噪声我想要程序代码,产生一个高斯白噪声,并且让MATLAB输出高斯的时域波形和频谱。

让产生的高斯白噪声与一个语音信号叠加,画出叠加后的时域波形和频谱。

t = 0:.1:10;x = sawtooth(t); % Create sawtooth signal.y = awgn(x,10,'measured'); % Add white Gaussian noise.plot(t,x,t,y) % Plot both signals.legend('Original signal','Signal with AWGN');MATLAB中产生高斯白噪声的两个函数MATLAB中产生高斯白噪声的两个函数MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是A WGN。

WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。

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

随机信号分析大作业:利用matlab程序设计设计一个正旋信号加高斯白噪声的复合信号

随机信号分析大作业:利用matlab程序设计设计一个正旋信号加高斯白噪声的复合信号

班级:021012班学号:0210111X姓名:李X随机信号大作业利用matlab程序设计设计一个正旋信号加高斯白噪声的复合信号。

源代码:正旋sinx信号x=(0:0.01:2);y1=sin(10*pi*x);plot(x,y1,'r');title('y=sin(10*pi*x)');ylabel('y');xlabel('x/10pi');grid;正旋信号如下图:高斯白噪声,当白噪声的方差为10的-4次方时y2=0.01*randn(1,201);plot(x,y2,'r');title('高斯白噪声');ylabel('y');xlabel('x/10pi');grid;1:加入噪声之后的信号。

因为白噪声方差过小,变化过快,叠加信号大致显示出的是正旋波形y=y1+y2;plot(x,y,'r');title('叠加了高斯白噪声的sinx');ylabel('y');xlabel('x/10pi');grid;2:当增加白噪声的方差到0.01时,观察复合信号,可以发现,复合信号波形没有第一次平滑,较第一个复合波形而言更显无序性3:方差增加到1时:取方差为0.01时的白噪声作函数频谱图和白噪声自相关函数图:FY=fft(y);FY1=fftshift(FY);f=(0:200)*100/201-50;subplot(1,2,1);plot(f,abs(FY1),'r');ylabel('F(jw)');xlabel('w');grid;i=-0.49:1/100:0.49;for j=1:50R(j)=sum(y2(1:201-j-1).*y2(j:199),2)/(201-j);Rx(49+j)=R(j);Rx(51-j)=R(j);endsubplot(1,2,2);plot(i,Rx,'r');ylabel('Rx');xlabel('x');grid;左图为函数频谱图;右图为白噪声自相关函数图。

(word完整版)高斯白噪声的matlab实现

(word完整版)高斯白噪声的matlab实现

通信系统建模与仿真实验一、高斯白噪声的matlab 实现要求:样本点:100 1000标准差:0.2 2 10均值: 0 0.2白噪声如果噪声的功率谱密度在所有的频率上均为一常数,即)/(),(,)(0Hz W f n f P n +∞<<-∞=式中:0n 为常数,责成该噪声为白噪声,用)(t n 表示。

高斯白噪声的matlab实现1.样本点为1000、均值为0、标准差为0.2时,高斯白噪声分布为下图所示:程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (0.2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft));plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (10) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (0.2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (10) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (0.2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (10) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (0.2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (10) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)。

噪声调幅干扰matlab

噪声调幅干扰matlab

噪声调幅干扰matlab噪声调幅干扰(matlab)是指在使用调幅技术传输信息时,由于外部环境的干扰,例如电磁干扰、杂波等,导致接收端收到的信号带有噪声。

这种噪声可能会严重影响信息的传输质量,使得接收端无法正确地解码信息。

因此,如何有效地减小或消除噪声对调幅信号的干扰,成为了一项重要的研究课题。

在matlab上,我们可以使用不同的方法来模拟噪声调幅干扰,以便更好地研究和解决这个问题。

下面,我们将详细介绍几种常见的噪声调幅干扰模拟方法及其解决方案。

1.高斯白噪声干扰模拟高斯白噪声是指在一段时间内,所有频率上的幅度都是随机的,且平均功率密度相等的噪声。

在matlab中,我们可以使用“awgn”函数来生成高斯白噪声。

例如,我们可以使用以下代码生成一个带有高斯白噪声的调幅信号:t = 0:0.001:1; % 生成时间序列fc = 100; % 载波频率Ac = 1; % 载波幅度fs = 1000; % 采样频率Am = 0.5; % 调制信号幅度fm = 10; % 调制信号频率m = Am*cos(2*pi*fm*t); % 生成调制信号c = Ac*cos(2*pi*fc*t); % 生成载波信号s = (1+m).*c; % 生成调幅信号SNR = 5; % 信噪比(dB)s_n = awgn(s, SNR, 'measured'); % 加入高斯白噪声在上述代码中,我们使用“awgn”函数将调幅信号加入高斯白噪声,其中“SNR”是信噪比,用于控制噪声的强度。

在实际应用中,我们可以通过调整信噪比来模拟不同强度的噪声。

为了减小高斯白噪声对调幅信号的干扰,我们可以使用数字滤波器进行滤波。

例如,我们可以使用低通滤波器将高斯白噪声滤除,以获得更清晰的调幅信号。

2.频率干扰模拟频率干扰是指由于外部环境变化等因素导致调幅信号的载波频率发生变化,从而造成接收端无法正确解码的现象。

在matlab中,我们可以使用“fmdemod”函数来模拟频率干扰。

matlab awgn 函数

matlab awgn 函数

在MATLAB 中,`awgn` 函数用于向信号添加高斯白噪声(AWGN)。

该函数的语法为:
y = awgn(x, snr)
其中,`x` 是原始信号,`snr` 是信噪比(Signal-to-Noise Ratio)。

函数返回添加了噪声的信号`y`。

例如,如果要将原始信号`x` 添加10 dB 的信噪比的高斯白噪声,可以使用以下代码:
x = randn(1, 1000); % 生成一个长度为1000 的随机信号
y = awgn(x, 10); % 添加10 dB 的信噪比的高斯白噪声
这将生成一个长度为1000 的随机信号`x`,并将其与10 dB 的信噪比的高斯白噪声相结合,结果保存在`y` 中。

`awgn` 函数还有其他一些选项,例如指定噪声的功率、信号的采样率等。

你可以通过查阅MATLAB 的帮助文档或者在MATLAB 命令窗口中输入`help awgn` 来获取更多关于该函数的信息。

使用Matlab进行随机信号生成的方法

使用Matlab进行随机信号生成的方法

使用Matlab进行随机信号生成的方法随机信号在现代通信、雷达、生物医学工程等领域中起着重要作用。

为了研究随机信号及其特性,我们常常需要生成符合特定分布的随机信号。

Matlab作为一种功能强大的科学计算软件,提供了丰富的函数和工具,方便我们进行随机信号的生成与分析。

本文将介绍使用Matlab进行随机信号生成的一些常见方法。

一、高斯白噪声信号生成高斯白噪声是一种统计特性良好的随机信号,其频域内的功率谱密度是常数。

在Matlab中,可以使用randn函数生成服从标准正态分布的随机数,进而得到高斯白噪声信号。

以下是一个简单的示例:```matlabt = 0:0.1:10; % 时间变量n = length(t); % 信号长度noise = randn(1,n); % 生成高斯白噪声plot(t,noise);```其中,t为时间变量,n为信号长度,randn函数生成服从标准正态分布的随机数,最后使用plot函数进行绘制。

通过修改时间变量和信号长度,可以生成不同长度和采样频率的高斯白噪声信号。

二、均匀白噪声信号生成均匀白噪声是一种功率谱密度为常数的随机信号,与高斯白噪声相比,其统计特性略有不同。

在Matlab中,可以使用rand函数生成服从均匀分布的随机数,进而得到均匀白噪声信号。

以下是一个简单的示例:```matlabt = 0:0.1:10; % 时间变量n = length(t); % 信号长度noise = rand(1,n); % 生成均匀白噪声plot(t,noise);```同样地,通过修改时间变量和信号长度,可以生成不同长度和采样频率的均匀白噪声信号。

三、正弦信号加噪声在实际应用中,我们常常需要有噪声干扰的信号。

假设我们要生成带有高斯白噪声的正弦信号,可以使用以下方法:```matlabt = 0:0.1:10; % 时间变量n = length(t); % 信号长度signal = sin(t); % 生成正弦信号noise = 0.1*randn(1,n); % 生成高斯白噪声noisy_signal = signal + noise; % 信号加噪声plot(t,noisy_signal);```在上述示例中,我们首先生成了一个正弦信号,然后使用randn函数生成与信号长度相同的高斯白噪声,最后将信号和噪声相加得到带有噪声干扰的信号。

高斯白噪声 matlab

高斯白噪声 matlab

高斯白噪声 matlab
【最新版】
目录
1.高斯白噪声的定义与特点
2.MATLAB 中生成高斯白噪声的方法
3.高斯白噪声在各个领域的应用
正文
1.高斯白噪声的定义与特点
高斯白噪声(Gaussian White Noise)是一种随机信号,其取值符合正态分布(高斯分布),具有均值为 0、方差为常数的特性。

白噪声是一种功率谱密度均匀分布的噪声,即在各个频率上的能量分布相同。

高斯白噪声广泛应用于信号处理、通信系统、图像处理等领域。

2.MATLAB 中生成高斯白噪声的方法
在 MATLAB 中,可以使用内置函数`wgn`生成高斯白噪声。

`wgn`函数的用法如下:
```matlab
X = wgn(n, sigma)
```
其中,`n`表示生成的随机数个数,`sigma`表示噪声的方差。

当`n`为向量时,`wgn`函数返回一个包含`n`个高斯白噪声的向量。

例如,我们可以生成一个长度为 10 的高斯白噪声序列:
```matlab
= 10;
sigma = 1;
X = wgn(n, sigma);
```
3.高斯白噪声在各个领域的应用
高斯白噪声在各个领域有广泛的应用,如:
- 通信系统:在通信系统中,高斯白噪声常常作为信道噪声模型,用于评估通信系统的性能;
- 信号处理:在信号处理领域,高斯白噪声常用于信号模型的建立,或者作为加性高斯白噪声(AWGN)与其他噪声模型进行比较;
- 图像处理:在图像处理领域,高斯白噪声可以作为图像的噪声模型,用于图像去噪、图像增强等任务。

总之,高斯白噪声作为一种重要的随机过程,其在各个领域的应用十分广泛。

高斯白噪声 matlab

高斯白噪声 matlab

高斯白噪声1. 什么是高斯白噪声?高斯白噪声是一种在时间和频率上都是均匀分布的随机信号,其特点是具有平坦的功率谱密度。

在频域上,高斯白噪声在所有频率上都具有相同的能量。

在时域上,它表现为一个平均值为零、方差为常数的随机过程。

高斯白噪声可以用数学模型来描述,即服从高斯分布(正态分布)且均值为0、方差为常数的随机变量序列。

由于其随机性质和均匀分布特点,高斯白噪声广泛应用于信号处理、通信系统、图像处理等领域。

2. 高斯白噪声模拟方法2.1 Box-Muller变换Box-Muller变换是一种常用的生成服从标准正态分布的随机数方法。

通过该方法,我们可以生成服从高斯分布(正态分布)的随机数。

Box-Muller变换基于极坐标转换原理,将两个独立且均匀分布在[0,1]区间上的随机数转换为符合高斯分布的随机数。

具体步骤如下: 1. 生成两个均匀分布在[0,1]区间上的随机数u1和u2。

2. 计算z0 = sqrt(-2 * ln(u1)) * cos(2 * pi * u2)和z1 = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)。

3. z0和z1即为服从标准正态分布的随机数。

2.2 MATLAB实现在MATLAB中,可以使用randn函数生成服从标准正态分布的随机数。

通过乘以方差sigma和加上均值mu,可以得到服从指定均值和方差的高斯白噪声。

以下是MATLAB代码示例:% 生成高斯白噪声mu = 0; % 均值sigma = 1; % 方差n = 1000; % 生成1000个样本点noise = mu + sigma * randn(n, 1); % 生成服从指定均值和方差的高斯白噪声% 绘制高斯白噪声时域波形图t = (0:n-1)';figure;plot(t, noise);xlabel('Time');ylabel('Amplitude');title('Gaussian White Noise');% 绘制高斯白噪声频谱图Fs = 1000; % 采样率f = (-Fs/2):(Fs/n):(Fs/2-Fs/n);spectrum = abs(fftshift(fft(noise)));figure;plot(f, spectrum);xlabel('Frequency');ylabel('Magnitude');title('Frequency Spectrum of Gaussian White Noise');3. 高斯白噪声的应用高斯白噪声由于其随机性和均匀分布特点,在信号处理和通信系统中具有广泛的应用。

matlab中channel用法

matlab中channel用法

matlab中channel用法Matlab中的channel是一个非常重要的概念,它在信号处理和通信系统设计中起着关键的作用。

本文将详细介绍Matlab中channel的用法,并一步一步回答与之相关的问题。

1. 什么是信道?信道是指信号传输中的传输介质,它可以是电缆、无线电波、光纤等。

在通信系统中,信道会对信号进行一定的改变和失真,这是由传输介质的物理特性和环境影响所决定的。

因此,信道的建模和分析对于有效的信号传输至关重要。

2. 信道建模在Matlab中,我们可以通过各种建模技术来描述信道。

一个常见的信道模型是加性高斯白噪声(Additive White Gaussian Noise, AWGN)信道。

该模型假设信号在传输过程中会受到加性高斯白噪声的干扰。

在Matlab中,我们可以使用“awgn”函数来在信号中加入高斯白噪声。

例如,假设我们有一个原始信号x,信道增益为1,信噪比为10dB,我们可以使用以下代码将原始信号通过AWGN信道进行建模:matlabSNR = 10; % 信噪比(dB)x = randn(1, 1000); % 原始信号y = awgn(x, SNR, 'measured'); % 加入高斯白噪声在上述代码中,“awgn”函数将原始信号x与指定的信噪比和信道增益一起传递,生成经过AWGN信道的输出信号y。

3. 信道估计在通信系统中,准确地估计信道的特性是至关重要的。

信道估计可以在接收端对接收到的信号进行分析,从而推断出信道的特性。

Matlab提供了各种信道估计算法,如最小二乘(Least Squares)、最大似然(Maximum Likelihood)等。

例如,对于频率选择性信道,我们可以使用最小二乘法对信道进行估计。

以下是使用LS算法进行信道估计的示例代码:matlabh_true = [1 0.5 0.2 0.1]; % 真实信道冲激响应N = 10000; % 信号长度x = randn(1, N); % 发送信号y = conv(x, h_true) + 0.1 * randn(1, N+length(h_true)-1); % 接收信号(含噪声)h_est = ls_channel_estimate(x, y, length(h_true)); % 信道估计function h_est = ls_channel_estimate(x, y, M)X = toeplitz(x, [x(1) zeros(1, M-1)]); % 发送信号的Toeplitz矩阵h_est = inv(X' * X) * X' * y'; % 最小二乘信道估计end在上述代码中,“ls_channel_estimate”函数通过计算发送信号x的Toeplitz矩阵并应用最小二乘方法来估计信道带来的响应h_est。

matlab中给信号加噪声的方法

matlab中给信号加噪声的方法

在信号处理中经常需要把噪声叠加到信号上去,在叠加噪声时往往需要满足一定的信噪比,这样产生二个问题,其一噪声是否按指定的信噪比叠加,其二怎么样检验带噪信号中信噪比满足指定的信噪比。

在MATLAB中可以用randn产生均值为0方差为1的正态分布白噪声,但在任意长度下x=randn(1,N),x不一定是均值为0方差为1(有些小小的偏差),这样对后续的计算会产生影响。

在这里提供3个函数用于按一定的信噪比把噪声叠加到信号上去,同时可检验带噪信号中信噪比。

1. 把白噪声叠加到信号上去:function [Y,NOISE] = noisegen(X,SNR)% noisegen add white Gaussian noise to a signal.% [Y, NOISE] = NOISEGEN(X,SNR) adds white Gaussian NOISE to X. The SNR is in dB. NOISE=randn(size(X));NOISE=NOISE-mean(NOISE);signal_power = 1/length(X)*sum(X.*X);noise_variance = signal_power / ( 10^(SNR/10) );NOISE=sqrt(noise_variance)/std(NOISE)*NOISE;Y=X+NOISE;其中X是纯信号,SNR是要求的信噪比,Y是带噪信号,NOISE是叠加在信号上的噪声。

2. 把指定的噪声叠加到信号上去有标准噪声库NOISEX-92,其中带有白噪声、办公室噪声、工厂噪声、汽车噪声、坦克噪声等等,在信号处理中往往需要把库中的噪声叠加到信号中去,而噪声的采样频率与纯信号的采样频率往往不一致,需要采样频率的校准。

function [Y,NOISE] = add_noisem(X,filepath_name,SNR,fs)% add_noisem add determinated noise to a signal.% X is signal, and its sample frequency is fs;% filepath_name is NOISE's path and name, and the SNR is signal to noise ratio in dB. [wavin,fs1,nbits]=wavread(filepath_name);if fs1~=fswavin1=resample(wavin,fs,fs1);endnx=size(X,1);NOISE=wavin1(1:nx);NOISE=NOISE-mean(NOISE);signal_power = 1/nx*sum(X.*X);noise_variance = signal_power / ( 10^(SNR/10) );NOISE=sqrt(noise_variance)/std(NOISE)*NOISE;Y=X+NOISE;其中X是纯信号,filepath_name是指定噪声文件(.wav)的路径和文件名,SNR是要求的信噪比,fs是信号X的采样频率,Y是带噪信号,NOISE是叠加在信号上的噪声。

MATLAB 添加高斯噪声awgn函数(需要wgn函数)

MATLAB 添加高斯噪声awgn函数(需要wgn函数)

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 checkserror(nargchk(2,5,nargin,'struct'));% --- Value set indicators (used for the string flags)pModeSet = 0;measModeSet = 0;% --- Set default valuessigPower = 0;pMode = 'db';measMode = 'specify';state = [];% --- Placeholder for the signature stringsigStr = '';% --- Identify string and numeric argumentsfor n=1:narginif(n>1)sigStr(size(sigStr,2)+1) = '/';end% --- Assign the string and numeric flagsif(ischar(varargin{n}))sigStr(size(sigStr,2)+1) = 's';elseif(isnumeric(varargin{n}))sigStr(size(sigStr,2)+1) = 'n';elseerror('comm:awgn:InvalidArg','Only string and numeric arguments are allowed.');endend% --- Identify parameter signatures and assign values to variablesswitch 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;otherwiseerror('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% --- sigif(isempty(sig))error('comm:awgn:NoInput','An input signal must be given.');endif(ndims(sig)>2)error('comm:awgn:InvalidSignalDims','The input signal must have 2 or fewer dimensions.');end% --- measModeif(measModeSet)if(~strcmp(measMode,'measured'))error('comm:awgn:InvalidSigPower','The signal power parameter must be numeric or ''measured''.');endend% --- pModeif(pModeSet)switch pModecase {'db''linear'}otherwiseerror('comm:awgn:InvalidPowerType','The signal power mode must be''db'' or ''linear''.');endend% -- reqSNRif(any([~isreal(reqSNR) (length(reqSNR)>1) (isempty(reqSNR))]))error('comm:awgn:InvalidSNR','The signal-to-noise ratio must be a real scalar.');endif(strcmp(pMode,'linear'))if(reqSNR<=0)error('comm:awgn:InvalidSNRForLinearMode','In linear mode, the signal-to-noise ratio must be > 0.');endend% --- sigPowerif(~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.');endif(strcmp(pMode,'linear'))if(sigPower<0)error('comm:awgn:InvalidSigPowerForLinearMode','In linear mode, the signal power must be >= 0.');endendend% --- stateif(~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.');endend% --- All parameters are valid, so no extra checking is required% --- Check the signal power. This needs to consider power measurements on matricesif(strcmp(measMode,'measured'))sigPower = sum(abs(sig(:)).^2)/length(sig(:));if(strcmp(pMode,'db'))sigPower = 10*log10(sigPower);endend% --- Compute the required noise powerswitch lower(pMode)case'linear'noisePower = sigPower/reqSNR;case'db'noisePower = sigPower-reqSNR;pMode = 'dbw';end% --- Add the noiseif(isreal(sig))opType = 'real';elseopType = 'complex';endy = sig+wgn(size(sig,1), size(sig,2), noisePower, 1, state, pMode, opType);。

MATLAB添加高斯噪声awgn函数(需要wgn函数)

MATLAB添加高斯噪声awgn函数(需要wgn函数)

MATLAB添加⾼斯噪声awgn函数(需要wgn函数)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);% 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 checkserror(nargchk(2,5,nargin,'struct'));% --- Value set indicators (used for the string flags)pModeSet = 0;measModeSet = 0;% --- Set default valuessigPower = 0;pMode = 'db';measMode = 'specify';state = [];% --- Placeholder for the signature stringsigStr = '';% --- Identify string and numeric argumentsfor n=1:narginif(n>1)sigStr(size(sigStr,2)+1) = '/';end% --- Assign the string and numeric flagsif(ischar(varargin{n}))sigStr(size(sigStr,2)+1) = 's';elseif(isnumeric(varargin{n}))sigStr(size(sigStr,2)+1) = 'n';elseerror('comm:awgn:InvalidArg','Only string and numeric arguments are allowed.'); endend% --- Identify parameter signatures and assign values to variablesswitch sigStr% --- awgn(x, snr)case'n/n'% --- 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'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;otherwiseerror('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% --- sigif(isempty(sig))error('comm:awgn:NoInput','An input signal must be given.');endif(ndims(sig)>2)error('comm:awgn:InvalidSignalDims','The input signal must have 2 or fewer dimensions.'); endif(~strcmp(measMode,'measured'))error('comm:awgn:InvalidSigPower','The signal power parameter must be numeric or ''measured''.');endend% --- pModeif(pModeSet)switch pModecase {'db''linear'}otherwiseerror('comm:awgn:InvalidPowerType','The signal power mode must be''db'' or ''linear''.');endend% -- reqSNRif(any([~isreal(reqSNR) (length(reqSNR)>1) (isempty(reqSNR))]))error('comm:awgn:InvalidSNR','The signal-to-noise ratio must be a real scalar.');endif(strcmp(pMode,'linear'))if(reqSNR<=0)error('comm:awgn:InvalidSNRForLinearMode','In linear mode, the signal-to-noise ratio must be > 0.');endend% --- sigPowerif(~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.');endif(strcmp(pMode,'linear'))if(sigPower<0)error('comm:awgn:InvalidSigPowerForLinearMode','In linear mode, the signal power must be >= 0.');endendend% --- stateany((state-floor(state))~=0)]))error('comm:awgn:InvaildState','The State must be a real, integer scalar.');endend% --- 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);endend% --- Compute the required noise powerswitch lower(pMode)case'linear'noisePower = sigPower/reqSNR;case'db'noisePower = sigPower-reqSNR;pMode = 'dbw';end% --- Add the noiseif(isreal(sig))opType = 'real';elseopType = 'complex';endy = sig+wgn(size(sig,1), size(sig,2), noisePower, 1, state, pMode, opType);。

MATLAB添加高斯噪声awgn函数(需要wgn函数)

MATLAB添加高斯噪声awgn函数(需要wgn函数)

MATLAB添加高斯噪声awgn函数(需要wgn函数)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:% % T o 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 checkserror(nargchk(2,5,nargin,'struct'));% --- Value set indicators (used for the string flags)pModeSet = 0;measModeSet = 0;% --- Set default valuessigPower = 0;pMode = 'db';measMode = 'specify';state = [];% --- Placeholder for the signature stringsigStr = '';% --- Identify string and numeric argumentsfor n=1:narginif(n>1)sigStr(size(sigStr,2)+1) = '/';end% --- Assign the string and numeric flagsif(ischar(varargin{n}))sigStr(size(sigStr,2)+1) = 's';elseif(isnumeric(varargin{n}))sigStr(size(sigStr,2)+1) = 'n';elseerror('comm:awgn:InvalidArg','Only string and numeric arguments are allowed.');endend% --- Identify parameter signatures and assign values to variablesswitch 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;otherwiseerror('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% --- sigif(isempty(sig))error('comm:awgn:NoInput','An input signal must be given.');endif(ndims(sig)>2)error('comm:awgn:InvalidSignalDims','The input signal must have 2 or fewer dimensions.');end% --- measModeif(measModeSet)if(~strcmp(measMode,'measured'))error('comm:awgn:InvalidSigPower','The signal power parameter must be numeric or ''measured''.');endend% --- pModeif(pModeSet)switch pModecase {'db''linear'}otherwiseerror('comm:awgn:InvalidPowerType','The signal power mode must be''db'' or ''linear''.');endend% -- reqSNRif(any([~isreal(reqSNR) (length(reqSNR)>1) (isempty(reqSNR))]))error('comm:awgn:InvalidSNR','The signal-to-noise ratio must be a real scalar.');endif(strcmp(pMode,'linear'))if(reqSNR<=0)error('comm:awgn:InvalidSNRForLinearMode','In linearmode, the signal-to-noise ratio must be > 0.');endend% --- sigPowerif(~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.');endif(strcmp(pMode,'linear'))if(sigPower<0)error('comm:awgn:InvalidSigPowerForLinearMode','In linear mode, the signal power must be >= 0.');endendend% --- stateif(~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.');endend% --- All parameters are valid, so no extra checking is required% --- Check the signal power. This needs to consider power measurements on matricesif(strcmp(measMode,'measured'))sigPower = sum(abs(sig(:)).^2)/length(sig(:));if(strcmp(pMode,'db'))sigPower = 10*log10(sigPower);endend% --- Compute the required noise powerswitch lower(pMode)case'linear'noisePower = sigPower/reqSNR;case'db'noisePower = sigPower-reqSNR;pMode = 'dbw';end% --- Add the noiseif(isreal(sig))opType = 'real';elseopType = 'complex';endy = sig+wgn(size(sig,1), size(sig,2), noisePower, 1, state, pMode, opType);。

加性高斯白噪声AWGN

加性高斯白噪声AWGN

加性⾼斯⽩噪声AWGN
加性⾼斯⽩噪声 AWGN(Additive White Gaussian Noise) 是最基本的噪声与⼲扰模型。

加性噪声:叠加在信号上的⼀种噪声,通常记为n(t),⽽且⽆论有⽆信号,噪声n(t)都是始终存在的。

因此通常称它为加性噪声或者加性⼲扰。

⽩噪声:噪声的功率谱密度在所有的频率上均为⼀常数,则称这样的噪声为⽩噪声。

如果⽩噪声取值的概率分布服从⾼斯分布,则称这样的噪声为⾼斯⽩噪声。

Matlab中实现加性⾼斯⽩噪声:
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以⽡特为单位。

通过matlab产生wav的白噪声

通过matlab产生wav的白噪声

MATLAB 中产生高斯白噪声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 以瓦特为单位。

(完整word版)MATLAB环境下的正弦信号及高斯白噪声仿真程序说明

(完整word版)MATLAB环境下的正弦信号及高斯白噪声仿真程序说明

MATLAB 环境下的正弦信号及高斯白噪声仿真程序说明一、信号的产生及时域观察1、设定正选信号的频率为10HZ ,抽样频率为100HZ ;2、设定N(0,0.25)高斯白噪声,及噪声功率为0.25W ;3、最后将噪声叠加到正弦信号上,观察其三者时域波形。

二、信号频谱及白噪声功率谱的求解与观察1、对原正弦信号直接进行FFT ,得出其频谱;2、求白噪声的自相关函数,随机序列自相关函数的无偏估计公式为:1^01()()()N m xx n r m x n x n m N m --==+-∑ 01m N ≤≤- ^^()()xx xx r m r m =- 01m N <<-对所求自相关函数进行FFT 变换,求的白噪声的功率谱函数。

源程序:1.产生正弦信号fs=100;fc=10;x=(0:1/fs:2);n=201;y1=sin(2*pi*fc*x); %原正弦信号,频率为10a=0;b=0.5; %均值为a ,方差为b^2subplot(2,2,1);plot(x,y1,'r');title('y=sin(20pi*x)');ylabel('y');xlabel('x/20pi');grid;2.产生高斯白噪声y2=a+b*randn(1,n); %高斯白噪声subplot(2,2,2);plot(x,y2,'r');title('N(0,0.25)的高斯白噪声');ylabel('y');xlabel('x/20pi');grid;3.复合信号y=y1+y2; %加入噪声之后的信号subplot(2,2,3);plot(x,y,'r');title('混合信号');ylabel('y');xlabel('x/20pi');grid;4.复合信号功率谱密度%求复合信号的自相关函数m=50;i=-0.49:1/fs:0.49;for j=1:mR(j)=sum(y(1:n-j-1).*y(j:199),2)/(n-j);%无偏自相关函数的估计Rx(49+j)=R(j);Rx(51-j)=R(j);endFy2=fft(Rx); %傅里叶变换得出复合信号功率谱函数Fy21=fftshift(Fy2); %功率谱校正f=(0:98)*fs/99-fs/2;subplot(2,2,4);plot(f,abs(Fy21),'r');axis([-50 50 -0.5 1]);title('复合信号功率谱函数图');ylabel('F(Rx)');xlabel('w');grid;。

高斯白噪声的matlab实现

高斯白噪声的matlab实现

通信系统建模与仿真实验一、高斯白噪声的matlab 实现要求:样本点:100 1000标准差:0.2 2 10均值: 0 0.2白噪声如果噪声的功率谱密度在所有的频率上均为一常数,即)/(),(,)(0Hz W f n f P n +∞<<-∞=式中:0n 为常数,责成该噪声为白噪声,用)(t n 表示。

高斯白噪声的matlab实现1.样本点为1000、均值为0、标准差为0.2时,高斯白噪声分布为下图所示:程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (0.2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft));plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (10) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (0.2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:1000;for i = 1:length(f)K = (10) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (0.2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (2) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (10) * randn(1,1) - 0;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft));plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (0.2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft));plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (2) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft)); plot(ti,realx2)程序如下所示:% White background noisclear allf = 1:1:100;for i = 1:length(f)K = (10) * randn(1,1) - 10;P(i) = 10.^(K - 3.95*(10^-5)*f(i));A(i) = sqrt(2*P(i)); endxifft = ifft(A);realx = real(xifft);ti = [1:length(xifft)-1]/1000;realx2(1:length(xifft)-1) = realx(2:length(xifft));plot(ti,realx2)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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以瓦特为单位。

注释
1. 分贝(decibel,dB):分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个能量之间的差别的一种表示单位,它不是一个绝对单位。

例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比取对数,再乘以20作为电平的分贝数(功率的电平值改乘10)。

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

3. 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的M*N的随机数矩阵,可以用
y=o*randn(M,N)+u得到。

对于均匀分布,若要产生[a,b]区间的均匀分布的M*N的随机数矩阵,则可以用
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为信号长度。

相关文档
最新文档