怎么做网站 教学,网站建设的目标是,中山网站建设方案外包,织梦做的网站 首页有空白数据增强-window warping
问题#xff1a;对于数据增强中的window warping方法#xff0c;只知道是时间窗口扭曲#xff0c;从图形上看是对数据进行了缩放#xff0c;我产生了两个疑惑#xff0c; #xff08;1#xff09;它是如何做到缩放的#xff0c;其时间上的数学…数据增强-window warping问题对于数据增强中的window warping方法只知道是时间窗口扭曲从图形上看是对数据进行了缩放我产生了两个疑惑1它是如何做到缩放的其时间上的数学表达是简单抽样几下吗2局部窗口进行放缩后原来的时间长短是否发生了变化呢一、数学原理两个等价视角视角1时间重映射物理时间→扭曲时间这是最直观的理解方式y(τ)x(t(τ))x(ψ(τ))其中x(t)原始信号定义在物理时间t上ψ(τ)逆扭曲函数扭曲时间 → 物理时间y(τ)扭曲后的信号定义在扭曲时间τ上过程对于扭曲时间轴上的每个点τ通过逆函数找到对应的物理时间tψ(τ)取原始信号在该物理时间的值x(t)这就是扭曲信号在τ处的值图一该图展示了一个经过window warping处理后的数据变化该图复现代码贴在下面内容中了二、核心过程总结实际应用步骤准备阶段定义原始信号x(t)在时间轴t上定义扭曲函数τ ϕ(t)映射阶段对于扭曲时间轴上的每个点τi找到对应的物理时间这需要逆函数或数值求逆重采样阶段在物理时间点ti处获取信号值x(ti)由于ti通常不是原始采样点需要插值得到扭曲信号y(τi) x(ti)关键理解信号值不变扭曲不改变信号的幅度只改变信号值出现的时间位置时间轴扭曲均匀的物理时间轴t被映射到非均匀的扭曲时间轴τ需要插值这是数字信号处理中的必要步骤单调性要求ϕ(t)必须单调递增否则会导致时间倒流数学本质扭曲函数应用是时间的变量替换y(τ) x(ψ(τ))这相当于在时域上对信号进行了非均匀的重采样。这个过程中最复杂的部分是求逆函数ψϕ−1通常需要数值方法在非整数时间点进行精确插值这就是Window Warping技术的核心实现三、演示代码以下这段代码举了一个window-warping的例子复现上图内容可以从该例子的右下角的图形中可看出进行数据增强后原来的时间长度经过合适比例的处理后并没有发生变化。也就是说原时间长短的变化取决于使用者本人要怎么处理importnumpyasnpimportmatplotlib.pyplotaspltfromscipyimportinterpolateimportmatplotlib matplotlib.rc(font,familyYouYuan)# 创建图形figplt.figure(figsize(16,10))# 1. 扭曲函数示意图ax1plt.subplot(2,2,1)# 定义一个非线性扭曲函数S形曲线tnp.linspace(0,10,1000)defwarp_func(t):# S形扭曲函数中间拉伸两端压缩returnt2*np.sin(np.pi*t/5)*np.exp(-0.1*(t-5)**2)tauwarp_func(t)# 绘制扭曲函数ax1.plot(t,tau,b-,linewidth3,alpha0.8,label扭曲函数 τ φ(t))ax1.plot(t,t,k--,alpha0.5,label恒等变换 (无扭曲))# 标记三个关键区间intervals[(1,3),(4,6),(7,9)]colors[red,green,blue]fori,(t1,t2)inenumerate(intervals):tau1,tau2warp_func(t1),warp_func(t2)# 绘制区间映射线ax1.plot([t1,t1],[t1,tau1],colorcolors[i],linestyle:,alpha0.7)ax1.plot([t2,t2],[t2,tau2],colorcolors[i],linestyle:,alpha0.7)# 绘制区间连线ax1.plot([t1,t2],[tau1,tau2],colorcolors[i],markero,linewidth2,markersize8,labelf区间{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(扭曲函数展示局部时间的拉伸与压缩,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)# 创建一个包含三个不同频率成分的信号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)# 用不同颜色高亮显示三个区间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])# 标注区间时长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)# 创建均匀的扭曲时间轴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)# 高亮显示扭曲后的区间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)# 准备数据interval_labels[区间1,区间2,区间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)# 添加数值标签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(时间区间,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()# 打印详细数据print(*60)print(Window Warping 时长变化分析)print(*60)print(f{区间: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区间{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(\n关键观察)print(1. 区间1压缩 (×0.67) - 高频成分变得更密集)print(2. 区间2拉伸 (×1.63) - 低频成分变得更稀疏)print(3. 区间3轻微压缩 (×0.91) - 接近原始时长)print(\n结论Window Warping一定会改变局部时长)# 额外绘制拉伸因子随时间变化的曲线plt.figure(figsize(10,6))# 计算局部导数瞬时拉伸因子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拉伸区域 (φ\(t)1))plt.fill_between(t,derivative,1,where(derivative1),colorblue,alpha0.3,label压缩区域 (φ\(t)1))# 标记三个区间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()