数字信号处理–相关函数
在信号处理中经常要研究两个信号的相似性,以及一个信号经过一段延迟后自身的相似性。
为什么要用相关函数表示相似度?
之前研究两个信号的相似性,我们会用归一化相关系数来表征:
ρxy=[∑n=0∞x2(n)∑n=0∞y2(n)]1/2∑n=0∞x(n)y(n)
其中定义相关系数:
rxy=n=0∑∞x(n)y(n)
-
当x(n)=y(n)时,ρxy=1,两个信号完全相关,这是rxy取最大
-
当x(n) 与y(n)完全无关时,rxy=0,ρxy=0
-
当x(n) 与y(n)存在某种程度的相似时,rxy=0,∣ρxy∣在0和1中间取值
但是相关函数存在局限性,如正余弦信号。正弦和余弦具有很大的相似性,但是计算ρxy=rxy=0
相关函数的定义
x(n)
为能量信号
自相关函数:
rx(m)=n=−∞∑∞x(n)x(n+m)
互相关函数:
rxy(m)=n=−∞∑∞x(n)y(n+m)
注:互相关函数不满足交换性,满足:
rxy(m)=ryx(−m)
不满足的原因是,后面那个信号是延迟,所以互相关函数的还有的定义也可为:
rxy(m)=n=−∞∑∞x(n−m)y(n)
x(n)
为功率信号
研究rx(0)可以发现:
rx(0)=n=−∞∑∞x(n)2
即rx(0)等同于信号自身的能量,若信号不是能量信号,趋于无限大(功率信号),其相关函数定义为:
rxy(m)=N→∞lim2N+11n=−N∑Nx(n)y(n+m)
进一步,若x(n)为周期信号,无限多个周期信号的求和,可用一个周期的求和平均代替
rx(m)=N1n=0∑N−1x(n)x(n+m)
注:以上只是理论公式,实际中信号是有限长度的,实际代码公式见下
例题:令x(n)=sin(wn),其周期为N,即w=N2π,求x(n)的自相关函数。
周期功率信号:
rx(m)===N1n=0∑N−1x(n)x(n+m)=N1n=0∑N−1sin(wn)sin(wn+wm)cos(ωm)N1n=0∑N−1sin2(ωn)+sin(ωm)N1n=0∑N−1sin(ωn)cos(ωn)21cos(wm)
相关函数的应用
相关函数的应用很广,噪声中的信号检测,信号中隐含周期性的检测,信号相关性的检测,信号时延长度的测量等。相关函数还是描述随机信号的重要统计量。
观察的信号x(n)由真正的信号s(n)和白噪声u(n)所组成,即x(n)=s(n)+u(n)。假定s(n)是周期的,周期为M,x(n)的长度为N,那么x(n)的自相关
rx(m)==N1n=0∑N−1[s(n)+u(n)][s(n+m)+u(n+m)]rs(m)+rus(m)+rsu(m)+ru(m)
式中:
- rus(m)和rsu(m)是s(n)和u(n)的互相关,一般噪声是随机的,所以这两项会非常小。
- ru(m)是噪声的自相关,就m=0时有值。
- 若rs(m)是周期函数,则rx(m)则也是呈现周期变换的,分别在周期点上呈现峰值。
例题:设信号x(n)由正弦信号加均值为零的白噪声组成,正弦信号幅值为1,白噪声的方差为1,时域波形图无法发现有正弦信号,但是根据**相关函数的性质(若原信号中周期,则相关函数也是周期信号)**可以分辨出正弦信号。
N = 50000; p1 = 1;p2 = 0.1; f = 1/8; Mlag =60; u = randn(1,N); n = 0:N-1; s = sin(2*pi*f*n); x1 = u*sqrt(p1) + s ;rx1 = xcorr(x1,Mlag,'biased'); x2 = u*sqrt(p2) + s ;rx2 = xcorr(x2,Mlag,'biased');
subplot 221;plot(1:Mlag,x1(1:Mlag));grid on;xlabel('时域波形图') subplot 222;plot(rx1(Mlag+1:end));grid on;xlabel('相关函数') subplot 223;plot(1:Mlag,x2(1:Mlag));grid on;xlabel('时域波形图') subplot 224;plot(rx2(Mlag+1:end));grid on;xlabel('相关函数') set(gcf,'color','w')
|
Maltab函数
均匀分布函数rand
通过直方图可以发现rand
产生的是均匀分布的数据,时域图中看不出。
代码:
clear ; N = 5000;u = rand(1,N); u_mean = mean(u); power_u = var(u); subplot 211; plot(u(1:100));grid on ; subplot 212; hist(u,50);grid on ;
|
var
的数学公式:
V=N−11i=1∑N∣Ai−μ∣2
产生一均匀分布、均值为零、功率为0.01的白噪声信号u(n)。
其中P=0.01是希望达到的功率,通过调整信号的幅值可达到:
P=a=N(u(n)/a)2(u2(n)/(N∗P))=(σu2/P)
P = 0.01; N = 5000; u = rand(1,N); u = u - mean(u); a = sqrt(var(u)/P);u1 = u/a; power_u1 = u1*u1'/N; plot(u1(1:100));grid on;
|
高斯分布函数randn
产生零均值、功率为0.1,服从高斯分布的白噪声信号u(n)
P = 0.1; N = 5000; u = randn(1,N); a = sqrt(P); u = u*a; power_u = var(u); subplot 211 plot(u(1:100));grid on;xlabel('时域波形图') subplot 212 hist(u,50);grid on;xlabel('相关函数') set(gcf,'color','w')
|
线性卷积conv
令x(n)=(1,2,3,4,5),h(n)=(6,2,3,6,4,2),y(n)=x(n)∗h(n),求y(n)
x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h);
N=5;M=6;L=N+M-1; nx=0:N-1; nh=0:M-1; ny=0:L-1; subplot 131; stem(nx,x,'.'); xlabel('n'); ylabel('x(n)'); grid on; subplot 132; stem(nh,h,'.'); xlabel('n'); ylabel('h(n)');grid on; subplot 133; stem(ny,y,'.'); xlabel('n'); ylabel('y(n)'); grid on; set(gcf,'color','w')
|
注意观察卷积后的长度为:L=N+M−1
相关函数xcorr
在实际运算中,信号x(n)总是有限长,对应不同的m值,对应相乘与求和的数据长度是不同的,即
rx(m)=N1n=0∑N−1−mxN(n)xN(n+m)
若m越大,使用信号的有效长度就越短,计算出的rx(m)的性能就越差,要求m<<N。理论公式中能量信号与功率信号的相关函数公式不同,代码中一般都除以数据的长度N。
自相关:rx=xcorr(x,m,'flag')
参数:
flag=biased
有偏估计,分母是N
flag=unbiased
无偏估计,分母是N−m
具体案例见相关函数的应用
这里调用程序存在两个问题?
- 为什么这里flag要用有偏估计?
- m为什么要远远小于N?
- xcorr不能用,需要平移一段