数字信号处理--相关函数
在信号处理中经常要研究两个信号的相似性,以及一个信号经过一段延迟后自身的相似性。
# 为什么要用相关函数表示相似度?
之前研究两个信号的相似性,我们会用归一化相关系数来表征:
其中定义相关系数:
当时,,两个信号完全相关,这是取最大
当 与完全无关时,
当 与存在某种程度的相似时,在 0 和 1 中间取值
但是相关函数存在局限性,如正余弦信号。正弦和余弦具有很大的相似性,但是计算
# 相关函数的定义
# x(n)
为能量信号
自相关函数:
互相关函数:
注:互相关函数不满足交换性,满足:
不满足的原因是,后面那个信号是延迟,所以互相关函数的还有的定义也可为:
# x(n)
为功率信号
研究可以发现:
即等同于信号自身的能量,若信号不是能量信号,趋于无限大(功率信号),其相关函数定义为:
进一步,若为周期信号,无限多个周期信号的求和,可用一个周期的求和平均代替
注:以上只是理论公式,实际中信号是有限长度的,实际代码公式见下
例题:令,其周期为 N,即,求的自相关函数。
周期功率信号:
# 相关函数的应用
相关函数的应用很广,噪声中的信号检测,信号中隐含周期性的检测,信号相关性的检测,信号时延长度的测量等。相关函数还是描述随机信号的重要统计量。
观察的信号由真正的信号和白噪声所组成,即。假定是周期的,周期为,的长度为,那么的自相关
式中:
- 和是和的互相关,一般噪声是随机的,所以这两项会非常小。
- 是噪声的自相关,就时有值。
- 若是周期函数,则则也是呈现周期变换的,分别在周期点上呈现峰值。
例题:设信号由正弦信号加均值为零的白噪声组成,正弦信号幅值为 1,白噪声的方差为 1,时域波形图无法发现有正弦信号,但是根据**相关函数的性质(若原信号中周期,则相关函数也是周期信号)**可以分辨出正弦信号。
N = 50000;
p1 = 1;p2 = 0.1; % 设置功率
f = 1/8;
Mlag =60; % 选择m的长度,注要远远小于N
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')
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Maltab 函数
# 均匀分布函数rand
通过直方图可以发现rand
产生的是均匀分布的数据,时域图中看不出。
代码:
clear ;
N = 5000;u = rand(1,N);
u_mean = mean(u); % 0.5094
power_u = var(u); % 0.0812
subplot 211; plot(u(1:100));grid on ;
subplot 212; hist(u,50);grid on ;
2
3
4
5
6
var
的数学公式:
产生一均匀分布、均值为零、功率为 0.01的白噪声信号。
其中是希望达到的功率,通过调整信号的幅值可达到:
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; % 0.0100
plot(u1(1:100));grid on;
2
3
4
5
6
7
# 高斯分布函数randn
产生零均值、功率为 0.1,服从高斯分布的白噪声信号
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')
2
3
4
5
6
7
8
9
10
11
# 线性卷积conv
令,求
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')
2
3
4
5
6
7
8
9
注意观察卷积后的长度为:
# 相关函数xcorr
在实际运算中,信号总是有限长,对应不同的值,对应相乘与求和的数据长度是不同的,即
若 m 越大,使用信号的有效长度就越短,计算出的的性能就越差,要求。理论公式中能量信号与功率信号的相关函数公式不同,代码中一般都除以数据的长度 N。
自相关:rx=xcorr(x,m,'flag')
参数:
flag=biased
有偏估计,分母是flag=unbiased
无偏估计,分母是
具体案例见相关函数的应用
这里调用程序存在两个问题?
为什么这里 flag 要用有偏估计?
m 为什么要远远小于 N?
xcorr 不能用,需要平移一段
>> x = [1,2,3] x = 1 2 3 >> xcorr(x) ans = 3.0000 8.0000 14.0000 8.0000 3.0000
1
2
3
4
5
6