通过matlab产生wav的白噪声

合集下载

基于MATLAB有噪声语音信号处理

基于MATLAB有噪声语音信号处理

基于MATLAB有噪声语音信号处理一设计内容选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。

二设计的具体实现1语音信号的时频分析利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。

再对其进行采样,记住采样频率和采样点数。

下面介绍wavread 函数几种调用格式。

(1)y=wavread(file)功能说明:读取file所规定的wav文件,返回采样值放在向量y中。

(2)[y,fs,nbits]=wavread(file)功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。

接下来,对语音信号kalong.wav进行采样。

其程序如下:[y,fs,nbits]=wavered (‘kalong’);把语音信号加载入Matlab 仿真软件平台中然后,画出语音信号的时域波形,再对语音信号进行频谱分析。

MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:Xk=fft(xn,N)参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn 的长度时,fft函数自动在xn后面补零。

当N小于xn的长度时,fft函数计算xn 的前N个元素,忽略其后面的元素。

在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。

其程序如下:[x,fc,nbits]=wavread ('kalong.wav');sound(x,fc,nbits); %回放语音信号N=length(x); %求出语音信号的长度t=0:1/fc:(size(x)-1)/fc;X=abs(fft(x,N)); %傅里叶变换X=X(1:N/2);f=fc/N*(0:1:(N/2)-1);figure(1)subplot(2,1,1);plot(t,x);title('原始信号波形');xlabel('s');subplot(2,1,2);plot(f,abs(X));%可见声音信号频谱在0~4e3范围之内程序结果如下图:24681012-0.2-0.100.10.2原始信号波形s02000400060008000100001200050010001500原始信号频谱Hz幅度2 语音信号加噪与时谱分析在本次设计中,我们是利用MA TLAB 中加入单频率噪声到语音信号中,模仿语音信号被污染,并对其频谱分析。

matlab 白噪声功率谱

matlab 白噪声功率谱

matlab 白噪声功率谱白噪声是一种具有平坦功率谱密度的信号,即在所有频率上具有相同的能量。

在MATLAB中,我们可以使用一些内置函数来生成白噪声信号的功率谱密度。

首先,我们可以使用`wgn`函数来生成一个特定长度和功率的白噪声信号。

例如,以下代码将生成一个长度为1024的白噪声信号:matlab.fs = 1000; % 采样频率。

T = 1/fs; % 采样间隔。

t = 0:T:1-T; % 时间向量。

x = wgn(length(t), 1, 0); % 生成功率为0的白噪声信号。

接下来,我们可以使用`pwelch`函数来计算白噪声信号的功率谱密度估计。

`pwelch`函数可以对信号进行傅立叶变换,并计算出每个频率点上的功率值。

例如,以下代码将计算白噪声信号的功率谱密度估计:matlab.[pxx, f] = pwelch(x, [], [], [], fs); % 计算白噪声信号的功率谱密度估计。

plot(f, 10log10(pxx)); % 绘制功率谱密度图。

xlabel('Frequency (Hz)'); % x轴标签。

ylabel('Power/Frequency (dB/Hz)'); % y轴标签。

title('Power Spectral Density of White Noise'); % 图标题。

在这段代码中,我们使用`pwelch`函数计算了白噪声信号的功率谱密度估计,并使用`plot`函数绘制了功率谱密度图。

这样我们就可以清晰地看到白噪声在所有频率上具有均匀的功率分布。

除了使用`pwelch`函数,还可以使用`periodogram`函数来计算白噪声信号的功率谱密度估计。

这两种方法都可以用来分析白噪声信号的频谱特性。

总之,MATLAB提供了丰富的函数和工具,可以帮助我们生成白噪声信号并分析其功率谱密度,从而更好地理解和处理白噪声信号的特性。

高斯白噪声的matlab实现

高斯白噪声的matlab实现

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

高斯白噪声的matlab实现1样本点为1000、均值为0、标准差为0.2时,高斯白噪声分布为下图所示:程序如下所示:% White backgro und noisclear all f = 1:1:1000;for i = 1:le ngth(f)K = (0.2) * randn(1,1) - 0;P(i) = 10.A(K - 3.95*(10人-5)*慣));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft));plot(ti,realx2)程序如下所示:% White backgro und noisclear all f = 1:1:1000;for i = 1:le ngth(f)K = (2) * randn(1,1) - 0;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft)); plot(ti,realx2)II ■■H I I I I ■■D n.1 02 03 0.4 0.5 DG 07 D.S D.9程序如下所示:% White backgro und noisclear allf = 1:1:1000;for i = 1:le ngth(f)K = (10) * randn (1,1) - 0;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft));plot(ti,realx2)程序如下所示:% White backgro und noisclear all f = 1:1:1000;for i = 1:le ngth(f)K = (0.2) * randn(1,1) - 10;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft)); plot(ti,realx2)程序如下所示:% White backgro und noisclear all f = 1:1:1000;for i = 1:le ngth(f)K = (2) * randn(1,1) - 10;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft)); plot(ti,realx2)X 1Q13程序如下所示:% White backgro und noisclear allf = 1:1:1000;for i = 1:le ngth(f)K = (10) * randn (1,1) - 10;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft)); plot(ti,realx2)A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft));plot(ti,realx2)程序如下所示:% White backgro und noisclear all f = 1:1:100;for i = 1:le ngth(f)K = (0.2) * randn(1,1) - 0;P(i) = 10.A (K - 3.95*(10A-5)*f(i));8•样本点为100、均值为0、标准差为2时,高斯白噪声分布为下图所示:程序如下所示:% White backgro und noisclear all f = 1:1:100;for i = 1:le ngth(f)K = (2) * randn(1,1) - 0;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft));plot(ti,realx2)9. 样本点为100、均值为0、标准差为10时,高斯白噪声分布为下图所示:程序如下所示:% White backgro und noisclear all f = 1:1:100;for i = 1:le ngth(f)K = (10) * randn (1,1) - 0;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft));plot(ti,realx2)程序如下所示:% White backgro und noisclear all f = 1:1:100;for i = 1:le ngth(f)K = (0.2) * randn(1,1) - 10;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft)); plot(ti,realx2)程序如下所示:% White backgro und noisclear allf = 1:1:100;for i = 1:le ngth(f)K = (2) * randn(1,1) - 10;P(i) = 10.A(K - 3.95*(10A-5)*f(i));A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft)); plot(ti,realx2)A(i) = sqrt(2*P(i));endxifft = ifft(A);realx = real(xifft);ti = [1:le ngth(xifft)-1]/1000;realx2(1:le ngth(xifft)-1) = realx(2:le ngth(xifft));plot(ti,realx2)程序如下所示:% White backgro und noisclear all f = 1:1:100;for i = 1:le ngth(f)K = (10) * randn (1,1) - 10;P(i) = 10.A (K - 3.95*(10A-5)*f(i));。

matlab中给信号加噪声的方法

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 协方差白噪声

matlab 协方差白噪声

matlab 协方差白噪声
在Matlab中,可以使用'randn'函数生成服从高斯白噪声(随机数)的向量,然后使用'cov'函数计算该向量的协方差矩阵。

下面是一个示例代码:
```matlab
N = 1000; % 数据长度
x = randn(N, 1); % 生成服从高斯分布的白噪声
C = cov(x); % 计算x的协方差矩阵
% 显示结果
disp('协方差矩阵:');
disp(C);
```
上述代码首先设置了数据长度N为1000,然后使用'randn'函数生成一个N行1列的服从高斯分布的随机向量x。

接着,使用'cov'函数计算x的协方差矩阵C。

最后,使用'disp'函数显示协方差矩阵C的结果。

注意,由于是随机生成的白噪声,每次运行代码生成的随机数序列和协方差矩阵都会略有不同。

MATLAB对语音信号加随机噪声及去噪程序

MATLAB对语音信号加随机噪声及去噪程序

%对语言信号做原始的时域波形分析和频谱分析[y,fs,bits]=wavread('C:\Documents andSettings\Administrator\桌面\');%sound(y,fs)% 回放语音信号n=length(y)%选取变换的点数y_p=fft(y,n);%对n点进行傅里叶变换到频域f=fs*(0:n/2-1)/n;% 对应点的频率figure(1)subplot(2,1,1);plot(y);%语音信号的时域波形图title('原始语音信号采样后时域波形');xlabel('时间轴')ylabel('幅值 A')subplot(2,1,2);plot(f,abs(y_p(1:n/2)));%语音信号的频谱图title('原始语音信号采样后频谱图');xlabel('频率Hz');ylabel('频率幅值');%对音频信号产生噪声L=length(y)%计算音频信号的长度noise=*randn(L,2);%产生等长度的随机噪声信号(这里的噪声的大小取决于随机函数的幅度倍数)y_z=y+noise;%将两个信号叠加成一个新的信号——加噪声处理%sound(y_z,fs)%对加噪后的语音信号进行分析n=length(y);%选取变换的点数y_zp=fft(y_z,n);%对n点进行傅里叶变换到频域f=fs*(0:n/2-1)/n;% 对应点的频率figure(2)subplot(2,1,1);plot(y_z);%加噪语音信号的时域波形图title('加噪语音信号时域波形');xlabel('时间轴')ylabel('幅值 A')subplot(2,1,2);plot(f,abs(y_zp(1:n/2)));%加噪语音信号的频谱图title('加噪语音信号频谱图');xlabel('频率Hz');ylabel('频率幅值');对加噪的语音信号进行去噪程序如下:fp=1500;fc=1700;As=100;Ap=1;(以上为低通滤波器的性能指标)wc=2*pi*fc/fs; wp=2*pi*fp/fs;wdel=wc-wp;beta=*;N=ceil((As-8)/wdel);wn= kaiser(N+1,beta);ws=(wp+wc)/2/pi;b=fir1(N,ws,wn);figure(3);freqz(b,1);(此前为低通滤波器设计阶段)——接下来为去除噪声信号的程序——x=fftfilt(b,y_z);X=fft(x,n);figure(4);subplot(2,2,1);plot(f,abs(y_zp));title('滤波前信号的频谱');subplot(2,2,2);plot(f,abs(X));title('滤波后信号频谱');subplot(2,2,3);plot(y_z);title('滤波前信号的波形')subplot(2,2,4);plot(x);title('滤波后信号的波形')%sound(x,fs,bits)%回放滤波后的音频设计滤波器:器常用的方法有:脉冲响应不变法和双线性变换法。

(完整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
以色噪声白化是一种常用的信号处理方法,主要用于去除图像中的噪声,提高图像的质量。

在matlab中,可以通过一系列操作实现色噪声白化的效果。

我们需要加载待处理的图像,并将其转换为灰度图像。

这样可以简化后续的处理步骤,并保留图像的主要信息。

接下来,我们可以使用matlab提供的滤波函数对图像进行滤波处理。

常用的滤波方法包括均值滤波、中值滤波和高斯滤波等。

这些滤波方法可以有效地去除图像中的噪声,并保持图像的细节。

在滤波之后,我们可以对图像进行色噪声白化处理。

色噪声白化的目标是使图像的颜色分布更加均匀,减少色彩偏差。

为了实现这个目标,我们可以使用直方图均衡化的方法。

直方图均衡化可以通过拉伸图像的亮度范围,使得图像的亮度分布更加均匀,从而改善图像的质量。

完成色噪声白化处理之后,我们可以对图像进行进一步的处理,如锐化、增强对比度等。

这些处理方法可以使图像更加清晰、鲜艳,增强视觉效果。

我们可以将处理后的图像保存到本地,并进行后续的分析和应用。

在保存图像时,建议选择无损压缩的格式,以保留图像的细节和质量。

通过使用matlab中的滤波和直方图均衡化等方法,可以实现色噪声白化的效果。

这种方法可以有效地去除图像中的噪声,并提高图像的质量。

无论是在科学研究还是在实际应用中,色噪声白化都具有重要的意义和价值。

希望本文对读者在使用matlab进行色噪声白化方面提供一些帮助和指导。

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

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

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

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

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

2.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 ) 的高斯分布序列。

S=wgn(1,m,10*log10(0.05)); %产生白噪声(均值为0,方差为0.05) 生成wav文件:
S=wgn(1,40000,10*log10(1));
S1=S/2;
wavwrite(S1,8192,16,'zaosheng.wav');%产生wav文件。

相关文档
最新文档