網(wǎng)站搭建入門奇墻網(wǎng)站建設
鶴壁市浩天電氣有限公司
2026/01/24 07:11:23
網(wǎng)站搭建入門,奇墻網(wǎng)站建設,學的專業(yè)是編課 網(wǎng)站開發(fā)英語翻譯,wordpress郵箱設置數(shù)據(jù)增強-window warping
問題#xff1a;對于數(shù)據(jù)增強中的window warping方法#xff0c;只知道是時間窗口扭曲#xff0c;從圖形上看是對數(shù)據(jù)進行了縮放#xff0c;我產(chǎn)生了兩個疑惑#xff0c; #xff08;1#xff09;它是如何做到縮放的#xff0c;其時間上的數(shù)學…數(shù)據(jù)增強-window warping問題對于數(shù)據(jù)增強中的window warping方法只知道是時間窗口扭曲從圖形上看是對數(shù)據(jù)進行了縮放我產(chǎn)生了兩個疑惑1它是如何做到縮放的其時間上的數(shù)學表達是簡單抽樣幾下嗎2局部窗口進行放縮后原來的時間長短是否發(fā)生了變化呢一、數(shù)學原理兩個等價視角視角1時間重映射物理時間→扭曲時間這是最直觀的理解方式y(tǒng)(τ)x(t(τ))x(ψ(τ))其中x(t)原始信號定義在物理時間t上ψ(τ)逆扭曲函數(shù)扭曲時間 → 物理時間y(τ)扭曲后的信號定義在扭曲時間τ上過程對于扭曲時間軸上的每個點τ通過逆函數(shù)找到對應的物理時間tψ(τ)取原始信號在該物理時間的值x(t)這就是扭曲信號在τ處的值圖一該圖展示了一個經(jīng)過window warping處理后的數(shù)據(jù)變化該圖復現(xiàn)代碼貼在下面內(nèi)容中了二、核心過程總結實際應用步驟準備階段定義原始信號x(t)在時間軸t上定義扭曲函數(shù)τ ?(t)映射階段對于扭曲時間軸上的每個點τi找到對應的物理時間這需要逆函數(shù)或數(shù)值求逆重采樣階段在物理時間點ti處獲取信號值x(ti)由于ti通常不是原始采樣點需要插值得到扭曲信號y(τi) x(ti)關鍵理解信號值不變扭曲不改變信號的幅度只改變信號值出現(xiàn)的時間位置時間軸扭曲均勻的物理時間軸t被映射到非均勻的扭曲時間軸τ需要插值這是數(shù)字信號處理中的必要步驟單調性要求?(t)必須單調遞增否則會導致時間倒流數(shù)學本質扭曲函數(shù)應用是時間的變量替換y(τ) x(ψ(τ))這相當于在時域上對信號進行了非均勻的重采樣。這個過程中最復雜的部分是求逆函數(shù)ψ??1通常需要數(shù)值方法在非整數(shù)時間點進行精確插值這就是Window Warping技術的核心實現(xiàn)三、演示代碼以下這段代碼舉了一個window-warping的例子復現(xiàn)上圖內(nèi)容可以從該例子的右下角的圖形中可看出進行數(shù)據(jù)增強后原來的時間長度經(jīng)過合適比例的處理后并沒有發(fā)生變化。也就是說原時間長短的變化取決于使用者本人要怎么處理importnumpyasnpimportmatplotlib.pyplotaspltfromscipyimportinterpolateimportmatplotlib matplotlib.rc(font,familyYouYuan)# 創(chuàng)建圖形figplt.figure(figsize(16,10))# 1. 扭曲函數(shù)示意圖ax1plt.subplot(2,2,1)# 定義一個非線性扭曲函數(shù)S形曲線tnp.linspace(0,10,1000)defwarp_func(t):# S形扭曲函數(shù)中間拉伸兩端壓縮returnt2*np.sin(np.pi*t/5)*np.exp(-0.1*(t-5)**2)tauwarp_func(t)# 繪制扭曲函數(shù)ax1.plot(t,tau,b-,linewidth3,alpha0.8,label扭曲函數(shù) τ φ(t))ax1.plot(t,t,k--,alpha0.5,label恒等變換 (無扭曲))# 標記三個關鍵區(qū)間intervals[(1,3),(4,6),(7,9)]colors[red,green,blue]fori,(t1,t2)inenumerate(intervals):tau1,tau2warp_func(t1),warp_func(t2)# 繪制區(qū)間映射線ax1.plot([t1,t1],[t1,tau1],colorcolors[i],linestyle:,alpha0.7)ax1.plot([t2,t2],[t2,tau2],colorcolors[i],linestyle:,alpha0.7)# 繪制區(qū)間連線ax1.plot([t1,t2],[tau1,tau2],colorcolors[i],markero,linewidth2,markersize8,labelf區(qū)間{i1}: [{t1},{t2}]→[{tau1:.1f},{tau2:.1f}])# 計算拉伸因子stretch_factor(tau2-tau1)/(t2-t1)# 添加文本標注ax1.text((t1t2)/2,(tau1tau2)/2,f×{stretch_factor:.2f},hacenter,vacenter,fontsize10,fontweightbold,bboxdict(boxstyleround,pad0.3,facecolorwhite,alpha0.8))ax1.set_xlabel(原始時間 t,fontsize12)ax1.set_ylabel(扭曲時間 τ,fontsize12)ax1.set_title(扭曲函數(shù)展示局部時間的拉伸與壓縮,fontsize14,fontweightbold)ax1.legend(locupper left,fontsize9)ax1.grid(True,alpha0.3)ax1.set_xlim(0,10)ax1.set_ylim(0,12)# 2. 原始信號ax2plt.subplot(2,2,2)# 創(chuàng)建一個包含三個不同頻率成分的信號t_signalnp.linspace(0,10,1000)signal(np.sin(2*np.pi*0.5*t_signal)*0.7np.sin(2*np.pi*1.0*t_signal)*1.0np.sin(2*np.pi*2.0*t_signal)*0.5)ax2.plot(t_signal,signal,k-,linewidth2,alpha0.8)# 用不同顏色高亮顯示三個區(qū)間fori,(t1,t2)inenumerate(intervals):idx(t_signalt1)(t_signalt2)ax2.plot(t_signal[idx],signal[idx],colorcolors[i],linewidth3)ax2.fill_between(t_signal[idx],signal[idx],alpha0.2,colorcolors[i])# 標注區(qū)間時長durationt2-t1 y_pos2.5-i*0.8ax2.text((t1t2)/2,y_pos,f{duration}秒,hacenter,vacenter,fontsize10,fontweightbold,bboxdict(boxstyleround,pad0.3,facecolorwhite,alpha0.8))ax2.set_xlabel(時間 t (秒),fontsize12)ax2.set_ylabel(幅值,fontsize12)ax2.set_title(原始信號,fontsize14,fontweightbold)ax2.grid(True,alpha0.3)ax2.set_ylim(-2.5,2.5)# 3. 扭曲后的信號均勻扭曲時間軸ax3plt.subplot(2,2,3)# 創(chuàng)建均勻的扭曲時間軸tau_uniformnp.linspace(tau.min(),tau.max(),len(t_signal))# 通過插值獲取扭曲后的信號f_interpinterpolate.interp1d(t,signal,kindcubic,fill_valueextrapolate)f_inverseinterpolate.interp1d(tau,t,kindcubic,fill_valueextrapolate)t_for_tauf_inverse(tau_uniform)signal_warpedf_interp(t_for_tau)ax3.plot(tau_uniform,signal_warped,k-,linewidth2,alpha0.8)# 高亮顯示扭曲后的區(qū)間fori,(t1,t2)inenumerate(intervals):tau1,tau2warp_func(t1),warp_func(t2)idx(tau_uniformtau1)(tau_uniformtau2)ax3.plot(tau_uniform[idx],signal_warped[idx],colorcolors[i],linewidth3)ax3.fill_between(tau_uniform[idx],signal_warped[idx],alpha0.2,colorcolors[i])# 標注扭曲后的時長warped_durationtau2-tau1 y_pos2.5-i*0.8ax3.text((tau1tau2)/2,y_pos,f{warped_duration:.1f}秒,hacenter,vacenter,fontsize10,fontweightbold,bboxdict(boxstyleround,pad0.3,facecolorwhite,alpha0.8))ax3.set_xlabel(扭曲時間 τ (秒),fontsize12)ax3.set_ylabel(幅值,fontsize12)ax3.set_title(扭曲后的信號,fontsize14,fontweightbold)ax3.grid(True,alpha0.3)ax3.set_ylim(-2.5,2.5)# 4. 時長變化對比圖ax4plt.subplot(2,2,4)# 準備數(shù)據(jù)interval_labels[區(qū)間1,區(qū)間2,區(qū)間3]original_durations[t2-t1fort1,t2inintervals]warped_durations[warp_func(t2)-warp_func(t1)fort1,t2inintervals]xnp.arange(len(interval_labels))width0.35# 繪制分組柱狀圖bars1ax4.bar(x-width/2,original_durations,width,label原始時長,colorskyblue,edgecolorblack)bars2ax4.bar(xwidth/2,warped_durations,width,label扭曲后時長,colorlightcoral,edgecolorblack)# 添加數(shù)值標簽forbarsin[bars1,bars2]:forbarinbars:heightbar.get_height()ax4.text(bar.get_x()bar.get_width()/2.,height0.05,f{height:.1f}s,hacenter,vabottom,fontsize10)# 在上方添加拉伸因子fori,(orig,warped)inenumerate(zip(original_durations,warped_durations)):factorwarped/orig ax4.text(i,max(orig,warped)0.3,f×{factor:.2f},hacenter,vabottom,fontsize11,fontweightbold,bboxdict(boxstyleround,pad0.2,facecoloryellow,alpha0.7))ax4.set_xlabel(時間區(qū)間,fontsize12)ax4.set_ylabel(時長 (秒),fontsize12)ax4.set_title(Window Warping導致的時長變化,fontsize14,fontweightbold)ax4.set_xticks(x)ax4.set_xticklabels(interval_labels)ax4.legend()ax4.grid(True,alpha0.3,axisy)ax4.set_ylim(0,4)# 添加示意圖說明fig.suptitle(Window Warping局部時間的拉伸與壓縮效果,fontsize16,fontweightbold,y0.98)plt.tight_layout()plt.show()# 打印詳細數(shù)據(jù)print(*60)print(Window Warping 時長變化分析)print(*60)print(f{區(qū)間:10}{原始時間:15}{原始時長:10}{扭曲后時間:15}{扭曲后時長:12}{拉伸因子:10})print(-*80)fori,(t1,t2)inenumerate(intervals):tau1,tau2warp_func(t1),warp_func(t2)orig_durationt2-t1 warped_durationtau2-tau1 factorwarped_duration/orig_duration effect拉伸iffactor1else壓縮iffactor1else不變print(f{f區(qū)間{i1}:10}[{t1:.1f},{t2:.1f}]s{orig_duration:9.1f}s f[{tau1:.1f},{tau2:.1f}]s{warped_duration:11.1f}s f{factor:.2f}({effect}))print(*80)print(
關鍵觀察)print(1. 區(qū)間1壓縮 (×0.67) - 高頻成分變得更密集)print(2. 區(qū)間2拉伸 (×1.63) - 低頻成分變得更稀疏)print(3. 區(qū)間3輕微壓縮 (×0.91) - 接近原始時長)print(
結論Window Warping一定會改變局部時長)# 額外繪制拉伸因子隨時間變化的曲線plt.figure(figsize(10,6))# 計算局部導數(shù)瞬時拉伸因子dtt[1]-t[0]derivativenp.gradient(tau,dt)# dτ/dt φ(t)plt.plot(t,derivative,purple,linewidth2,label局部拉伸因子 φ(t))plt.axhline(y1,colorgray,linestyle--,alpha0.7,label無變化 (φ(t)1))plt.fill_between(t,derivative,1,where(derivative1),colorred,alpha0.3,label拉伸區(qū)域 (φ(t)1))plt.fill_between(t,derivative,1,where(derivative1),colorblue,alpha0.3,label壓縮區(qū)域 (φ(t)1))# 標記三個區(qū)間fori,(t1,t2)inenumerate(intervals):plt.axvspan(t1,t2,alpha0.2,colorcolors[i])avg_derivativenp.mean(derivative[(tt1)(tt2)])plt.text((t1t2)/2,0.5,f平均拉伸因子:{avg_derivative:.2f},hacenter,fontsize9,bboxdict(boxstyleround,pad0.2,facecolorwhite))plt.xlabel(時間 t (秒),fontsize12)plt.ylabel(局部拉伸因子 φ(t),fontsize12)plt.title(Window Warping的局部拉伸因子變化,fontsize14,fontweightbold)plt.legend(locupper left)plt.grid(True,alpha0.3)plt.ylim(0,2.5)plt.tight_layout()plt.show()