def

短时傅里叶变换(Short Time Fourier Transform)原理及 Python 实现

我与影子孤独终老i 提交于 2020-11-24 04:43:06
原理   短时傅里叶变换(Short Time Fourier Transform, STFT) 是一个用于语音信号处理的通用工具.它定义了一个非常有用的时间和频率分布类, 其指定了任意信号随时间和频率变化的复数幅度. 实际上,计算短时傅里叶变换的过程是把一个较长的时间信号分成相同长度的更短的段, 在每个更短的段上计算傅里叶变换, 即傅里叶频谱. 短时傅里叶变换通常的数学定义如下: 其中, DTFT (Decrete Time Fourier Transform) 为离散时间傅里叶变换. 其数学公式, 如下所示:   其中, x(n) 为在采样数 n 处的信号幅度. ω ~ 的定义如下:   实现时, 短时傅里叶变换被计算为一系列加窗数据帧的快速傅里叶变换 (Fast Fourier Transform, FFT),其中窗口随时间 “滑动” (slide) 或“跳跃” (hop) 。 Python 实现   在程序中, frame_size 为将信号分为较短的帧的大小, 在语音处理中, 通常帧大小在 20ms 到 40ms 之间. 这里设置为 25ms, 即 frame_size = 0.025 ;    frame_stride 为相邻帧的滑动尺寸或跳跃尺寸, 通常帧的滑动尺寸在 10ms 到 20ms 之间, 这里设置为 10ms, 即 frame_stride = 0.01

python入门 -- 学习笔记4

半城伤御伤魂 提交于 2020-11-24 04:42:42
习题38:列表的操作 当你看到像 mystuff.append('hello') 这样的代码时,你事实上已经在 Python 内部激发了一个连锁反应。以下是它的工作原理: 1. Python 看到你用到了 mystuff ,于是就去找到这个变量。也许它需要倒着检查看你有没有在哪里用 = 创建过这个变量,或者检查它是不是一个函数参数,或者看它是不是一个全局变量。不管哪种方式,它得先找到 mystuff 这个变量才行。 2. 一旦它找到了 mystuff ,就轮到处理句点 . (period) 这个操作符,而且开始查看 mystuff内部的一些变量了。由于 mystuff 是一个列表,Python 知道mystuff 支持一些函数。 3. 接下来轮到了处理 append 。Python 会将 “append” 和 mystuff 支持的所有函数的名称一一对比,如果确实其中有一个叫 append 的函数,那么 Python 就会去使用这个函数。 4. 接下来 Python 看到了括号 ( (parenthesis) 并且意识到, “噢,原来这应该是一个函数”,到了这里,它就正常会调用这个函数了,不过这里的函数还要多一个参数才行。 5. 这个额外的参数其实是…… mystuff! 我知道,很奇怪是不是?不过这就是 Python 的工作原理,所以还是记住这一点,就当它是正常的好了

Python实现王者荣耀小助手(一)

陌路散爱 提交于 2020-11-24 04:42:31
简单来说网络爬虫,是指抓取万维网信息的程序或者脚本,Python在网络爬虫有很大优势,今天我们用Python实现获取王者荣耀相关数据,做一个小助手: 前期准备,环境搭建: Python2.7 sys模块提供了许多函数和变量来处理 Python 运行时环境的不同部分; urllib模块提供了一系列用于操作URL的功能,爬虫所需要的功能,基本上在urllib中都能找到,学习这个标准库,可以更加深入的理解后面更加便利的requests库; requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多,因为是第三方库,所以使用前需要cmd命令安装,pip install requests ; Python在GUI编程实现图形界面,Python 提供了多个图形开发界面的库,Tkinter,tkMessageBox; 首先获取英雄图片,代码如下: # -*- coding: utf-8 -*- # !/usr/bin/env python # @Time : 2018/6/15 17:12 # @Desc : # @File : KingGlory.py # @Software: PyCharm """ 导入库 """ import urllib import requests,sys """ 统一编码 """ reload(sys) sys

ES6之Spread Operater拷贝对象

安稳与你 提交于 2020-11-24 03:54:10
译者按: 对象拷贝和合并使用展开运算符(Spread Operator)很方便! 原文: Master Javascript’s New, Cutting-Edge Object Spread Operator 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 在Node v8.0.0中引入了对象展开运算符(object spread operator)(注:需要配合harmony标签使用),在此我用一篇博客来深入介绍一下。前端使用该语法需要引入 babel 插件 。 展开运算符(Spread Operator) 展开运算符将所有可枚举的属性从一个对象展开到另一个对象去。我们来举一个例子: const obj1 = { c: 3, d: 4 }; const obj2 = { a: 1, b: 2, ...obj1 }; console.log(obj2); // -> { a: 1, b: 2, c: 3, d: 4 } obj1 的所有属性被展开到 obj2 中去。 一个很好的使用场景就是深度拷贝一个对象: const obj = { a: 123, b: 456 }; const objCopy = { ...obj }; console.log(objCopy); // -> { a: 123, b: 456 }

python常见的加密解密

天大地大妈咪最大 提交于 2020-11-24 03:40:00
1 # !/usr/bin/env python 2 3 ''' 4 5 Python Crypto Wrapper - By Chase Schultz 6 7 Currently Supports: AES-256, RSA Public Key, RSA Signing, ECC Public Key, ECC Signing 8 9 Dependencies: pyCrypto - https://github.com/dlitz/pycrypto 10 PyECC - https://github.com/rtyler/PyECC 11 12 13 Python Cryptography Wrapper based on pyCrypto 14 Copyright (C) 2011 Chase Schultz - chaschul@uat.edu 15 16 This program is free software: you can redistribute it and/or modify 17 it under the terms of the GNU General Public License as published by 18 the Free Software Foundation, either version 3 of the License, or

Python3单链表简单操作

懵懂的女人 提交于 2020-11-24 03:33:13
单链表是一种链式存取的数据结构,用一组地址任意的 存储单元 存放线性表中的 数据元素 。链表中的数据是以结点来表示的,每个结点的构成:元素( 数据元素 的映象) + 指针 (指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 class Node(): # 定义头结点 def __init__(self, data): self.data = data # 头指针为空 self.next = None # 头插法 class SNode(): def __init__(self): self.current_node = None def add_node(self, data): node = Node(data) node.next = self.current_node self.current_node = node def append_node(self, data): # 尾插法插入节点 node = Node(data) cur = self.current_node # 遍历链表直到头节点处停止遍历 while cur: if cur.next == None: break cur = cur.next cur.next = node def travel(self): ''' 遍历链表 :return: ''' cur =

如何对你的Python代码进行加密

梦想与她 提交于 2020-11-24 03:17:43
去年11月在PyCon China 2018 杭州站分享了 Python 源码加密,讲述了如何通过修改 Python 解释器达到加解密 Python 代码的目的。然而因为笔者拖延症发作,一直没有及时整理成文字版,现在终于战胜了它,才有了本文。 本系列将首先介绍下现有源码加密方案的思路、方法、优点与不足,进而介绍如何通过定制 Python 解释器来达到更好地加解密源码的目的。 由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密。社区中的一些声音认为这样的限制是事实,应该通过法律手段而不是加密源码达到商业保护的目的;而还有一些声音则是不论如何都希望能有一种手段来加密。于是乎,人们想出了各种或加密、或混淆的方案,借此来达到保护源码的目的。 常见的源码保护手段有如下几种: 发行 .pyc 文件 代码混淆 使用 py2exe 使用 Cython 下面来简单说说这些方案。 1 发行 .pyc 文件 1.1 思路 大家都知道,Python 解释器在执行代码的过程中会首先生成 .pyc 文件,然后解释执行 .pyc 文件中的内容。当然了,Python 解释器也能够直接执行 .pyc 文件。而 .pyc 文件是二进制文件,无法直接看出源码内容。如果发行代码到客户环境时都是 .pyc 而非 .py 文件的话,那岂不是能达到保护 Python 代码的目的? 1.2 方法

Python-计算器

大憨熊 提交于 2020-11-24 03:13:34
#计算器开发需求 # #1、实现加减乘除及拓号优先级解析 #2、用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后, #必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 import re import functools def minus_operator_handler(formula): '''处理一些特殊的符号'''   minus_operator = re.split("-",formula)   calc_list = re.findall("[0-9]",formula)   if minus_operator[0] == '':#第一值肯定是负号     clac_list[0] = '-%s' % calc_list[0]   res = functools.reduce(lambda x,y:float(x) - float(y),calc_list)   print("\33[33;1m减号[%s]处理结果:\033[0m" % formula,res)   return res def remove_duplicates(formula):  

python中的__init__(self)是什么意思呢

我只是一个虾纸丫 提交于 2020-11-24 02:58:21
python中的__init__(self)是什么意思呢 init (self)这个时类的初始化函数 1 2 3 4 class Obj: def init (self): print 1 obj = Obj() #这时候__init__这个函数会被调用,self指obj这个对象。 如果解决了您的问题请采纳!如果未解决请继续追问 追问 请问obj=Obj() obj是类Obj的对象吗,Obj()就代表 init ()函数吗 追答 不是代表__init__()函数,而是代表会调用__init__()函数,就是创建对象时执行的第一个函数,一般会用来初始化对象。 Python中, init ()方法是所谓的对象的“构造函数”,负责在对象初始化时进行一系列的构建操作 假设有如下类: 1 2 class worker: pass 在Python中,对某个类实例进行成员赋值,可以创建不存在的成员: 1 2 3 >>>a=worker() a.pay=55000 a.name='Bob' 如果对于每一个worker类的实例对象,都要进行如此赋值的话,这个类会变得很难使用 另外,对于用于特殊场合的类,可能要求在对象创建时,进行连接数据库、连接FTP服务器、进行API验证等操作,这些初始化操作,都可以封装在__init__()方法中进行 __init__方法使用如下规则定义: 1 2 3 class

BST二分搜索树题目总结(都是很经典的递归)

爷,独闯天下 提交于 2020-11-23 11:34:25
315. Count of Smaller Numbers After Self 计算右侧小于当前元素的个数(逆序数) 图源: 慕课网 1. 原始题目 计算右侧小于当前元素的个数 给定一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1,0] 解释: 5 的右侧有 2 个更小的元素 (2 和 1). 2 的右侧仅有 1 个更小的元素 (1). 6 的右侧有 1 个更小的元素 (1). 1 的右侧有 0 个更小的元素. 2. 思路 暴力法,从左往右循环+内部循环:O(n^2)复杂度。正确解法: 二分搜索树BST算法 。 我们考虑能否在二分搜索树时每插入一个元素,就输出一个结果?比如题目中的例子:插入5,输出2;插入2,输出2...但是发现最开始的空树,我们插入5如何输出2?因为后面的元素还没有输入进来,没法确定这个2。自然想到将原数组取反:【1,6,2,5】,这时插入1,输出0;插入6输出1...( 每插入一个数,就返回当前比该结点小的节点数目 。)插入2,由于前面只有1比他小,输出1;最后插入5,前面有1和2比他小,输出2! 那如何利用BST呢?因为我们的解题思想是 每插入一个数