用python生成正玄波信号源码解析
一 前记
项目需要生成不同频点的正玄波信号,没找到现成的软件,只能自己写一个了。顺便温习一下python。
二 源码解析:
#!/usr/bin/python
import numpy as np
from scipy import signal
import wave
import struct
import sys num_samples = 48000
sampling_rate = 48000.0
amplitude = 16000
comptype = 'NONE'
compname = 'not compressed'
nchannels = 1
sampwidth = 2
FILE_NAME = '' def createSine(frequency,frequency1,play_time):
# generate the sine wave
new_wave = [np.sin(2 * np.pi * frequency * x/sampling_rate) + np.sin(2 * np.pi * frequency1 * x/sampling_rate) for x in range(num_samples * play_time)]
writeWave(new_wave) def createWave(frequency, frequency1, wave_type, play_time):
if wave_type == 'sine':
createSine(frequency,frequency1,play_time)
else:
print('Please type in only waveforms from this list! (sine, saw, triangle, square)') def writeWave(created_wave):
file = FILE_NAME
nframes = num_samples
wav_file = wave.open(file, 'w')
wav_file.setparams((nchannels, sampwidth, int(sampling_rate), nframes, comptype, compname))
for s in created_wave:
# struct.pack with the parameter 'h' means that we're
# writing the data as binaries, not just the numbers.
# 'h' stands for hexadecimal.
# This allows for music players to read the data.
wav_file.writeframes(struct.pack('h', int(s*amplitude))) def printSuccessful(wave_type, frequency,frequency1, play_time):
print('File \'' + FILE_NAME + '\' created!\n' +
'Wave Type: ' + wave_type + '\n' +
'Frequency_one: ' + frequency + "hz\n"+
'Frequency_two: ' + frequency1 + "hz\n"+
'Play Time: ' + play_time + ' seconds') def main(wave_type, frequency, frequency1,play_time, file_name):
frequency_Float = float(frequency)
frequency_Float1 = float(frequency1)
wave_type_Str = str(wave_type)
play_time_Int = int(play_time)
file_name = str(file_name)
global FILE_NAME
if len(file_name) < 4:
print('your specified filename: \'' + file_name + '\' is too short. The file name must end in \'.wav\'.\n Do you want me to change your file name to end in \'.wav\'? (y/n)')
answer = input()
if answer == 'y':
FILE_NAME = file_name + '.wav'
createWave(frequency_Float,frequency_Float1,wave_type_Str, play_time_Int)
printSuccessful(wave_type, frequency, frequency1,play_time)
elif answer == 'n':
print('Please press a key to exit.')
input()
else:
FILE_NAME = file_name
createWave(frequency_Float, frequency_Float1, wave_type_Str, play_time_Int)
printSuccessful(wave_type, frequency, frequency1,play_time) if __name__ == '__main__':
main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4],sys.argv[5])
运行结果:
➜ wave-generator git:(master) ✗ py tone_wave_generator.py sine 900 1800 10 out26.wav
File 'out26.wav' created!
Wave Type: sine
Frequency_one: 900hz
Frequency_two: 1800hz
Play Time: 10 seconds
三 结果分析
生成的wav文件波形图:

对应的频谱图

用python生成正玄波信号源码解析的更多相关文章
- 用Python生成组织机构代码,附源码
#!/usr/bin/python import random def haoma(): ww = [3,7,9,10,5,8,4,2]#suan fa yin zi cc = [] dd=0 for ...
- MATLAB实现连续周期信号的频谱分析(正余弦波信号举例)
关于MATLAB实现连续信号的频谱分析,以正余弦波信号频谱分析为例分析如下: 1.含有频率f ,2f和3f的正弦波叠加信号,即: 其中,f =500Hz.试采用Matlab仿真软件对该信号进行频谱分析 ...
- 谷歌BERT预训练源码解析(一):训练数据生成
目录预训练源码结构简介输入输出源码解析参数主函数创建训练实例下一句预测&实例生成随机遮蔽输出结果一览预训练源码结构简介关于BERT,简单来说,它是一个基于Transformer架构,结合遮蔽词 ...
- Python3.7 练习题(-) 如何使用Python生成200个优惠卷(激活码)
# 如何使用Python生成200个优惠卷(激活码) import random import string # string.ascii_letters 26个大小写 # -9数字 # 获得激活码中 ...
- 『Python』源码解析_从ctype模块理解对象
1.对象的引用计数 从c代码分析可知,python所有对象的内存有着同样的起始结构:引用计数+类型信息,实际上这些信息在python本体重也是可以透过包来一窥一二的, from ctypes impo ...
- 神经网络中 BP 算法的原理与 Python 实现源码解析
最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正. 什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示. 梯度下降示意图 现在,我们 ...
- ICO图标在线生成,php生成ICO图标在线制作源码
我们做web系统的时候,每个浏览器的tab这里都会有一个图标,这个图标叫favicon图标,favicon.ico文件放在系统的根目录 如果程序员没有ICO制作工具,那么要如何生成图标呢?可以用程序来 ...
- Mybatis源码解析(三) —— Mapper代理类的生成
Mybatis源码解析(三) -- Mapper代理类的生成 在本系列第一篇文章已经讲述过在Mybatis-Spring项目中,是通过 MapperFactoryBean 的 getObject( ...
- springboot源码解析-管中窥豹系列之bean如何生成?(十四)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- flask源码解析之上下文
引入 对于flask而言,其请求过程与django有着截然不同的流程.在django中是将请求一步步封装最终传入视图函数的参数中,但是在flask中,视图函数中并没有请求参数,而是将请求通过上下文机制 ...
随机推荐
- .NET NativeAOT 指南
.NET NativeAOT 指南 随着 .NET 8 的发布,一种新的"时尚"应用模型 NativeAOT 开始在各种真实世界的应用中广泛使用. 除了对 NativeAOT 工具 ...
- 使用DoraCloud构建远程办公桌面云
公司总部在上海.员工分布在各地.部分员工需要远程办公.为了实现远程办公,有几种备选方案. 方案1.在员工的PC上安装向日葵.ToDesk之类的远程工具. 方案2.公司总部提供VPN,员工通过VPN拨号 ...
- 高精度模板 大数加大数,可变数组vector实现
vector<int> Add(vector<int>& A, vector<int>& B)//采用引用传入vector,避免将其全部复制传值,使 ...
- Hive压缩和存储
1.压缩 (1)Hive支持的压缩编码 压缩格式 工具 算法 文件扩展名 是否可切分 对应的编码/解码器 DEFLATE 无 DEFLATE .deflate 否 org.apache.hadoop. ...
- google三驾马车之一:Bigtable解读(英文版)
本文重点关注了系统设计相关的内容,paper后半部分的具体应用此处没有过多涉及.从个人笔记修改而来,因此为英文版本. Bigtable: A Distributed Storage System fo ...
- SP10050 POWTOW - Power Tower City 题解
题目传送门 前置知识 扩展欧拉定理 解法 本题幂塔是有限层的,这里与 luogu P4139 上帝与集合的正确用法 中的无限层幂塔不同,故需要在到达递归边界 \(n+1\) 时进行特殊处理,对于处理 ...
- JS LeetCode 566. 重塑矩阵题解分析,数组降维的几种方式
壹 ❀ 引 今天是过完年到公司的第二天,年前因为封版,到今天我们小组是第一个发版的组,然后就各种踩坑,到现在还在公司等运维解决jenkins问题,闲着也是闲着,做一道算法题,简单记录下解题思路,本题来 ...
- NC17315 背包
题目链接 题目 题目描述 Applese有 \(1\) 个容量为 \(v\) 的背包,有 \(n\) 个物品,每一个物品有一个价值 \(a_i\) ,以及一个大小 \(b_i\) 然后他对此提出了自己 ...
- Python中保存字典类型数据到文件
三种方法: 1.在 Python 中使用 pickle 模块的 dump 函数将字典保存到文件中import pickle my_dict = { 'Apple': 4, 'Banana': 2, ' ...
- Linux进程通信 | 消息队列
什么是消息队列? 假设你是一个快递员,你需要将货物从一个仓库运到另一个仓库.但是你发现自己的时间不够用,需要另外请一个人来帮忙.那么,你们之间如何进行协作呢? 一种方式是直接将货物全部交给对方,但这样 ...