Python信号处理:自相关函数(对标MATLAB中的autocorr)
摘要:Python中,更确切地说是numpy、scipy、statsmodels这些库中都有计算相关的方法。但numpy和scipy中的correlate方法的定义和MATLAB中的不同,导致计算结果不太一样。看上去MATLAB和statsmodels里都是用的标准的统计中的定义——皮尔森相关系数,而numpy和scipy中使用的是非正式的信号处理中的定义,需要均值为0,且计算结果需要归一化,才会得到差不多的答案。
系列目录
- Python信号处理:快速傅里叶变换(FFT),短时傅里叶变换(STFT),窗函数,以及滤波
- Python信号处理:自相关函数(对标MATLAB中的autocorr)
- Python信号处理:波束形成及目标方位估计,CBF、MVDR
- Python信号处理:cvxpy工具包求解稀疏约束优化问题
目录
- 用于对比的三个函数及结论
- 非零均值序列的自相关函数
- 零均值序列的自相关函数
- 消除时滞的影响
1. 用于对比的三个函数及结论
- numpy.correlate()
- statsmodels.tsa.api.stattools.acf()
- MATLAB中的autocorr()
结论:
autocorr(series, 'NumLags', N-1)
和statsmodels.tsa.api.stattools.acf(series, nlags=N-1)
是相同的。[不考虑其他的参数]。- 输入序列为0均值时,使用
numpy.correlate(series, series, mode='full')
,并对计算结果取后一半,得到的结果和前面两个方法基本相同。 - 输入序列不是0均值时,用
numpy.correlate
可能是不对的,因为信号处理下的非正式定义需要零均值条件,算出来的结果也很奇怪。
2. 非零均值序列的自相关函数
选择输入序列为y=[2, 3, 9, 6, 9],N为5,分别使用上述三种方法得到自相关函数,得到的结果如下:
1.
acf = smt.stattools.acf(y, nlags=N-1)
array([ 1. , 0.06915888, -0.05794393, -0.2271028 , -0.28411215])
acf = np.correlate(y, y, mode='full')
acf = acf[N-1:]
acf = acf / acf[0]
array([1. , 0.66824645, 0.55450237, 0.18483412, 0.08530806])
acf = autocorr(y,'NumLags', N-1);
acf = 1.0000, 0.0692, -0.0579, -0.2271, -0.2841
可以看出,smt.stattools.acf(y, nlags=N-1)
和autocorr(y,'NumLags', N-1)
的结果是一样的,但np.correlate(y, y, mode='full')
的结果差距较大,且所有的相关系数都是正的。
3. 零均值序列的自相关函数
仍使用输入序列y=[2, 3, 9, 6, 9],N为5,但对其进行0均值化处理,得到的结果如下:
- 和上一节的1.是一样的
y = y - y.mean()
acf = smt.stattools.acf(y, nlags=N-1)
array([ 1. , 0.06915888, -0.05794393, -0.2271028 , -0.28411215])
- 和上一节的2.不同,但变得和1.、3.相同
y = y - y.mean()
acf = np.correlate(y, y, mode='full')
acf = acf[N-1:]
acf = acf / acf[0]
array([ 1. , 0.06915888, -0.05794393, -0.2271028 , -0.28411215])
- 和之前的3.是一样的
y = y - mean(y);
acf = autocorr(y,'NumLags', N-1);
acf = 1.0000, 0.0692, -0.0579, -0.2271, -0.2841
可以看出,对于零均值化的序列,三种方法的结果都是一样的。
4. 消除时滞的影响
当序列很长时,如下图,三种方法计算的自相关函数都会随着时间慢慢减小。在smt.stattools.acf
中可以通过unbiased
参数进行修正。对于np.correlate
,可以用序列长度进行归一化,同样能起到消除时滞的效果。根据smt.stattools.acf
文档的描述,两种做法好像是一样的。当然MATLAB中肯定也是可以这么操作的。
对无噪声的sin序列,分别计算自相关函数,看看时滞的影响,以及消除时滞后的效果。
# 左上,np.correlate,未消除时滞
acf1 = np.correlate(x, x, mode='full')
acf1 = acf1[N-1:]
acf1 = acf1 / acf1[0]
ax[0, 0].plot(t, acf1)# 右上,np.correlate,消除时滞
acf1 = np.correlate(x, x, mode='full')
acf1 = acf1[N-1:]
acf1 = acf1 / np.arange(N, 0, -1)
acf1 = acf1 / acf1[0]
ax[0, 1].plot(t, acf1)# 左下,smt.stattools.acf,未消除时滞
acf2 = smt.stattools.acf(x, nlags=N-1, unbiased=False)
ax[1, 0].plot(t, acf2)# 右下,smt.stattools.acf,消除时滞
acf2 = smt.stattools.acf(x, nlags=N-1, unbiased=True)
ax[1, 1].plot(t, acf2)
Python信号处理:自相关函数(对标MATLAB中的autocorr)相关推荐
- C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数
C++内点法求解大规模线性规划问题--对标MATLAB中linprog函数 文章目录 C++内点法求解大规模线性规划问题--对标MATLAB中linprog函数 1. 项目场景 2. 约束的规范化 3 ...
- matlab 矩阵角标,MATLAB中的矩阵索引
MATLAB中的矩阵索引 作者:SteveEddins and Loren Shure 译:王茂春 利用矩阵的索引取出原矩阵的子集元素是一种有效的方式.MATLAB的多种索引类型不仅强大.灵活,而 ...
- m 文件 dll matlab 中调用_如何在matlab中调用python程序
现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...
- php调用python绘图程序_如何在matlab中调用python程序
现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...
- 在MATLAB中调用 Python
在MATLAB中调用 Python 您可以通过将 py. 前缀添加到 Python 名称,直接从 MATLAB 访问 Python 库.要调用 Python 标准库中的内容,请在 Python 函数或 ...
- matlab randi 函数,MATLAB中的randi函数
randi Pseudorandom integers from a uniform discrete distribution.来自一个均匀离散分布的伪随机整数 R = randi(IMAX,N) ...
- MATLAB中常见数字信号处理相关函数汇总
MATLAB中常见数字信号处理相关函数汇总 现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾. Waveform Generation(波形产生) chairp: 产生扫频余弦函数: ...
- 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结
Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...
- 全面对比 MATLAB、Julia、Python,谁在科学计算中更胜一筹?
数百种编程语言,各有优劣,各自也都有自己最为适用的场景.那么就科学计算领域而言,主流的 MATLAB.Julia.Python 会有哪些最为独特的优势呢?又存在哪些让开发者无力的缺陷?在本文中,我们将 ...
最新文章
- LeetCode19. Remove Nth Node From End of List 删除链表中的倒数第n个位置的元素
- UIUC教授季姮:叫我带头人,而不是女性带头人(附视频)
- opencv-contrib配置过程
- Linux下rpm包x86、i386、i486、i586、i686和x86_64 后缀含义
- 使用 go 实现 Proof of Stake 共识机制
- 看看牛人们是怎么评价编程语言的
- 新视野教育计算机题库,校园网.新视野教育计算机等级考试《二级公共基础》课后习题答案...
- unity3d___UGui中如何创建loading...进度条
- SLAM 学习与开发经验分享
- 滴水课后作业(1-5)
- jmeter 计数器_JMeter函数
- yolox-keras的源码,超越YOLOv5,可以用于训练自己的模型
- python打开txt文件找不到-Docker Python脚本找不到文件
- python糖尿病数据挖掘
- 原生JS实现动态表格的生成
- python视频补帧_我花了三天写了手机补帧神器
- hash+跳表,玩转Redis有序集合
- 基于简单MLP模型的加州房价预测
- db2怎么恢复误删除的数据_db2数据库被误删后 oracle数据库误删数据恢复
- USB电路EMC设计标准电路详解