在數學的子學科數值分析裡，B 樣條是樣條曲線一種特殊的表示形式。它是 B 樣條基曲線的線性組合。B 樣條是貝茲曲線的一種一般化，可以進一步推廣為非均勻有理 B 樣條（NURBS），使得我們能給更多一般的幾何體建造精確的模型。 De Boor 演算法是一個數值上穩定的計算 B 樣條的方法。 術語 B 樣條是 Isaac Jacob Schoenberg 創造的，B 是基（basis）樣條的縮略。 定義 給定 m1 個節點 ti ，分佈在 01 區間，滿足 t_0 t_1 ldots t_m 一個 n 次 B 樣條是一個引數曲線： mathbf S01 to mathbb R2 它由 n 次 B 樣條基 basis Bspline 組成 mathbf St sum_i0m mathbf P_i b_int mbox t in 01 Pi 稱為控制點或 de Boor 點 m1 個 n 次 B 樣條基可以用 Coxde Boor 遞迴公式 定義 b_j0t leftbegin matrix 1 mathrm quad t_j t t_j1 0 mathrm end matrix right b_jnt frac t t_jt_jn t_j b_jn1t frac t_jn1 tt_jn1 t_j1 b_j1n1t 當節點等距，稱 B 樣條為均勻 uniform 否則為非均勻 nonuniform。 均勻 B 樣條曲線 當 B 樣條是均勻的時候，對於給定的 n，每個 B 樣條基是其他基的平移複製而已。一個可以作為替代的非遞迴定義是 b_jnt b_n t n j qquad mbox j 1 ldots m1 滿足 b_n t m1 sum_i0m1 omega_i t_i t_m qquad mbox t in 01 滿足 omega_i prod_j0 i neq jm1 frac 1t_i t_k 其中 t_i t_ 是截斷冪函式（truncated power function） 註解 當節點數和多項式次數相等時，B 樣條退化為貝茲曲線。即函式的形狀由節點的位置決定。縮放或者平移節點向量不會改變基函式。 樣條包含在它的控制點的凸包中 n 次 B 樣條的一個基 b_int 僅當在區間 ti tin1 上非 0。就是 b_int leftbegin matrix 0 mathrm quad t_i le t t_in1 0 mathrm end matrix right 換句話說，如果我們操作一個控制點，我們只改變曲線在區域性的行為，而不像 Bezier 曲線那樣是全域性行為。 例子 常數 B 樣條 常數 B 樣條是最簡單的樣條。只定義在一個節點距離上，而且不是節點的函式。它只是不同節點段（knot span）的指示函式。 b_j0t 1_t_jt_j1 leftbegin matrix 1 mathrm quad t_j le t t_j1 0 mathrm end matrix right 線性 B 樣條 線性 B 樣條定義在兩個相鄰的節點段上，在節點連續但不可微。 b_j1t leftbegin matrix frac t t_jt_j1 t_j mathrm if quad t_j le t t_j1 frac t_j2 tt_j2 t_j1 mathrm quad t_j1 le t t_j2 0 mathrm end matrix right 三次 B 樣條 一個片斷上的 B 樣條的表示式可以寫作： S_i t sum_k03 mathbf P_i3k b_i3k3 t qquad mbox t in 01 其中 Si 是第 i 個 B 樣條片斷而 P 是一個控制點集，i 和 k 是區域性控制點索引。控制點的集合會是 P_iw w_i x_i w_i y_i w_i z_i w_i 的集合，其中 w_i 是比重，當它增加時曲線會被拉向控制點 P_i，在減小時則把曲線遠離該點。 片段的整個集合 m2 條曲線（S_3S_4S_m）由 m1 個控制點（P_0P_1P_m m ge 3）定義，作為 t 上的一個 B 樣條可以定義為 S t sum_i0m mathbf P_i b_i t 其中 i 是控制點數，t 是取節點值的全域性引數。這個表示式把 B 樣條表示為 B 樣條基函式的線性組合，這也是這個名稱的原因。 有兩類 B 樣條 均勻和非均勻。非均勻 B 樣條相鄰控制點間的距離不一定要相等。一個一般的形式是區間隨著插入控制點逐步變小到 0。 B 樣條的程式指令 Matlab In Matlab，the command spline can be used for spline interpolation Note： In the command the cubic Bspline is used Cubic BSpline Interpolation by Matlab Generating a sinelike spline curve and samples it over a finer mesh x 0110 original sampling points y sin x xx 00110 new sampling points yy spline xyxx plot xyoxxyy Python 事前安裝模組 pip install numpy pip install scipy pip install matplotlib Cubic BSpline Interpolation by Python from scipyinterpolate import interp1d import matplotlibpyplot as plt import numpy as np x nparange 0 11 original sample points 0 1 2 9 10 y npsin x f interp1d x y kind cubic Cubic means the cubic Bspline x_new nparange 0 101 01 new sample points 0 01 02 99 10 y_new f x_new pltplot xyox_new y_new pltshow B 樣條曲面 B 樣條曲線及曲面相關演算法 關於此處涉及的演算法，在著作 Les Piegl and Wayne Tiller The NURBS Book SpringerVerlag 19951997 2nd ed 中有針對 Bézier、B 樣條（Bspline）以及非均勻有理 B 樣條（Nurbs）的相關演算法的詳細數學表達和程式實現方法。 求導 在幾何處理中，對引數曲線及曲面的求導是最基本的運算之一，由於引數表達的特性，在給定點的切線及法線可透過求導直接得到。 先來考察曲線的情形：採用本頁定義中的 B 樣條曲線表示式 mathbf St sum_i0m mathbf P_i b_int mbox t in 01 對引數 t 進行求導： frac dmathbf Sdt sum_i0m b_int mathbf P_i 節點插入與刪除 曲線及曲面擬合 應用 陣列訊號處理 假設有多個訊號源，並考慮在遠場 farfield 的條件下，以一個多天線接收機所接收，多天線接收機具有 N 個獨立天線，且天線之間間距相同 𝑑 𝜆2。 接收訊號 x t a theta_s t s t a theta_i t i t n t quad t 1 2 dots L 其中，s t 為欲接收的訊號源，i t 為其他訊號源造成的幹擾，n t 為雜訊。 指向向量 steering vector 為 a theta_s t begin bmatrix 1 ejpi sintheta ej2pi sintheta dots ej N1pi sintheta end bmatrixT 權重向量 weight vector 定義為 w begin bmatrix w_0 w_1 dots w_N2 w_N1 end bmatrixT 波束成型 beamformer 的輸出為 y t wH x t wH left a theta_s t s t a theta_i t i t n t right 由於接收端不知道訊號源傳送的訊號為何，利用分段平均、內插重建方法可以降低雜訊 n t 的影響，還原低雜訊的角度成分。 Step 1 分段平均 Segment Average tilde theta_s tau 1 frac 1L sum_i0L1 tilde theta_s Ltau i tau in mathbb N tilde theta_i tau 1 frac 1L sum_i0L1 tilde theta_i Ltau i tau in mathbb N Step 2 利用 cubic BSpline Interpolation BSpline Interpolation 的關係式如下 B_n0t begin cases 1 text for t_n t t_n1 0 text otherwise end cases B_nmt frac t t_nt_nm t_n B_nm1t frac t_nm1 tt_nm1 t_n1 B_n1m1t quad text for t_n t t_n1 text where B_nmt text is the mtext th order polynomial 因為我們是使用 cubic BSpline interpolation，所以選擇 m 3 代入關係式。 藉由上述兩步驟，我們可以得到訊號源和幹擾源的 DOA hat theta_s t sum_n1N tilde theta_s t_n B_n3t hat theta_i t sum_n1N tilde theta_i t_n B_n3t 優點 用多項式內插函式重建平均化後的離散訊號可擬和出更接近連續的波型，同時降低高頻成分造成的影響。 參看 樣條 De Boor 演算法 非均勻有理 B 樣條 參考 參考文獻 JianJiun Ding Time Frequency Analysis and Wavelet Transforms NTU 2021 ChunLin Liu Adaptive Signal Processing NTU 2024 外部連結 Interactive java applets for Bsplines Introduction to Computing with Geometry Notes DrCKSheneMichigan Technological University Category 樣條 deSplineBSplines