新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 提高开发效率和质量?用SPICE仿真音效

提高开发效率和质量?用SPICE仿真音效

作者:EEPW编译时间:2014-10-27来源:电子产品世界收藏

  我在网上查找原理图时想到,如果能在出图前先用通用模拟电路仿真器()进行模拟检验,可能会提高开发效率和质量。但由于任何电子模拟器都无法读取并输出音频文件,所以我用模块编写程序,实现读取波形文件并且输出一段时间--电压点的序列。的文件源装置能够读取这一大串点序列,并输出和音频信号相匹配的电压波形,之后作为效果电路的输入。

本文引用地址:http://www.eepw.com.cn/article/264466.htm

  为了能听到输出音频,还需另外一个程序将输出跟踪转换成波形文件,这里我还是借助于这个模块来实现。

  

过载效果器250

  过载效果器250是最简单的之一,以吉他效果而广为人知。原理图如图所示。工作原理很简单,首先需要一个交流耦合电容和偏置电路,因为供电采用单向电压。

  运算放大器被用作非反相放大器放大微弱的输入信号。R5电位计控制增益。输出位置有另外一个交流耦合电容器和两个削波信号二极管。信号幅值越大,二极管的削波和畸变就越明显。

  测试音频信号是一段纯净的吉他声响,来源于用户Khoon命名的freesound.org组织,没有专利许可费用,从根本上说这个属于公用的。

  首先是经过500千欧R5电阻输出较为缓和的畸变。考虑到运算放大器的放大效应,输入幅值的选择尤为重要。这段录音中输入幅值为10 毫伏。从波形上我们发现,削波作用相当明显,因此在播放前需要检查输出音量。

  如下图所示,逐渐减小R5的阻值会提高增益和畸变:

  音频编辑器显示的失真的频谱效应:

原始纯净吉他声信号频谱


刺耳畸变信号频谱


  以上分别是原始纯净吉他声信号和刺耳畸变信号的频谱,区别不是很明显。一些低频信号被交流耦合电容器过滤,由于畸变新增了高频信号。能量增加超出了整个带宽,但这只是到wav格式声音文件转换过程中的过渡表象。为了避免削波,这里选择最大信号增益来获取最大样本值,从而改变信号音量。

  实际电路与之相比略有不同,不过这种模拟本身仍然很能说明问题。

  在所需时间上,仿真与实际存在差别。在44100赫兹的采样频率下,大约需要5秒来仿真1秒的音频文件。如需要长时间的仿真并记录数据,可以使用声明记录下输出波形。

  模糊效应

模糊电路


  第二部分为模糊电路,除了运算放大器部分被分立晶体管所取代外,其余与之前的失真电路非常相似。

  输入电压幅值对这部分电路的输出影响也很明显。

  下面是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

  - 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].

  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


模拟信号相关文章:什么是模拟信号




评论


相关推荐

技术专区

关闭