新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 提高開發(fā)效率和質(zhì)量?用SPICE仿真音效

提高開發(fā)效率和質(zhì)量?用SPICE仿真音效

作者:EEPW編譯 時(shí)間:2014-10-27 來源:電子產(chǎn)品世界 收藏

  我在網(wǎng)上查找原理圖時(shí)想到,如果能在出圖前先用通用模擬電路仿真器()進(jìn)行模擬檢驗(yàn),可能會(huì)提高開發(fā)效率和質(zhì)量。但由于任何電子模擬器都無法讀取并輸出音頻文件,所以我用模塊編寫程序,實(shí)現(xiàn)讀取波形文件并且輸出一段時(shí)間--電壓點(diǎn)的序列。的文件源裝置能夠讀取這一大串點(diǎn)序列,并輸出和音頻信號(hào)相匹配的電壓波形,之后作為效果電路的輸入。

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

  為了能聽到輸出音頻,還需另外一個(gè)程序?qū)⑤敵龈欈D(zhuǎn)換成波形文件,這里我還是借助于這個(gè)模塊來實(shí)現(xiàn)。

  

過載效果器250

  過載效果器250是最簡單的之一,以吉他效果而廣為人知。原理圖如圖所示。工作原理很簡單,首先需要一個(gè)交流耦合電容和偏置電路,因?yàn)楣╇姴捎脝蜗螂妷骸?/p>

  運(yùn)算放大器被用作非反相放大器放大微弱的輸入信號(hào)。R5電位計(jì)控制增益。輸出位置有另外一個(gè)交流耦合電容器和兩個(gè)削波信號(hào)二極管。信號(hào)幅值越大,二極管的削波和畸變就越明顯。

  測試音頻信號(hào)是一段純凈的吉他聲響,來源于用戶Khoon命名的freesound.org組織,沒有專利許可費(fèi)用,從根本上說這個(gè)屬于公用的。

  首先是經(jīng)過500千歐R5電阻輸出較為緩和的畸變??紤]到運(yùn)算放大器的放大效應(yīng),輸入幅值的選擇尤為重要。這段錄音中輸入幅值為10 毫伏。從波形上我們發(fā)現(xiàn),削波作用相當(dāng)明顯,因此在播放前需要檢查輸出音量。

  如下圖所示,逐漸減小R5的阻值會(huì)提高增益和畸變:

  音頻編輯器顯示的失真的頻譜效應(yīng):

原始純凈吉他聲信號(hào)頻譜


刺耳畸變信號(hào)頻譜


  以上分別是原始純凈吉他聲信號(hào)和刺耳畸變信號(hào)的頻譜,區(qū)別不是很明顯。一些低頻信號(hào)被交流耦合電容器過濾,由于畸變新增了高頻信號(hào)。能量增加超出了整個(gè)帶寬,但這只是到wav格式聲音文件轉(zhuǎn)換過程中的過渡表象。為了避免削波,這里選擇最大信號(hào)增益來獲取最大樣本值,從而改變信號(hào)音量。

  實(shí)際電路與之相比略有不同,不過這種模擬本身仍然很能說明問題。

  在所需時(shí)間上,仿真與實(shí)際存在差別。在44100赫茲的采樣頻率下,大約需要5秒來仿真1秒的音頻文件。如需要長時(shí)間的仿真并記錄數(shù)據(jù),可以使用聲明記錄下輸出波形。

  模糊效應(yīng)

模糊電路


  第二部分為模糊電路,除了運(yùn)算放大器部分被分立晶體管所取代外,其余與之前的失真電路非常相似。

  輸入電壓幅值對這部分電路的輸出影響也很明顯。

  下面是1毫伏輸入幅值下的仿真結(jié)果:

  10毫伏輸入幅值仿真結(jié)果為:

  由于相似的二極管削波結(jié)構(gòu),其仿真結(jié)果與畸變電路相差不大。

  二極管削波器

  二極管削波器的波形比預(yù)想的要平滑得多。當(dāng)然這也取決于信號(hào)電壓和二極管參數(shù)。

用一對1N4148進(jìn)行削波之后的1V 400Hz信號(hào)仿真


二極管削波之后的正弦波頻譜


  但即便如此,這個(gè)相對平滑的削波信號(hào)也包含許多高頻諧波。

  源碼

  源碼參見這里:

  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


模擬信號(hào)相關(guān)文章:什么是模擬信號(hào)




評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉