数字信号内插方法的python实现
内插指的是增加数字信号采样率的方法。
步骤:
- 插入零值样本(即在所需要插值的地方插入0)
- 低通滤波器滤波
–来自:理查德G.莱昂斯, D.李・富盖尔, RichardG.Lyons,等. 数字信号处理精要[M]. 机械工业出版社, 2016.
但是我发现这种方法会导致信号的幅值改变。n倍内插相当于把幅值缩小了n倍。所以应该加入第3个步骤:n倍内插在滤波之后信号的幅值乘n。
import numpy as np
import math
import scipy.signal as signal
import pylab as pl
import matplotlib.pyplot as pltsampling_rate=1000 # 采样率设置为1000Hz,内插之前的采样率为333Hz
t1=np.arange(0, 1.0, 1.0/sampling_rate) # 时间长度为1s
x1=np.sin(15.4*np.pi*t1)*8.9+np.sin(31*np.pi*t1)*35.9+np.sin(56*np.pi*t1)*29.3
plt.figure(figsize=(16,4))
plt.plot(t1,x1)
plt.plot(t1,x1, '*')
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
# x2 为内插之前的数据
t2=t1[::3]
x2=x1[::3]
plt.figure(figsize=(16,4))
plt.plot(t2,x2,"*")
plt.plot(t2,x2)
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
# x3 为零值内插修改后的数字信号
x3=x1.copy()
x3[1::3]=0;
x3[2::3]=0;
plt.figure(figsize=(16,4))
plt.plot(t1,x3,"*")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
# 放大局部信号
plt.figure(figsize=(16,4))
plt.plot(t1,x3,"*")
plt.xlim(0,0.1)
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
# 滤波器设置
b,a=signal.iirdesign(0.08, 0.1, 1, 40)
# x4 为低通滤波器滤波之后的数字信号
x4 = signal.filtfilt(b, a, x3)
plt.figure(figsize=(16,4))
plt.plot(t1,x4)
plt.plot(t1,x4,"*")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
# 蓝色为理论信号,红色为经过插值前两步之后的信号
plt.figure(figsize=(16,4))
plt.plot(t1,x1)
plt.plot(t1,x4,'r--')
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
可见滤波之后的信号幅值很大程度上被改变了。
# 蓝色为理论信号,红色为插值之后的信号
plt.figure(figsize=(16,4))
plt.plot(t1,x1)
plt.plot(t1,3*x4,'r--')
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.legend()
plt.show()
结论:
信号的零值内插方法需要经过三个步骤:
- 插入零值样本(即在所需要插值的地方插入0)
- 低通滤波器滤波
- 针对 n 倍内插每个信号值扩大 n 倍
数字信号内插方法的python实现相关推荐
- matlab信号内插,基于VC++和Matlab的数字信号内插处理系统
0引言目前,利用并行交替式(Parallalinterleaving)技术,超高速数字化示波器的实时采样速率已突破了10Gsa/s.按照Nyquist定理,这种系统的实时带宽可接近5GHz.在数字化示 ...
- python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...
Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...
- 复合数值积分方法以及Python程序实现
■ 前言 在 Composite Numerical Integration 中给出了三种复合数值积分方法它们分别是: Newton-Cotes Formulas 01三种方法的公式及其Python程 ...
- 用Alpha生成Trimp图的方法(python)
用Alpha生成Trimp图的方法(python) 文章目录: 一.Alpha图生成Trump图(方法一) 二. 一.Alpha图生成Trump图(方法一) __Author__ = 'Shliang ...
- python 取反_自从用了这招pandas 空数据处理方法,python编程速度提升了不少
今天为大家带来的内容是:自从用了这招pandas 空数据处理方法,python编程速度提升了不少 文章内容主要介绍了pandas 空数据处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工 ...
- Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略
Python:pmml格式文件的简介.安装.使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略 目录 pmml格式文件的简介 1.PMML结构 pmml安装 pmm ...
- python的变量名有哪些_【python字符串做变量名的方法有哪些?这些方法对python应用很重要】- 环球网校...
[摘要]python的功能都是建立在代码之上的,不过你知道python字符串做变量名的方法有哪些?这些方法对python应用很重要,如果你想学好python,那么本文内容一定要自己试试,毕竟实践出真知 ...
- 笨方法“学习python笔记之urlopen
最近在学习"笨方法"学python中,在习题41中发现了urlopen()函数,特意查了下官方资料,查资料最好查官方资料,最好不要做"百度君".urlopen( ...
- 笨方法“学习python笔记之字典
列表是线性存储,且可以随机访问,且是有序的,其访问可以通过索引来访问.而字典是另外一种存储数据,可以通过建立键和值的映射关系,就和查字典差不多,通过键就可以查找到相对应的值 字典创建 字典创建过程中每 ...
最新文章
- R语言中if else、which、%in%的用法
- IBM的医疗AI为何失败
- 融资2.75亿美元的老牌AR公司,倒了
- 使用CInternetSession和CHttpFile提取网页源码
- 为什么-1的补码是全1(11111111)?-128的补码是10000000?
- ITK:注册IO工厂RegisterIOFactories
- 猴子选大王c语言课程设计,【C/C++】猴子选大王
- 第8步 第2剑客 mybatis plugin 第三剑客 page helper csdn每天最多发多少文章 是20篇,刚刚才试了。2014
- Sublime Text 3插件安装方法
- 快速锁屏电脑快捷键_电脑小技巧
- [转载] 【Python-Numpy】numpy.random.randint用法
- Java学生管理系统-增删改查
- dojo实现省份地市级联报错(二)
- 数字图像处理课程设计-疲劳检测系统
- matlab模拟小球碰撞,在MATLAB中实现模拟小球上抛和反弹运动
- 数字金额转中文大写金额 - 数字大写转换
- 一位仁兄对于项目管理的精辟见解
- 27岁研究生毕业年龄大吗?
- springcloud中feign调用的权限认证
- wating for network configuration unity恢复
热门文章
- 苹果发布黄色版 iPhone 14,定价 5999 元起;大神李沐被曝离职投身大模型创业;Atlassian 裁员 |极客头条...
- 小萌新开始做题啦!----------相交链表
- tweepy抓取Twitter数据
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备...
- W ndows7蓝屏0x00000024,Win7蓝屏代码0x00000024修复方法
- excel表格拆分多个表如何操作
- python需要cpu还是显卡问题_买新电脑是cpu重要还是显卡重要?该怎么选择?
- 设计师常用的素材网站有哪个推荐
- “如果不是生活所迫,谁又愿意拿青春赌明天呢”一位年新30w测试工程师的自白
- 【Java习题程序】将int整数转化为int数组,不用转String。