使用Matlab实现高噪声信号的FFT的频谱分析
在实际的系统中,噪声可以说是无处不在,
首先生成一个包含两个频率的原始信号,f1为50hz,f2位833hz,
采样频率为fs=6400,采样点数为N=1024。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。
原始信号
fs=6400;
t=0:1/fs:0.6;
f1=50;
f2=833;
x=sin(2pif1t)+sin(2pif2t);
利用mathlab的plot函数输出波形,如图:
原始信号FFT结果
对上面信号进行fft变换:
y=fft(x,N);输出fft的频谱如下图:
可以看出,在50hz和833hz的频点上,信号幅值为明显的峰值。
加噪信号
我们利用mathlab的randn函数,为
x=x+randn(1,length(x));
randn函数是产生均值为0,方差 σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。加上噪声后,
原始信号波形如下:
加噪信号FFT结果
再次进行fft变换,结果如下:
从图中可以看到随机噪声对频谱的识别影响并不大。
其他加噪函数
在mathlab中,噪声函数还有正态分布随机数的函数normrnd,normrnd和randn中均适用于生成正态分布的随机数,区别在于normrnd可以自己指定均值MU和方差sigma。而randn生成的是标准的正态分布(即MU=0,sigma=1)。
我们选择x=x+normrnd(0,4,1,length(x))对原始信号加入噪声:
加噪波形为:
在时域图行,基本上已经看不出什么波形了
再次做FFT变换,基于fft的对称性,我们只看前一半波形,
可以看出,原始波形的频率还是可以识别出来的。如果再经过一定的数字滤波,波形会更清晰。