文章目录
- 前言
- 一、MATLAB仿真代码
- 二、仿真结果画图
- 总结
前言
本文给出带噪信号的时域和频域分析,指出频域分析在处理带噪信号时的优势。
首先使用MATLAB生成一段信号,并在信号上叠加高斯白噪声得到带噪信号,然后对带噪信号对其进行FFT变换,得出其频谱,并对其频谱进行分析,阐述加性高斯白噪声对信号频谱的影响。
一、MATLAB仿真代码
代码如下:
f1 = 50; % 余弦波1的频率
f2 = 100; % 余弦波2的频率
A1 = 0.7; % 余弦波的振幅
A2 = 1; % 余弦波的振幅
fs = 1000; % 采样率
Ts = 1/fs; % 采样时间间隔
L = 1500; % 信号长度,单位sample
t = (0:L-1)*Ts; % 时间向量
% 合成信号包含两个正弦波,幅值为0.7的50Hz正弦波和幅值为1的100Hz正弦波
s = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t);
% 信号加白噪声
x = s + 2*randn(size(t)); % 白噪声均值为零、方差为4
% 绘制带噪信号的时域波形。通过时域波形,难以辨认出有用信号。
figure()
plot(1000*t(1:100),x(1:100),'LineWidth',1.5)
grid on
title('被零均值随机噪声污染的信号')
xlabel('t/ms')
ylabel('x(t)')
% 将信号变换到频域
Y = fft(x);
% 计算信号的单边幅度频谱
P2 = abs(Y/L); % 计算双边幅度频谱P2
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1); % 基于双边幅度谱P2计算单边幅度频谱P1
% 绘制单边幅度频谱
f = fs*(0:(L/2))/L; % 频域的频率刻度,单位Hz
figure()
plot(f,P1,'LineWidth',1.5)
grid on
title('带噪信号x(t)的单边幅度谱')
xlabel('频率(Hz)')
ylabel('频谱幅度|P1(f)|')
二、仿真结果画图
时域波形图:
带噪信号的频谱(单边谱):
(1)时域分析:
从时域波形几乎看不出原始信号,也就是说信号被严重干扰了。
(2)频域分析:
观察带噪信号的频谱,可以发现:(1)带噪信号频率与预期相符,即与原始信号一致,因为加性高斯白噪声并不带来信号频移;(2)噪声导致幅值并不精确等于0.7和1。
总结
对于被噪声污染的信号,干扰严重时,我们几乎难以从时域波形看到期待的信号,此时,就需要借助频域分析,从频谱上将很容易发现信号的特征,这对我们做信号分析和提取都非常有帮助。