传递函数_使用python计算麦克风阵列信号的传递函数

使用python写了一个测试麦克风阵列传递函数的demo,有需要的自取。该代码使用了第三方库ThinkDSP。

1. 传递函数

首先解释下什么是传递函数:

把具有线性特性的对象的输入与输出间的关系,用一个函数(输出波形的拉普拉斯变换与输入波形的拉普拉斯变换之比)来表示的,称为传递函数。

在麦克风阵列测试中,传递函数的输入和输出通常指标准测试信号和各麦克风接收到的信号。在音频信号中,传递函数通常指频域范围,所以需要对时域信号进行傅立叶变换(FFT)。

2. python中的传递函数

在scipy库中有一个函数类signal,其中有一个函数TransferFunction,该函数可用于计算两个变量之间的传递函数。

b86e9d23b9b8965f94e68482c67dd97d.png

具体使用方法参考以下官方解释:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.TransferFunction.html

3. python实现

需要的库:

import thinkdspimport waveimport numpy as npimport matplotlib.pyplot as pltfrom scipy import signal

思路:

生成两个chirp信号s1和s2,把s1当作输入信号,把s2当作从某个mic获得的输出信号。两个信号仅振幅有差异,s2的振幅是s1的2倍。所以根据信号,传递函数=输出/输入,各频率段的传递函数数值应该为2。

第一步,生成两个信号。信号频率范围100Hz~8kHz,采样率16kHz。傅立叶变换后的矩阵元素是复数形式,而传递函数计算需要取实部。

s1 = thinkdsp.ExpoChirp(100,8000,1) #振幅为1wav1 = s1.make_wave(1,0,16000)w1 = wav1.make_spectrum()fs = w1.fshs1 = w1.ampss2 = thinkdsp.ExpoChirp(100,8000,2) #振幅为2wav2 = s2.make_wave(1,0,16000)w2 = wav2.make_spectrum()hs2 = w2.amps

第二步,计算传递函数。

s12 = signal.TransferFunction(hs2,hs1)plt.figure('TransferFunction')plt.plot(fs,s12.num/s12.den)plt.ylim(0,3)plt.show()print('finish')

生成图像,整个频率段的 「输出/输入」传递函数值均为2,符合预设。

98a05304867b07728f787a016ed9cf04.png

注意,传递函数并不是简单的 输出/输入,其中做的信号处理都已经在函数TransferFunction中完成,可在参考文档中自行研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LNK2005 连接错误解决办法

nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2YAPAXIZ) 已经在 LIBCMTD.lib(new.obj) 中定义nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3YAXPAXZ) 已经在 …

中国数学竞赛史上最玩命的“赌徒”,为了国家荣誉,他不惜用生命换来了五次世界第一...

全世界只有3.14 % 的人关注了爆炸吧知识知识君今天,要跟大家介绍的是,北大历史上首位被授予博士学位的人,深受癌症折磨的同时还带领着中国学子连续5次站上世界顶端的人,他的故事,他的品格,值得被所有人记住…

33条C#、.Net经典面试题目及答案[zt]

本文集中了多条常见的C#、.Net经典面试题目例如“.NET中类和结构的区别”、“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希望能对学习C#、.Net的读者有所帮助。 1, 请你说说.NET中类和结构的区别? 答:结构和类…

控制用户的访问之权限、角色【weber出品必属精品】

权限的作用 限制用户对数据的访问 权限的分类 1. 系统权限:能够存取数据库的权限 2. 对象权限:操作数据库对象的内容 系统权限 1.1 如何创建用户: SQL> create user test default tablespace users identified by test;用户已创建。 1…

javq接口_Java为什么要使用接口_java接口怎么使用

Java接口是什么Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。接口(英语:Interface)&am…

[(转)hystar整理]Entity Framework 教程

预备知识 2 LINQ技术 2 LINQ技术的基础 - C#3.0 2 自动属性 2 隐式类型 2 对象初始化器与集合初始化器 3 匿名类 3 扩展方法 4 Lambda表达式 4 .NET中的数据访问 4 DataSet方案 5 改进的的DataSet方案 5 手写代码通过ADO.NET2…

Exchange中的数据库文件

Exchange中的数据库文件Exchange中的数据库文件是edb文件、stm文件和众多的log文件组成.其中以edb结尾的文件是数据库文件.以stm结尾的是流数据文件,以log结尾的是事物日志文件.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />E…

13岁上中科大,17岁攻读哈佛博士,“天才”尹希的开挂人生

全世界只有3.14 % 的人关注了爆炸吧知识2013年美国斯隆基金会(Alfred P. Sloan Foundation)颁发的美国斯隆研究奖获得者尹希&#xff0c;31岁哈佛最年轻的华人教授&#xff0c;获2017年“豪华版诺贝尔奖”之称的科学突破奖-物理学新视野奖&#xff0c;这年唯一的获奖华裔。知识…

强制升级?!.NET Core 2.1容器镜像将从Docker Hub中删除

前言.NET Core 2.1将于2021年8月21日结束支持&#xff0c;本来应该没什么影响&#xff0c;该怎么用继续用得了。但是&#xff0c;如果你在生产环境使用了.NET Core 2.1容器镜像&#xff0c;那就要注意了&#xff0c;从8月21日开始&#xff0c;.NET Core 2.1容器镜像将不再在Doc…

浅谈云计算核心技术

云计算一个高大上的名字&#xff0c;现在我也准备开始学习了&#xff0c;今天看了一本云计算的普及性书籍&#xff0c;将云计算的一些核心技术做一个简要的概括吧。虚拟化技术云计算跟虚拟化不能等同&#xff0c;有位专家说过&#xff0c;虚拟化提供了很好的底层技术平台&#…

“史上“最疯狂”的顶级数学家,看完后忍不住感慨太神了”

▲ 点击查看说起世界上最顶级的数学家&#xff0c;你的脑海中会浮现的&#xff0c;大概是欧拉、高斯、香农等数学巨匠。但是要说起成就和神秘性兼备的&#xff0c;一定就是——称为印度之子的——拉马努金。1887年12月22日&#xff0c;拉马努金出生在印度一个穷困潦倒的家庭&am…

JavaScript 游动层onmouseover

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetGB2312"> <title>学生信息系统</title> <script language"javascript"> var showInfo new function () { this.showLayer func…

.NET 6 新特性 —— Random.Shared

.NET 6 新特性 —— Random.SharedIntro最近微软发了一篇 .NET 6 性能提升的博客文章&#xff0c;里面提到了很多有趣的东西&#xff0c;其中有一个是 Random.Shared这是一个只读的静态属性&#xff0c;并且是一个线程安全的对象&#xff0c;这个东西可以帮助我们简化 Random 对…

《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 简化字符串的translate方法的使用...

检查字符串中是否包含某字符集合中的字符 任务&#xff1a; 检查字符串中是否出现了某个字符集合中的字符 解决方案&#xff1a; 方案一&#xff1a; import itertoolsdef containAny(seq,aset):for item in itertools.ifilter(aset.__contains__,seq):return Truereturn False…

mysql高级查询 二_MySQL高级查询(二)

EXISTS 和NOT EXISTS子查询EXISTS子查询语法:SELECT ……… FROM 表名 WHERE EXISTS (子查询);例:SELECT studentNo AS 学号,studentResult 成绩 FROM resultWHERE EXISTS(/*查询LOgic Java最后一次考试成绩大于80的记录*/SELECT * FROM result WHERE subjectNo(SELECT subject…

What's blocking my lock? 转载

原文地址 &#xff1a;http://www.orafaq.com/node/854 Create a blocking lock To begin, create a situation where one user isactively blocking another. Open two sessions. Issue the following commands inSession 1 to build the test table: SQL> create table ts…

致家长:疫情期间教育好自己的孩子,就是你最重要的事业!

全世界只有3.14 % 的人关注了爆炸吧知识疫情危机&#xff0c;却也是教育的契机。现在孩子呆在家里&#xff0c;老师管不了孩子&#xff0c;却也正是家长重新认识父母之责的契机。家长才是孩子的第一任老师&#xff0c;家长的言传身教、一举一动都影响着孩子成长。孩子是你的唯一…

linux 安全审计

1,创建工作目录mkdir /usr/local/proxy/vi proxy#!/bin/bashTmpfilemktempUser$USERIp${SSH_CLIENT%% *}Date"date %Y-%m-%d"Logfile"/var/log/myaudit/${Date}_${User}_$Ip.log"exec /usr/bin/script -a -f -q $Logfile2 修改/etc/profilevi /etc/profile…

设计模式之访问者

访问者模式介绍访问者模式能将算法与其所作用的对象隔离开来。访问者模式建议将新行为放入要给名为访问者的独立类中&#xff0c;而不是试图将其整合到已有类中。它允许你在不修改已有代码的情况下向已有类层次结构中增加新的行为。需要执行操作的原始对象将作为参数被传递给访…

mysql没有东西的商品_MYSQL 对商品表没有主图的数据调整为下架的SQL脚本

在实际的场景中&#xff0c;存在一些商品&#xff0c;没有主图的信息&#xff0c;但是商品跟对应价格都是上架的&#xff0c;这时候用户叫你&#xff0c;把一些商品没有主图的&#xff0c;跟对应的价格都弄为下架&#xff0c;这时候你该如何处理&#xff1f;&#xff1f;在商品…