信号-python:对一个波形做傅里叶变换,能得到整个频谱,怎么提取其中的频率分量呢?

问题描述

python:对一个波形做傅里叶变换,能得到整个频谱,怎么提取其中的频率分量呢?

import wave
import struct
import numpy as np

if name == '__main__':
data_size = 40000
fname = "test.wav"
frate = 11025.0
wav_file = wave.open(fname, 'r')
data = wav_file.readframes(data_size)
wav_file.close()
data = struct.unpack('{n}h'.format(n=data_size), data)
data = np.array(data)

w = np.fft.fft(data)
freqs = np.fft.fftfreq(len(w))
print(freqs.min(), freqs.max())
# (-0.5, 0.499975)

# Find the peak in the coefficients
idx = np.argmax(np.abs(w))
freq = freqs[idx]
freq_in_hertz = abs(freq * frate)
print(freq_in_hertz)
# 439.8975

这个是对于单个data_size,frate已知的情况,真实情况是未知,且有多个频率的信号。求解。。。

解决方案

对于单个频率的波形,取频谱的峰值,np.argmax()可以取到下标值,根据freq=下标*N/fs,获得频率值, 对于含有多个频率的波形,我是做一个区分,判断频谱中
振幅大于某个数,就为信号,小于某个数就为噪声。这样不准确,最好用信噪比判断,然后同样获取下标,获得频率值,相应还能得到幅度。

解决方案二:

看到傅立叶我就晕了。楼主帮顶一个!

解决方案三:

你这个是已知频率和幅度数组,通过傅里叶变换得到频谱的程序吗?

解决方案四:

我们需要一个已知频率数组和幅度数组,用STM32编程实现用示波器显示频谱,但是要自己写算法的程序,不知道你能帮我的忙?感激不尽

时间: 2024-10-22 07:43:50

信号-python:对一个波形做傅里叶变换,能得到整个频谱,怎么提取其中的频率分量呢?的相关文章

听歌识曲--用python实现一个音乐检索器的功能_python

听歌识曲,顾名思义,用设备"听"歌曲,然后它要告诉你这是首什么歌.而且十之八九它还得把这首歌给你播放出来.这样的功能在QQ音乐等应用上早就出现了.我们今天来自己动手做一个自己的听歌识曲 我们设计的总体流程图很简单: -----录音部分 ----- 我们要想"听",就必须先有录音的过程.在我们的实验中,我们的曲库也要用我们的录音代码来进行录音,然后提取特征存进数据库.我们用下面这样的思路来录音 # coding=utf8 import wave import pyau

用 Python 实现一个最简单的对象模型

本文讲的是用 Python 实现一个最简单的对象模型, 一个简单的对象模型 Carl Friedrich Bolz 是一位在伦敦国王大学任职的研究员,他沉迷于动态语言的实现及优化等领域而不可自拔.他是 PyPy/RPython 的核心开发者之一,于此同时,他也在为 Prolog, Racket, Smalltalk, PHP 和 Ruby 等语言贡献代码.这是他的 Twitter @cfbolz . 开篇 面向对象编程是目前被广泛使用的一种编程范式,这种编程范式也被大量现代编程语言所支持.虽然大

使用Python编写一个最基础的代码解释器的要点解析_python

一直以来都对编译器和解析器有着很大的兴趣,也很清楚一个编译器的概念和整体的框架,但是对于细节部分却不是很了解.我们编写的程序源代码实际上就是一串字符序列,编译器或者解释器可以直接理解并执行这个字符序列,这看起来实在是太奇妙了.本文会用Python实现一个简单的解析器,用于解释一种小的列表操作语言(类似于python的list).其实编译器.解释器并不神秘,只要对基本的理论理解之后,实现起来也比较简单(当然,一个产品级的编译器或解释器还是很复杂的). 这种列表语言支持的操作: veca = [1,

用Python编写一个简单的FUSE文件系统的教程_python

如果你是我的长期读者,那么你应该知道我在寻找一个完美备份程序,最后我写了一个基于bup的我自己的加密层. 在写encbup的时候,我对仅仅恢复一个文件就必须要下载整个巨大的档案文件的做法不甚满意,但仍然希望能将EncFS和 rdiff-backup一起使用来实现可远程挂载.加密.去重.版本化备份的功能. 再次试用obnam 后(啰嗦一句:它还是慢的出奇),我注意到了它有一个mount命令.深入研究后,我发现了fuse-python和fusepy,感觉用Python写一个FUSE文件系统应该挺简单

用Python编写一个国际象棋AI程序_python

最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来.你可以直接通读本文,或者去下载代码,边读边看代码.虽然去看看其他文件中有什么AI依赖的类也可能有帮助,但是AI部分全都在AI.py文件中. AI 部分总述 AI在做出决策前经过三个不同的步骤.首先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到几种).其次,它生成一个棋步树用来

关于 python 的一个自动登录脚本的问题

问题描述 关于 python 的一个自动登录脚本的问题 一个要等5秒之后才可以登录,有onclick() 函数的应该怎么做一个自动登陆的python脚步,哪个大神给我讲一下.万分谢谢. 这是网页源代码片段 function Clicked(){ if(sv1==1) document.form1.v6ip.value=myv6ip; if(osele!=1){ if(sv==2&&m46==1) v4serip=v6; open("http://"+v4serip+&q

Python 实现一个颜色色值转换的小工具_python

需求说明 公司的 UI 设计小哥,已经转用 Zeplin 很久了.Zeplin 的设计稿展示页面的颜色色值使用十进制的 RGB 表示的,在 Android 中的颜色表示大多情况下都需要十六进制的 RGB 表示.我的数学没有好到直接看到十进制就可以心算得到十六进制的结果,所以我需要一个工具,输入十进制的 RGB ,得到十六进制的色值,最好可以方便复制.  Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函

从使用Python开发一个Socket示例说到开发者的思维和习惯问题

今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的习惯,久了确实不好改.所以说,如果今天你认识到了,那么就从今天开始改,早改早受益,晚改痛苦一生. 先说一下今天的引子,那就是使用Python开发一个简单的Socket应用,就是一个client/server通信的小例子. 假设现在需要我们使用python开发一个socket的聊天应用,可能会遇到下面

一个专业做SEOer的必须建立自己长期的资源

其实SEO拼的就是数据,也叫拼的是资源.昨天跟一个做了一年的SEOer聊天,他说他没建立什么资源,这点让我感觉很不专业,个人觉得一个想做长期SEO的人是一定要建立和积累部分资源的,方便我们日后在做网站的过程中比别人更有优势,加速我们的排名,从而在最短的时间赢在搜索引擎.因为这不是一个大鱼吃小鱼的时代,而是一个快鱼吃慢鱼的时代,所以做关键词排名也要速度快.比如中秋节你要把一个批发这样的词做上去,这个你就得提早做准备.用最短的时间最大效率的做上去,不然时机一过做上去了也没用,在这种突击排名的时候资源