波形搜索演算法
⑴ 窗簾幔的計算方法
幔(簾頭): 1、 波形幔:半波、圓波2、 直幔:直板(單層、單色雙層、雙色雙層);皺折(百折、重疊、隨意)3、 扇行幔的計算1、波形幔的計算:(1) 圓波:每個波的成功尺寸0.6——0.7m,實際用量1.8m/個。掉旗:(耳朵)高度一般是窗簾高度的0.3,用料=窗高×0.3×個數。如:(幔)3m寬:3(窗簾寬度)÷0.65(波的寬度)=4.5個(4個波),即波用料:4個×1.8m=7.2m掉旗:2m高:2×0.3 ×2=1.2m則此幅窗簾波形幔共用料:8.4m(2)、半波:可根據窗戶的規格及布料的厚薄酌情處理薄型料:每個半波成功尺寸是0.5m,實際開料為料0.9m。如:窗戶規格3.3×2.6M=6個波×0.9M+1.8M弔旗=7.2M厚型料:每個半波成功尺寸是0.7m,實際開料為料1.2m。如:窗戶規格3.3×2.6M=4個波×1.2 M+1.8M弔旗=6.6M2、直幔的計算:(1) 直板:單層:用料=窗寬+0.1m單色雙層:用料=窗寬+0.1m雙色雙層:用料=(窗寬+0.1m)×2 如:窗戶規格3.1×2.5 則:(3.1+0.1)×2=6.4M直板幔的窗簾都可以不用計算腰帶用料(2)、折皺(三中形式的演算法一樣)a、 不對花型:1.1、1.4m窄幅:(窄幅)用料=窗寬+0.1m;(寬幅):用料=(正窗寬度×3倍皺折)÷幅寬×幔高b、 對花型(直板):用料=窗寬×1.5對花型(重疊) :與窄幅正窗一樣:窗寬×3÷布料幅寬=幅數(只入不舍);用料=幅數×一組花型的尺寸 一、 荷葉邊:荷葉邊的寬度:小窗簾(0.12m);大窗簾(0.15m);床罩(0.3m)。副數=需用荷葉邊長度×3÷幅寬(只入不舍)用料=幅數×荷葉邊寬度如:1×1m 1.4m幅寬(1+0.1)×3=3.3m(直幔花邊) 1×2=2m(豎花邊)下花邊:1×2倍皺折÷1.4=2副料 2×1.4(幅寬)=2.8m(3.3+2+2.8)×3÷.4=17.35(18條花邊)18×0.12=2.16m(用料)
⑵ Python科學計算——任意波形擬合
任意波形的生成 (geneartion of arbitrary waveform) 在商業,軍事等領域都有著重要的應用,諸如空間光通信 (free-space optics communication), 高速信號處理 (high-speed signal processing),雷達 (radar) 等。在任意波形生成後, 如何評估生成的任意波形 成為另外一個重要的話題。
假設有一組實驗數據,已知他們之間的函數關系:y=f(x),通過這些信息,需要確定函數中的一些參數項。例如,f 是一個線型函數 f(x)=k*x+b,那麼參數 k 和 b 就是需要確定的值。如果這些參數用 p 表示的話,那麼就需要找到一組 p 值使得如下公式中的 S 函數最小:
這種演算法被稱之為 最小二乘擬合 (least-square fitting)。scipy 中的子函數庫 optimize 已經提供實現最小二乘擬合演算法的函數 leastsq 。下面是 leastsq 函數導入的方式:
scipy.optimize.leastsq 使用方法
在 Python科學計算——Numpy.genfromtxt 一文中,使用 numpy.genfromtxt 對數字示波器採集的三角波數據導入進行了介紹,今天,就以 4GHz三角波 波形的擬合為案例介紹任意波形的擬合方法。
在 Python科學計算——如何構建模型? 一文中,討論了如何構建三角波模型。在標准三角波波形的基礎上添加了 橫向,縱向的平移和伸縮特徵參數 ,最後添加了 雜訊參數 模擬了三角波幅度參差不齊的隨機性特徵。但在波形擬合時,並不是所有的特徵參數都要納入考量,例如,雜訊參數應是 波形生成系統 的固有特徵,正因為它的存在使得產生的波形存在瑕疵,因此,在進行波形擬合並評估時,不應將雜訊參數納入考量,最終模型如下:
在調用 scipy.optimize.leastsq 函數時,需要構建誤差函數:
有時候,為了使圖片有更好的效果,需要對數據進行一些處理:
leastsq 調用方式如下:
合理的設置 p0 可以減少程序運行時間,因此,可以在運行一次程序後,用擬合後的相應數據對 p0 進行修正。
在對波形進行擬合後,調用 pylab 對擬合前後的數據進行可視化:
均方根誤差 (root mean square error) 是一個很好的評判標准,它是觀測值與真值偏差的平方和觀測次數n比值的平方根,在實際測量中,觀測次數n總是有限的,真值只能用最可信賴(最佳)值來代替.方根誤差對一組測量中的特大或特小誤差反映非常敏感,所以,均方根誤差能夠很好地反映出測量的精密度。
RMSE 用程序實現如下:
擬合效果,模型參數輸出:
leastsq 函數適用於任何波形的擬合,下面就來介紹一些常用的其他波形:
⑶ 音頻演算法入門-變音項目
本文主要是基於一個變音項目帶大家入門音頻演算法。項目用到了波形相似疊加演算法(Waveform similarity Overlap-Add WSOLA)和重采樣演算法。wsola能做到變時不變調,重采樣是變時也變調,兩者結合就能做到變調不變時。項目地址在文章末尾給出。
該演算法屬於時域法,能做到音頻的變時不變調(改變語速但不改變語調)。時域法的基本思路是將音頻切分成很小的若乾等份,然後每份都去刪減一截或者復制一截數據,來減少或增加音頻數據,這樣就不會改變音頻波形,也就不影響音調,最後把每份重新合成播放就達到了變時不變調的目的。但如果只是這么做的話播放出來的聲音是有瑕疵的。例如想要加快播放速度,也就是對每份數據刪減一截,問題會出在合成的時候,前後兩份音頻的波形會出現斷橫,如果是想要減緩播放速度,也就是每份復制一截數據,問題會出在復制後的數據拼接到原數據末尾的時候,拼接處會出現斷橫。波形相似度疊加演算法就是為了優化這個斷橫問題而提出的。橫斷如下圖所示。
首先介紹幾個概念,分別為有效幀,分析幀、搜索窗、重疊區域,合成幀、搜索窗可移動距離。
有效幀:把音頻切分成很小的若乾等份,每份數據就叫做有效幀。
分析幀:實際分析和處理的時候,僅僅有有效幀是不夠的,需要把上個分析幀末尾的一段數據復制並拼接到當前分析幀的頭部,這樣的一份數據被稱為分析幀。分析幀的組成為:analysisFrameLength(分析幀長度) = (有效幀長度)+plicateLengthInAnalysisFrame(重復數據長度)
搜索窗:通過波形相似查找演算法在分析幀里截取出的一段數據,數據長度為搜索窗長度,但搜索窗數據並不是直接用於拼接成最終的音頻,因為搜索窗里包含重疊區域。
重疊區域:搜索窗數據在處理成最終音頻的時候,每個搜索窗數據都會被下一個搜索窗數據重疊一塊區域,這塊區域叫做重疊區域。
合成幀:由於每個搜索窗數據都會被下一個搜索窗數據重疊一塊區域,所以真正用於合成拼接的數據=搜索窗數據-重疊區域,這段數據叫做合成幀。所以播放速度=有效幀/合成幀
搜索窗可移動距離:用上一個搜索窗尾部重疊區域大小的數據(波形數據)作為參考,從當前分析幀頭部開始往後平移尋找最相似的數據(相似的波形數據),可平移的最大距離就是搜索窗可移動距離。所以分析幀必須要比搜索窗+搜索窗可移動距離大才行。
熟悉了上面介紹的概念後再來看下面的波形相似度疊加演算法示意圖,圖中展示了兩個分析幀變成兩個合成幀的完整過程。具體實現細節就看項目吧,主要涉及的操作就是計算波形相似度和疊加這兩個相似波形。
重采樣分為上采樣和下采樣,上采樣就是增加數據,帶來的效果是語速變慢且音調降低,下采樣就是減少數據,帶來的效果是語速變快且音調提高。所以配合波形相似疊加演算法能做到變時不變調。下采樣會造成混疊,上采樣會造成鏡像,想要了解的更細,需要先了解香濃采樣定理,然後我推薦一個網址,講的是上采樣和下采樣的內容https://www.cnblogs.com/TaigaCon/p/8512219.html。為了讓重采樣不出現混疊和鏡像,本項目用的是窗函數(凱澤窗)設計的sinc低通濾波器進行重采樣操作。
低通濾波的目的就是把低頻信號保留,把高頻信號除去,這相當於把一段音頻的頻域信號點乘sinc函數傅里葉變換後的頻譜函數(該函數的形狀請看上圖的sinc函數頻譜圖)。頻域點乘又相當於時域卷積,所以又相當於把一段音頻時域信號和sinc函數做卷積,但是由於sinc函數在時域上是從負無窮到正無窮的,這就導致沒法做卷積,我們觀察一下這個sinc函數會發現,離坐標原點越遠,曲線上下波動就越小,y值也越接近0,就表示信息量就越少,這時候有人肯定會想到那就裁剪一下,把接近坐標原點的中間這塊裁剪下來做卷積。卷積後的結果如下圖所示。
看上圖會發現不再是標準的矩形函數,兩邊會有長長的拖尾,而且拖尾的y值還挺大的,這種現象叫做泄露,這不是我們想要的效果,我們還是希望能盡量的接近原來的矩形窗,這就引出了窗函數,對這個sinc函數進行加窗操作(就是裁剪並和窗函數點乘)就可以減少泄露。下面這圖就是加了凱澤窗後的sinc函數頻譜圖
看上圖會發現拖尾雖然還是存在,但是拖尾的y值變得更小了,這個效果雖然不是最理想的,但比原來好多了。所以用這個加了窗的sinc函數進行卷積就可以實現低通濾波。那麼怎麼用這個低通濾波器進行插值呢?請看下圖。
為了方便項目的理解,可以先看看這個項目的簡單介紹,該項目是先定義了搜索窗大小,搜索窗可移動距離大小和重疊區域大小,然後通過播放速度計算出其他的參數,包括合成幀大小,分析幀大小,有效幀大小和分析幀的重復區域大小。公式如下:
合成幀 = 搜索窗可移動距離重疊區域
有效幀 = 播放速度*(搜索窗-重疊區域)
分析幀 = Math.max(有效幀+重疊區域,搜索窗)+搜索窗可移動距離
分析幀的重復區域 = 分析幀-有效幀
今天春節,是新一年的開端,祝大家在新的一年裡付出的努力都能有所收獲,年牛大吉!