做个备份,对 numpy 不熟,每次都找函数找半天。

代码里分几块:

1. 从 argc[1] 的文档中读取数据,并转化为 float。文档中有 2001 行,第一行为头,后面 2000 个是采样数据加换行。

2. wd[] 是我这里用的窗函数。是我们某产品里用的窗,参考下面一行 c:

r[p]=s[p] *(0.3125-0.46875*std::cos(*PI*p/len)+0.1875*std::cos(*PI*p/len)-0.03125*std::cos(*PI*p/len));//FDMS_1 Window

3. 使用 numpy 进行 fft。

4. 找出最大和次最大,然后估算真实最大。

5. 画图。

#!/usr/bin/env python
# -*- coding: utf-8 -*- import sys
import numpy as np
import matplotlib.pyplot as pl points1 = 2000 if len(sys.argv) == 1:
print "error, no txt file"
exit(1) fp = open(sys.argv[1], 'r')
s = fp.readline() samples=[]
i = 0
wd=[]
while i < 2000:
wd.append( 0.3125 - 0.46875 * np.cos ( 2 * np.pi * i / 2000 )
+ 0.1875 * np.cos( 4 * np.pi * i / 2000 )
- 0.03125 * np.cos( 6 * np.pi * i / 2000 ) )
s = fp.readline()
s = s.strip('\n')
s = s.strip('\r') if s:
fl = float(s)*wd[i]
samples.append(fl)
# print fl
else:
break i = i + 1 dft_a = np.fft.fft(samples)
dft_a_abs = np.fft.fftshift(abs(dft_a)) * 2 / 2000 idx = np.argmax(dft_a_abs)
if dft_a_abs[idx - 1] > dft_a_abs[ idx + 1] :
idx = idx - 1 y=dft_a_abs[idx]
y2=dft_a_abs[idx+1] beta = (y2-y)/(y2+y)
alpha = 3.5*beta; rms=(y+y2) * (3.43612+0.85434*pow(alpha,2)
+ 0.11871*pow(alpha,4) ) / 2 / 1.4142135623 freq = (idx+alpha+0.5)*1000/2000; print rms, freq axis_a = np.linspace(-points1/2, points1/2-1, num=points1)
pl.subplot(121)
pl.plot(axis_a,dft_a_abs)
pl.axis([95, 105, 0, 0.05]) pl.subplot(122)
axis_b = np.linspace(0,2000,2000)
pl.plot(axis_b,wd)
pl.show()

numpy 傅立叶得到幅值和频率的更多相关文章

  1. (DDS)正弦波形发生器——幅值、频率、相位可调(二)

    (DDS)正弦波形发生器--幅值.频率.相位可调(二) 主要关于调相方面 一.项目任务: 设计一个幅值.频率.相位均可调的正弦波发生器. 频率每次增加10kHz 相位每次增加 PI/2 幅值每次增加两 ...

  2. (DDS)正弦波形发生器——幅值、频率、相位可调(一)

    (DDS)正弦波形发生器--幅值.频率.相位可调 一.项目任务: 设计一个幅值.频率.相位均可调的正弦波发生器. 频率每次增加1kHz. 相位每次增加 2*PI/256 幅值每次增加两倍 二.文章内容 ...

  3. FFT之频率与幅值的确定(转)

    FFT之后得到的是什么数 FFT之后得到的那一串复数是波形对应频率下的幅度特征,注意这个是幅度特征不是复制,下面要讲两个问题:1.如何获取频率,2.如何获取幅值 获取频率 FFT变换如何获取频率?傅里 ...

  4. 统计numpy数组中每个值出现的个数

    统计numpy数组中某一个值或某几个值出现的个数:sum(data==4) # 统计出现了几个cluster include0Cluster = sum(res == 0) include1Clust ...

  5. 统计numpy数组中每个值的个数

    import numpy as np from collections import Counter data = np.array([1.1,2,3,4,4,5]) Counter(data) #简 ...

  6. Matlab绘制幅值谱和相位谱

    1. 对于直接给出频响函数的情况 这里以滑动平均的频响函数作为例子,滑动窗口为[0, 4]. 上式中M2=4. >> w=0:0.001:2*pi; >> h1=1-exp(- ...

  7. numpy Array[:,]的取值方法

  8. 信号处理基础概念比较----频谱vs功率谱vs能谱

    频谱: 对动态信号在频率域内进行分析,分析的结果是以频率为坐标的各种物理量的谱线和曲线,可得到各种幅值以频率为变量的频谱函数F(ω).频谱是个很不严格的东西,常常指信号的Fourier变换.频谱分析中 ...

  9. 基于DDS的任意波形发生器

    实验原理 DDS的原理 DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器,也可叫DDFS. DDS是从相位的概念直接合成所需波形的一种频率合成技术. ...

随机推荐

  1. 同一个账号启动两个resin而要求使用不同jdk的解决方法

    天,一个老同事问起这样一个问题,起因是他们的系统由于某些原因原有的部分模块不能运行在新的jdk下,所以需要启动两个resin并使用不同jdk.由 于是要开机自动启动,因此启动的账号还需要是同一个.这样 ...

  2. android Apk打包过程概述_android是如何打包apk的

    流程概述:1.打包资源文件,生成R.java文件2.处理aidl文件,生成相应java 文件3.编译工程源代码,生成相应class 文件4.转换所有class文件,生成classes.dex文件5.打 ...

  3. 抢票季:吐槽12306 & 分享抢票经验

    又是一年一度的春运抢票季,不管你是北上.南下或者东进,在外漂泊了一年,有钱没钱总是要回家过年的. [图片来源于网络] 吐槽:12306抢票的悲伤 据说12306改版了,新版本里面除了UI这些面儿上的改 ...

  4. spring mvc 返回乱码SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题

    原文地址:https://www.cnblogs.com/fzj16888/p/5923232.html 先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文 ...

  5. Chart:ECharts

    ylbtech-Chart:ECharts ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome, ...

  6. dcm4chee 修改默认(0002,0013) ImplementationVersionName

    dcm4chee-2.17.3-psql\server\default\lib\dcm4che.jar ----org\dcm4che\Implementation.properties dcm4ch ...

  7. Service 简介 启动方式 生命周期 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. 3D视频的播放

    3D视频的播放 人眼产生立体效果的条件有两个: 1.须要左右眼两路影像,这两路影像是不同的.具有正确的视差: 2.进入左右眼的影像要全然分离.左影像进左眼,右影像进右眼. 第一条是对3D视频源提出的要 ...

  9. 使用 Edit + MASM 5.0 编译器 + Linker 连接器

    其实这种方式是很简单的,只是很麻烦,因为简单而且麻烦, 所以我采用尽可能的将截图传上来,然后稍加注解的方式进行介绍, 软件准备: 需要 MASM 5.0 或者以上的汇编编译器 首先,是要编辑汇编源代码 ...

  10. MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...