我在网上查找音效电路原理图时想到,如果能在出图前先用通用模仿电路仿真器(SPICE)进行模仿查验,可能会进步开发功率和质量。但因为任何电子模仿器都无法读取并输出音频文件,所以我用Pythons波形模块编写程序,完成读取波形文件而且输出一段时刻–电压点的序列。Ngspice的文件源设备能够读取这一大串点序列,并输出和音频信号相匹配的电压波形,之后作为效果电路的输入。
为了能听到输出音频,还需别的一个程序将输出盯梢转化成波形文件,这儿我仍是借助于这个Pythons波形模块来完成。
畸变效应
过载效果器250
过载效果器250是最简略的畸变效应之一,以吉他效果而广为人知。原理图如图所示。作业原理很简略,首要需求一个沟通耦合电容和偏置电路,因为供电选用单向电压。
运算扩大器被用作非反相扩大器扩大弱小的输入信号。R5电位计操控增益。输出方位有别的一个沟通耦合电容器和两个削波信号二极管。信号幅值越大,二极管的削波和畸变就越显着。
测验音频信号是一段纯洁的吉他动静,来源于用户Khoon命名的freesound.org安排,没有专利答应费用,从根本上说这个归于共用的。
首要是通过500千欧R5电阻输出较为平缓的畸变。考虑到运算扩大器的扩大效应,输入幅值的挑选尤为重要。这段录音中输入幅值为10 毫伏。从波形上咱们发现,削波效果适当显着,因此在播映前需求查看输出音量。
如下图所示,逐步减小R5的阻值会进步增益和畸变:
音频编辑器显现的失真的频谱效应:
原始纯洁吉他声信号频谱
尖锐畸变信号频谱
以上分别是原始纯洁吉他声信号和尖锐畸变信号的频谱,差异不是很显着。一些低频信号被沟通耦合电容器过滤,因为畸变新增了高频信号。能量添加超出了整个带宽,但这仅仅SPICE到wav格局声音文件转化过程中的过渡表象。为了防止削波,这儿挑选最大信号增益来获取最大样本值,然后改动信号音量。
实践电路与之比较略有不同,不过这种模仿自身依然很能阐明问题。
在所需时刻上,仿真与实践存在不同。在44100赫兹的采样频率下,大约需求5秒来仿真1秒的音频文件。如需求长时刻的仿真并记载数据,能够运用SPICE声明记载下输出波形。
含糊效应
含糊电路
第二部分为含糊电路,除了运算扩大器部分被分立晶体管所替代外,其他与之前的失真电路十分类似。
输入电压幅值对这部分电路的输出影响也很显着。
下面是1毫伏输入幅值下的仿真成果:
10毫伏输入幅值仿真成果为:
因为类似的二极管削波结构,其仿真成果与畸变电路相差不大。
二极管削波器
二极管削波器的波形比料想的要滑润得多。当然这也取决于信号电压和二极管参数。
用一对1N4148进行削波之后的1V 400Hz信号仿真
二极管削波之后的正弦波频谱
但即便如此,这个相对滑润的削波信号也包括许多高频谐波。
源码
源码拜见这儿:
README
SPICE audio tools
This repository has two programs for importing wav file to SPICE and
exporting the output as a wav file.
1. wavtospice.py
- This tool converts a wav file with a list of values, which can be read
using ngspices file source. If wav file has multiple channels only the values
of the first channel are returned.
- Usage: python wavtospice.py
- Ngspice must have been compiled with xspice support. File source can be used
like follows:
a1 %v([in]) filesrc
.model filesrc filesource (file="values" amploffset=[0] amplscale=[1]
+ timeoffset=0 timescale=1
+ timerelative=false amplstep=false)
See ngspice manual for possible options.
2. spicetowav.py
- This tool converts ngspice output to wav file. Compatibility with other
simulators is untested.
- Simulation must be setup to print the output values.
Run the ngspice in batch mode using the command line flag -b and direct
output to a file.
- Usage: python spicetowav.py
Clipping voltage is optional and if it's unspecified wav is written
with maximum amplitude such that clipping doesn't occur.
# Example
Following commands can be used to get output from lowpass filter example file
when run on Linux:
$ python wavtospice.py file.wav inputvalues
$ ngspice -b examples/lowpass.cir > spice_output
$ python spicetowav.py spice_output output.wav