深入解构magnitude_spectrum()

二话不说,现附上官方文档链接matplotlib.axes.Axes.magnitude_spectrum

magnitude_spectrum(self, x, Fs=None, Fc=None, window=None, pad_to=None, sides=None, scale=None, , data=None*, **kwargs)

作用:绘制幅度谱

功能:根据x计算幅度谱值,可由pad_to参数指定补零长度,指定截断采用的窗函数

参数:

x: 一维实数或复数向量或序列

Fs:标量值,采样率,默认是2

window:窗函数,默认汉宁窗

sides:枚举值,{'default', 'onesided', 'twosided'},实数数据默认单边,复数默认双边

pad_to:整数,补零个数,增加频谱密度

scale: 枚举值,{'default', 'linear', 'dB'},默认linear,而dB amplitude 算法(20 * log10)

Fc:中心频率

返回值:

spectrum: 频谱值,纵坐标

freqs:频率值,横坐标

以下进行数据读取及处理

def load_data():# 加载从USRP采样的IQ信号,load 1024 IQdataIQdata = np.fromfile('usrp_data_with_telosb.dat',dtype="float32",count=1024*2)# merge these data into complex formIQcomplex = map(complex,IQdata[0::2],IQdata[1::2])# change these data into complex typeIQcomplex = np.array(list(IQcomplex),dtype=complex)return IQcomplex

三种方法逐步解析

# 法一:暴力调包
plt.magnitude_spectrum(IQcomplex,Fs=10,Fc=2435,sides='twosided',scale='dB')
# 法二:采用mlab调包
fft_size = 1024
spec, freqs = mlab.magnitude_spectrum(IQcomplex[0:fft_size)], Fs=10, sides='twosided')
Fc = 2435
freqs += Fc
Z = 20.*np.log10(spec)
plt.plot(freqs,Z)
# 法三:用numpy解决,从底层FFT看起
def cal_mag(IQcomplex,fft_size=1024):
#     fft_size = 1024IQcomplex_1024 = np.asarray(IQcomplex[0:fft_size])# 加窗,不然频谱现象不明显result, windowVal = mlab.apply_window(IQcomplex_1024,window=mlab.window_hanning,axis=0,return_window=True)# 进行fftresult = np.fft.fft(result, n=fft_size)# 参数1:FFT点数,参数2:采样周期,即1/采样频率freqs = np.fft.fftfreq(fft_size, 0.1)# 以下代码的作用貌似是调整双边的位置freqcenter = fft_size//2freqs = np.concatenate((freqs[freqcenter:],freqs[:freqcenter]))result = np.concatenate((result[freqcenter:],result[:freqcenter]),0)# 貌似是归一化result = np.abs(result)/np.abs(windowVal).sum()# 加上中心频率Fc = 2435freqs += Fc # 取对数坐标spec = 20.*np.log10(result)return spec,freqsIQcomplex = load_data()
mag, freqs = cal_mag(IQcomplex)
plt.plot(freqs,mag)

USRP采样所得的IQ值作频谱图如下:

IQcomplex = load_data()
plt.figure(figsize=(6,10))
num = 20
for n in range(10):plt.subplot(5,2,n+1)IQcomplex_tmp = IQcomplex[(n+num)*1024:(n+1+num)*1024]mag, freqs = cal_mag(IQcomplex_tmp)plt.plot(freqs,mag)
#     plt.title('{}'%n)

转载于:https://www.cnblogs.com/WindyZ/p/magnitude_spectrum.html

深入解构magnitude_spectrum()相关推荐

  1. 如何充分利用JavaScript(ES6)中的解构功能

    by Joanna Gaudyn 乔安娜·高登(Joanna Gaudyn) Destructuring was a new addition to ES6. It took inspiration ...

  2. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......

    2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法,  后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法:  1.         定义变 ...

  3. (6)解构赋值的用途

    解构赋值的用途 1.交换变量的值 var a = 100; var b = 200; var t; t = a; a = b; b = t; //解构赋值的写法完成[ES6交换变量的值] var x ...

  4. 【ES6】变量的解构赋值

    [ES6]变量的解构赋值 一.什么叫解构赋值? 二.解构赋值有哪些分类?写法? 1)对数组的解构赋值 2)对对象的解构赋值 3)对字符串的解构赋值 4)对数值和布尔值的解构赋值 5)对函数参数的解构赋 ...

  5. 用深度学习模型,解构并重构人类思维

    来源:人机与认知实验室 概要:人类的知识,往往由事实 fact 和规则 rule 组成,而且人类习惯于用简练的词汇,来表达事实和规则.所以,维特根斯坦认为,人类思维受制于语言结构,语言的界限决定思维的 ...

  6. 业务代码解构利器--SWAK

    简介 业务的不断发展.商品类型的不断增多.不断添加的业务需求使得闲鱼的代码出现"bad smell"--平台代码和业务代码耦合严重难以分离:业务和业务之间代码交织缺少拆解.这也是行 ...

  7. ECMAScript6变量的解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring) ###数组的解构赋值 //ES5 //var a = 1; //var b = 2; //va ...

  8. ES6数组的解构赋值( 中)

    数组的解构赋值的用法有以下几情况要注意: 1.结构赋值可以嵌套的 数组的解构赋值的用法有以下几情况要注意:1.结构赋值可以嵌套的 var [ a,b,[ c1,c2 ] ] = [ 1,2,[ 3.1 ...

  9. ECMA Script 6新特性之解构赋值

    1.基本概念用法 1.1解构赋值:ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值. var a = 1; var b = 2; var c = 3; /*上述赋值语句用解构赋值为*/ v ...

  10. ES6解构赋值学习总结

    ES6提供了解构赋值的方式,这样子在赋值多个变量或者进行注释时可以方便很多,不同场景下也有很多新的应用,个人常使用的有数组的解构赋值,对象的解构赋值和函数参数的解构赋值,函数参数的解构赋值之前总结过, ...

最新文章

  1. 全球研发开支排名:亚马逊第一,BATJ排不上号!
  2. 使用Canvas进行验证码识别
  3. idea中构造器和toString方法覆写的快捷键
  4. MySQL(七)关于MySQL不同版本下临键锁锁定范围不同
  5. Express学习笔记(基本使用,中间件,模块化路由,请求处理)
  6. 求两个字符串的最长的连续公共子串
  7. AD20软件安装详细教程
  8. Unity中文API参考手册
  9. 大数据导论答案_《数据科学与大数据通识导论》题库及答案
  10. 单引号、双引号、三引号用法
  11. python批量提取视频帧
  12. windows下安装GVM
  13. 【微信小程序-原生开发】实用教程20 - 生成海报(实战范例为生成活动海报,内含生成指定页面的小程序二维码,保存图片到手机,canvas 系列教程)
  14. 大数据起步之wormhole初识
  15. 安装taro踩到小坑
  16. 转行产品经理,必看的避坑指南!
  17. 【065】Spring Cloud服务注册中心双节点集群,使用Eureka实现,以IP方式配置,基于Spring Cloud的Camden SR5版本
  18. Unity抗锯齿设置
  19. 临沂吴忠军新浪微博主页
  20. Spring在线文档

热门文章

  1. 直播首屏耗时400ms以下的优化实践
  2. mysql会话杀不掉_SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
  3. arm-linux cannot find -lgcc_s,arm-linux-gcc编译avrdude时报错: cannot find -lncurses
  4. easydarwin 安装_在Linux平台上搭建EasyDarwin,编译代码并简单部署
  5. 代发核心期刊骗局_警惕“代发论文”骗局,落入骗子圈套
  6. java案例代码12--随机码--静态类的使用
  7. .describe() python_Stataamp;Python | 分别实现多元线性回归
  8. docker给php装swoole,制作php+swoole的Docker环境
  9. elasticsearch 请求全部数据
  10. CentOS下使用TUN/TAP虚拟网卡的基本教程