能量检测
能量检测法是一种比较简单的信号检测方法[1], 属于信号的非相干的检
测, 直接对时域信号采样值求模,然后平方即可得到;或利用 FFT 转换到频域,
然后对频域信号求模平方也可得到。它无需知道检测信号的任何先验知识,对信
号类型也不作限制。
实际上,能量检测是在一定频带范围内作能量积累,如果积累的能量高于一
定的门限,则说明信号的存在;如果低于一定的门限,则说明仅有噪声。能量检
测的出发点是信号加噪声的能量大于噪声的能量。能量检测方法对信号没有作任
何假设,是一种盲检算法。
此代码“利用 FFT 转换到频域,然后对频域信号求模平方”方法来实现对
用户的检测。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%生成调制信号
fs=100;
%采样频率
fc=40;
fo=fs/20;
L=300;
%载频
%码率
%信号样本
t = (0:L-1)*1/fs;
%时间序列(时间轴)
xn=cos(8*pi*fc*t);
%产生一个幅值为 1 频率为 160HZ的余
弦信号
y = xn + randn(size(t));
%混入噪声信号 randn(size(t))生成与数
组 t 大小相同的随机数组
figure(1)
plot(t,y)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%进行能量检测
NFFT = 2^nextpow2(L); %找出大于等于 L 且最接近 L 的 2 的整数次
幂长度, 如 L=10 NFFT=16
Y = fft(y,NFFT)/L;
%进行 fft 变换(除以总采样点数,
是为了后面精确看出原始信号幅值)
f = fs/2*linspace(0,1,NFFT/2);
%频率轴(只画到 Fs/2 即可,由于 y
为实数,后面一半是对称的)
figure(2)
plot(f,2*abs(Y(1:NFFT/2)))
% 画出频率幅度图形,可以看出 120Hz
幅值大概为 1
注:对一个信号进行采样,采样频率是 fs,在满足采样频率的条件下,信号中的最高频率小
于 fs/2,所以在 FFT 之后的谱线是反映在-fs/2-fs/2 的信息,在 0-fs/2 之间是正频率的信息。
若信号长 N,在 FFT 变换之后,谱线之间的频率间隔为 df=fs/N,谱线是从直流(即 0 频率)
开始,所以正频率 0-fs/2 应对应的谱线为 1-N/2+1。一般谱分析中用
freq=(0:N/2)*df;
Y=abs(Y(1:N/2+1);
而 N/2+2-N 之间的谱线,在信号为实数时与 2-N/2 的谱线构成共轭对称,被称为负频率的
谱线,在幅值上与正频率相同,所以在实信号处理中负频率信息没有被利用;而当信号为复
数时,N/2+2-N 之间的谱线与 2-N/2 之间不构成共轭对称,这时正频率信息和负频率信息
都要被利用。
仿真图如下:
问题:还有加入不同信噪比SNR的情况如何实现?(可得结论,噪声少的时候更容易感知
用户)