频域线性调频小波+同步挤压:相交群延迟信号时频分析Matlab复现
干信号处理这行的最怕的不是多分量信号而是时频平面上两条能量脊线“撞车”——也就是标题里说的相交群延迟。短时傅里叶、小波这类常规线性时频方法一旦碰上两条脊线交叉时频图直接糊成一团,谁也分不清哪个分量是哪条。传统的同步挤压变换SST能解决一部分能量扩散问题但面对交叉场景还是力不从心。这篇博文要复现的就是针对这种“相交群延迟多分量信号”的改进思路把线性调频小波的核心思想搬到频域构造变换再用同步挤压的时频重分配逻辑把能量压回各自该在的位置。文章会从方法原理拆到Matlab代码骨架再到我实测踩过的几个坑适合正在做时频分析、信号分离或者准备复现文献方法的同行参考。1. 问题从哪来相交群延迟为何让传统时频方法翻车1.1 瞬时频率与群延迟一对容易混淆的概念先把概念理清楚。瞬时频率是从时域相位出发的定义如果信号写成 (x(t)A(t)e^{j\varphi(t)})那么瞬时频率就是相位对时间的导数描述的是“某一时刻信号的频率落在哪里”。群延迟则是从频域相位出发的定义对频谱 (X(\omega)|X(\omega)|e^{j\psi(\omega)})群延迟是 (\tau_g(\omega)-\frac{d\psi}{d\omega})描述的是“某一频率成分在时间轴上出现在哪里”。二者看着像其实是同一个相位结构的两种观察视角。对线性调频信号这种相位近似二次型的情况瞬时频率曲线和群延迟曲线互为逆函数关系。标题里说的“相交群延迟”直接的体现就是频域相位曲线存在交叉点而映射到时频平面上等价于两条瞬时频率轨迹在某时刻相交。所以下文为了视觉直观统一按“时频平面交叉”来理解本质上是同一件事。这个区分很重要因为很多人在复现时只看时域仿真造出来的信号明明IF曲线交叉了却意识不到这对应的正是群延迟相交。后面构造仿真信号时我会专门把这一层对应关系讲清楚。1.2 传统时频方法在交叉点的三种“失灵”在交叉点附近短时傅里叶变换STFT是最先败下阵来的。窗函数的时频分辨率折中决定了它只能在一个分辨元内看到一个平均结果两个分量在同一点同时到达同一频率STFT给出的就是一团高强度模糊块方向性完全丢失。连续小波变换CWT稍好一点因为它有多尺度特性低频分辨率好、高频时间分辨率好但它本质上仍然是单频核匹配。面对一条上升、一条下降的两个线性调频分量小波基只在某一时刻与其中一个匹配得好交叉点附近两部分能量互相泄漏脊线同样分不开。维格纳-维尔分布WVD理论上是能量聚集最好的二次型方法最致命的问题在于多分量交叉项。两个分量在交叉点附近产生虚假的“交叉项能量”位置正好落在真实信号脊线之间时频图看起来像三条能量带其中一条是假的。这个交叉项还会随着信号分量增多呈组合爆炸增长实际工程中很难处理。方法单分量调频表现多分量不相交群延迟相交STFT有能量扩散勉强可分糊成一团CWT扩散随尺度变化可分模糊不清WVD理想聚集有交叉项交叉项污染经典SST脊线锐化效果很好重分配错误1.3 经典SST能救多少同步挤压的边界在哪同步挤压变换的核心思想是“重分配”先对系数做局部瞬时频率估计然后把系数从原来的时间-尺度平面直接压到估计出的瞬时频率位置上去。这个操作能把原本分散在尺度方向的能量收敛到一条细脊线上对常规多分量信号效果非常惊艳。问题出在它的瞬时频率估计方式。经典SST用相位对时间的偏导来估计频率这个估计在局部相当于是“用一个小窗口拟合一个单频信号”。当两条分量不相交时窗口里只有一个主要频率成分估计准确一旦到了交叉点窗口里的相位是两个分量叠加的结果小窗口里的信号不再是单频相位差分估计出来的频率就是一个“四不像”的值。系数被挤压到错误位置交叉点附近反而出现能量空洞或伪峰。这就是为什么需要更高自由度的变换核。单纯靠频率这一个变量没办法区分两条相交的调频脊线必须引入第二个自由度——调频率chirp rate让变换核不仅能匹配“频率在哪”还能匹配“频率在怎么变”。频域线性调频小波变换干的正是这件事。2. 方法怎么工作频域线性调频小波变换和同步挤压如何配合2.1 线性调频小波把“频率斜率”加进匹配核普通小波基的核函数只有尺度和平移两个参数匹配的是局部信号的形状。线性调频小波在此基础上增加了一个调频率参数核函数里多了一个二次相位项。这个二次相位项的作用就是让核本身也带有“频率随时间变化”的斜率。打个比方普通小波是一把固定焦距的放大镜只能看清静态细节线性调频小波是一把能自动变焦的放大镜你告诉它目标在加速还是减速它就用对应的曲率去贴合目标。对瞬时频率持续变化的信号匹配到合适调频率后变换系数的能量会在时频平面上高度集中。频域版本的思路是反过来的在频域构造核函数让核的频率轴带有二次相位调制。一个线性调频信号变换到频域后它的频谱相位本身就近似二次函数二次项系数和时域调频率直接相关。用带相同二次相位结构的频域核去内积就能在某个调频率参数上产生很强的共振响应。示意性的变换形式可以写成 [ T(a,b,c)\int S(\omega),\psi^*\left(\frac{\omega-b}{a}\right) e^{-jc(\omega-b)^2},d\omega ] 其中 (S(\omega)) 是信号的频谱(\psi) 是窗函数(b) 是频域中心位置(a) 控制尺度(c) 就是那个关键的调频率参数。2.2 换到频域去做的三个实际好处为什么放着成熟的时域调频小波不用非要绕到频域我实测下来的体会有三点。第一频域相位结构更简单。线性调频信号的频谱相位近似二次型二次项系数恰好对应调频率。在频域里做匹配相当于直接对二次项系数做扫掠物理意义非常直观。群延迟本身就是频谱相位对频率的导数所以频域核天然适配群延迟分析问题。第二计算效率有优势。时域构造调频小波核需要对每个时间点做卷积或内积运算循环量很大。频域变换利用FFT一次性把整段信号变到频域后续的参数扫掠都是在频域向量上做元素级乘法再通过ifft回到时间轴。实测同样参数规模下频域实现比时域卷积实现快一个数量级。第三对交叉信号的区分度更高。两个在时频平面上相交的分量在频域里对应两个具有不同二次相位系数的频谱分量。频域核把调频率作为分离维度后即使它们在频率位置上有重叠在调频率维度上也是分开的。相当于把原来“你中有我、我中有你”的二维问题抬升到三维空间去分离自然就分得开了。2.3 同步挤压重分配的完整链条有了频域调频小波系数下一步就是用同步挤压把能量压实。整个链条可以拆成四段第一段对每个候选调频率参数计算频域调频小波系数得到三维系数体频率轴、时间轴、调频率轴。第二段对每个系数点做瞬时频率估计用相位差分算子或者相位重分配算子从系数相位的局部变化率估计出对应的瞬时频率。第三段设定幅度阈值只有幅度超过阈值的系数才参与重分配把估计出的频率压到最近频率格点上。第四段在调频率维度上做最大响应选择对每个时间-频率点只保留响应最大的调频率层的能量避免多个调频率层能量叠加导致的幅值虚高。这个“先粗分离、后精定位”的组合是整套方法的核心。频率-调频率-时间三维系数体负责把相交分量在调频率维度上拉开同步挤压负责把拉开后的能量再压回各自瞬时频率脊线。两段配合下来交叉点附近的分辨能力比STFT和经典SST都要好。我在实现时踩过的最大一个坑就是第四段的调频率维度选择。一开始没做最佳调频率层选择直接把所有调频率层的重分配结果相加结果能量整体虚高一倍交叉点附近还出现了一堆伪峰。这个细节文章里很容易被忽略但对结果影响是决定性的。3. Matlab复现全过程从仿真信号到参数调优3.1 第一步构造两组群延迟相交的仿真分量复现的第一步是构造一个可控的仿真信号。我采用两条线性调频分量一条频率上升一条频率下降让它们在时频平面中点附近相交。这个构造在群延迟域对应着明确的交叉点能覆盖标题场景的核心特征。fs 2048; % 采样率 N 1024; % 信号长度 t (0:N-1) / fs; % 时间轴 % 分量1频率从100Hz上升到260Hz左右 f0_1 100; k1 160; x1 exp(1j * 2 * pi * (f0_1 * t 0.5 * k1 * t.^2)); % 分量2频率从300Hz下降到140Hz左右 f0_2 300; k2 -160; x2 exp(1j * 2 * pi * (f0_2 * t 0.5 * k2 * t.^2)); x x1 x2;这里的瞬时频率轨迹分别是 (f_1(t)100160t) 和 (f_2(t)300-160t)让二者相等解得 (t0.625s)交点频率 (f200Hz)。两条分量在0.625秒处相遇频率都是200Hz这正好是群延迟曲线的交叉点。信号长度1024对应约0.5秒时长。为了把0.625秒的交叉点包含进来仿真时长建议取1秒以上。实际使用中我会把N设成2048时间轴0~1秒交叉点落在中间偏后位置视觉效果更清楚。复数解析信号的好处是频谱只保留单边带避免实信号正负频谱干扰。3.2 第二步频域线性调频小波变换的核心实现频域线性调频小波变换的Matlab实现核心就是构造频域高斯窗乘以二次相位项再和信号频谱相乘后做ifft。我第一次实现时直接把所有频率格点和调频率格点写成三重循环代码跑得极慢后来改成预分配矩阵、逐层调频率处理规整很多。function TF fdlwpt_forward(x, fs, freqs, sigma, chirps) % 频域线性调频小波正变换演示级实现 % x : 输入信号复数解析形式 % fs : 采样率 % freqs : 频率轴网格用于扫描中心频率 % sigma : 频域高斯窗标准差 % chirps : 调频率候选网格 % TF : 三维系数维度 [频率, 时间, 调频率] N length(x); S fft(x).; TF zeros(length(freqs), N, length(chirps)); for ci 1:length(chirps) c chirps(ci); coef zeros(length(freqs), N); for fi 1:length(freqs) f0 freqs(fi); % 频域核高斯窗 二次相位调频项 kernel exp(-(( (0:N-1)*fs/N - f0 ).^2) / (2*sigma^2)) ... .* exp(-1j * c * ( (0:N-1)*fs/N - f0 ).^2); % 频域内积后转回时域得到该频点-调频率下的解调时域包络 coef(fi, :) ifft(S .* kernel); end TF(:, :, ci) coef; end end实现思路是对每个中心频率 (f_0)用一个高斯窗框出频域局部区域再加一个和调频率 (c) 相关的二次相位补偿。ifft之后得到的是“以该频率成分为中心、以该调频率解调后的时域序列”。如果信号的局部调频率恰好等于 (c)解调后的序列相位变化最慢系数幅度最大能量集中度最高。频域窗宽sigma的选择要特别小心。sigma太小相当于只取了很窄的频带时间分辨率极差sigma太大频率选择性差交叉点附近两个分量又会混在一起。我的经验是先做一次STFT初步观察信号能量散布范围再取一个能让单个线性调频分量脊线完整贯穿信号时长的sigma值。3.3 第三步同步挤压重分配的关键实现拿到三维系数后同步挤压的代码实际上比变换本身更细致。这里有一个必须处理的顺序问题先做“调频率层选择”再做“频率重分配”顺序反了结果完全是乱的。function tfr synchrosqueeze_fdlwpt(TF, freqs, t, thresh_ratio) % 频域调频小波系数同步挤压重分配 % TF : 三维系数 [频率, 时间, 调频率] % thresh_ratio : 幅度阈值比例相对最大幅度 [Nf, Nt, Nc] size(TF); tfr zeros(Nf, Nt); % 先确定全局最大幅度用于设定阈值 maxAmp max(abs(TF(:))); thresh maxAmp * thresh_ratio; for fi 1:Nf for ti 1:Nt % 调频率维度上取响应最大的层 [maxVal, bestC] max(abs(TF(fi, ti, :))); if maxVal thresh continue; end % 相位差分估计局部瞬时频率 if (ti 1) (ti Nt) phaseDiff angle(TF(fi, ti1, bestC) ... * conj(TF(fi, ti-1, bestC))); instFreq phaseDiff / (2 * (t(2) - t(1))) / (2 * pi); else instFreq freqs(fi); end % 找最近频率格点压过去 [~, idx] min(abs(freqs - instFreq)); tfr(idx, ti) tfr(idx, ti) maxVal; end end end瞬时频率估计用的是相邻时间点系数的相位差这是经典SST里的标准做法。之所以要求系数点在时间上连续可导是因为相位差分需要一个稳定的相位演变过程。频域调频小波在匹配到正确调频率后解调输出的相位演变正好是“缓慢线性”的差分估计精度很高。threshold的选择直接影响噪声底和脊线清晰度的平衡。阈值太大会把真实信号的弱能量也滤掉脊线出现断裂阈值太小噪声系数全部参与重分配时频图上全是细碎亮点。实测下来信噪比20dB以上的仿真信号阈值比例取最大幅度的1e-3到1e-2之间比较稳。3.4 第四步参数怎么定附经验值我把整套方法涉及的参数和经验范围整理成一张表。这些参数不是独立生效的后面会细讲耦合关系。参数含义经验范围我的实测建议fs采样率 2倍最高IF至少留30%裕量N信号长度512~40961024起步不够再加sigma频域高斯窗标准差信号有效带宽的2%~5%先用5%看脊线再调chirps网格调频率候选集合覆盖最大IF斜率的两倍范围步长取最大斜率的1/10thresh_ratio挤压阈值比例1e-3 ~ 1e-2噪声高时取1e-1量级调频率网格的设计是最容易出问题的。我的仿真信号最大瞬时频率斜率是160Hz/s那么chirps至少覆盖-200到200Hz/s步长取20Hz/s起步。步长太粗两个分量在调频率维度上分得不够开交叉区域残留粘连步长太细计算量成倍增加收益却不明显。实测下来步长取最大斜率的十分之一是个甜点值。sigma和调频率网格之间有个隐藏耦合sigma太窄频域核本身在频率方向没什么宽度调频率匹配就形同虚设sigma太宽即使调频率错了也能产生较强响应重分配时容易被挤出错误频率。所以调参顺序应该是先定sigma、再看chirps网格最后调阈值。不要一上来就三个参数一起乱调出了问题根本不知道是哪个参数惹的祸。4. 实测中的典型问题与排查实录4.1 交叉点附近“糊成一团”怎么办最常遇到的情况就是除了交叉点那一小片区域别的地方脊线都清清楚楚唯独交叉点附近一片迷雾。我排查过的原因有两类。一类是调频率网格太粗。两个分量的调频率在交叉点附近差异变小如果网格步长超过了这个差异的分辨能力三层网格都给出了中等响应同步挤压时能量被分散。解决方法是局部加密调频率网格在估计最大斜率附近细分成较密的子区间。另一类是sigma太大导致频域窗跨过了两分量在频域上的分离点。此时核函数同时拾取两条分量解调输出叠加相位差分估计频率出错。这种情况把sigma调小往往立竿见影但注意别一下缩得太狠否则时间分辨率崩塌、脊线变粗。我在测试中发现把交叉点的频率范围单独标识出来临时提高该局部的调频率网格密度比整体加密的计算消耗小得多效果也更可控。4.2 噪声环境下重分配失真仿真信号加白噪声后最典型的症状是时频图底噪一片“雪花”真信号脊线反而被淹没。噪声系数幅度小但数量庞大每个都参与重分配被随机挤到各个频率格点累计起来形成很高的噪声底。第一个突破口是把阈值比例提高。我试过把thresh_ratio从1e-3提到0.05噪声亮点明显减少真信号脊线保留完好。代价是弱能量部分可能被截掉如果信号本身是幅度调制型的时频图边缘会出现断裂。第二个做法是加前置带通滤波。仿真信号的频率范围已知直接用一个带宽略宽的带通滤波器把带外噪声滤掉再送入变换。信噪比10dB以下的场景单靠阈值压不住噪声必须加前置处理。第三个思路是做多尺度阈值或自适应阈值以每条脊线为中心取局部邻域在邻域内用较低的阈值邻域外用较高的阈值。这个做法对交叉点附近的弱能量保留效果最好但实现复杂度高我在正式实验里才有必要用。4.3 计算耗时优化第一版实现是纯三重循环加嵌套for信号长度2048、频率格点512、调频率格点41跑一次要4分多钟。优化后变成预计算核矩阵加parfor并行同样参数跑进30秒。优化思路有三条。第一条是把内层频率循环改成矩阵运算一次性对全部频率格点构造核矩阵再逐调频率层做矩阵乘法和ifft。这样省掉了频域循环的Matlab解释器开销。第二条是对调频率层做parfor并行调频率层之间完全独立天然适合并行。第三条是降低初扫密度——先用稀疏的频率格点和调频率格点跑一遍定位到能量集中区域后再在该区域做细化网格精细计算。需要注意ifft之后得到的时间序列长度等于信号长度N而频率格点数可能不等于N二者在存储维度上要匹配。我一开始没统一维度数组索引越界查了半天最后把频率格点数直接设为N才理顺。这也是演示级代码里最容易踩到的低级坑。4.4 问题速查表现象可能原因检查与解决交叉点糊成一团调频率网格太粗或sigma过大局部加密chirps网格调小sigma脊线出现断裂阈值太高或sigma太小降低thresh_ratio适当增大sigma噪声底噪过高阈值太低提高阈值加带通滤波能量虚高一倍未做调频率层最大响应选择重分配前对每个时频点取最佳c层计算极慢三重循环嵌套矩阵化parfor先粗扫再细扫交叉点出现伪峰相位差分估计错误检查是否选择正确调频率层检查相位是否有跳变把文献复现做到能跑只是第一步真正理解每一条参数背后的因果关系才算掌握这个方法。我个人的体会是这套“频域线性调频小波同步挤压”的组合本质上是把二维时频问题提升到三维频率-调频率-时间先用调频率维度把相交分量拉开再用重分配算子把能量压回二维时频平面。理解了这层逻辑再看文献里的各种改进变体——高阶同步挤压、自适应调频率网格、脊线后处理——就不会眼花缭乱。实际动手时建议先从上述演示级代码跑通再逐步替换成优化版本每次只改一个参数观察变化这个习惯能省下大量调参时间。

相关新闻

电动自行车头盔检测工程实践:从数据标注到Docker部署全链路

电动自行车头盔检测工程实践:从数据标注到Docker部署全链路

简介:本资源是一套面向计算机及相关专业本科生的毕业设计级项目——基于深度学习的电动自行车头盔佩戴检测系统,聚焦交通安全管理中的实际识别需求,适用于课程大作业、毕设开发与AI视觉实战训练。资源包共187个文件,含55个核心Pyt…

2026/10/19 6:24:48 阅读更多 →
考研信息共享博客系统毕业设计全攻略:SSM+Vue完整实现

考研信息共享博客系统毕业设计全攻略:SSM+Vue完整实现

不用把毕业设计想得太玄乎。考研信息共享博客系统这种题目,看起来是“SSM Vue 论文 程序”的一整套交付物,本质上就是一件很典型的全栈 Web 开发练习。对 2026 届的同学来说,这个选题好在一点:业务场景非常具体,考研…

2026/10/19 6:23:48 阅读更多 →
把Agent当作一台新计算机:从上下文窗口到工具调用的工程化理解

把Agent当作一台新计算机:从上下文窗口到工具调用的工程化理解

这两年圈子里聊 Agent 的人越来越多,但真正把 Agent 讲透的内容反而更稀缺。我最近给一个业务团队做技术咨询时,反复用到一个视角:把 Agent 当成一台新发明的计算机来理解。这个比喻一开始只是为了方便沟通,后来发现它几乎能解释 …

2026/10/19 6:23:47 阅读更多 →

最新新闻

perf 与火焰图:从热点到定位(接 Perfetto)

perf 与火焰图:从热点到定位(接 Perfetto)

「程序慢」是个太笼统的问题。要优化,第一步永远是定位热点(hotspot):找到那 20% 的代码,它们占了 80% 的运行时间。Linux 的 perf 就是干这个的:它靠采样告诉你「CPU 大部分时间花在哪个函数上」。这篇讲透…

2026/10/19 7:08:09 阅读更多 →
基于指标策略与QP优化的量化投资方法:从信号生成到组合仓位分配

基于指标策略与QP优化的量化投资方法:从信号生成到组合仓位分配

1. 从一根均线到组合优化:这套量化方法到底在解决什么问题做量化投资的人,几乎都经历过这样一个阶段:先用一两个技术指标写个策略,回测曲线漂亮得不行,一上模拟盘就发现完全不是那么回事。问题出在哪儿?大多…

2026/10/19 7:08:09 阅读更多 →
LangChain vs LlamaIndex:知识库问答与AI应用编排如何选型

LangChain vs LlamaIndex:知识库问答与AI应用编排如何选型

先说个常被问到的问题:LangChain 和 LlamaIndex,这两个开源框架到底有什么本质区别,我该用哪一个?这问题我在好几个项目群里都见人反复问过,每次的回答其实都不太一样——因为答案取决于你手里的事情是什么。如果你正打…

2026/10/19 7:08:09 阅读更多 →
从环境配置到代码复现:简易CNN与ResNet搭建实战指南

从环境配置到代码复现:简易CNN与ResNet搭建实战指南

简介:CNN与ResNet是深度学习中两个既有联系又有区别的重要结构。这份Python源码包面向深度学习初学者与入门进阶者,以两周为学习路径,用PyTorch或TensorFlow从零搭建简易CNN和ResNet。通过训练与调参流程,帮助读者理解CNN中卷积、…

2026/10/19 7:08:09 阅读更多 →
AI应用架构师视角:医疗AI精准改变工作流程的落地指南

AI应用架构师视角:医疗AI精准改变工作流程的落地指南

我最早接触医疗AI,是在帮一家医院改造影像报告流程的时候。当时医院最迫切的需求不是“换个更先进的设备”,而是把医生从大量重复的阅片和报告书写里解放出来。我们花了两个月时间,把一个看似简单的“AI先筛一遍、医生再看一遍”的方案落地&a…

2026/10/19 7:08:09 阅读更多 →
Windows PE结构与字符串加密逆向实战:从Minecraft CTF题切入

Windows PE结构与字符串加密逆向实战:从Minecraft CTF题切入

1. 项目概述:从一道Minecraft主题逆向题看Windows PE结构与字符串加密的实战结合“re学习笔记(75)BUUCTF - re - [ACTF新生赛2020]Splendid_MineCraft”——这个标题乍看像是一条普通的学习打卡记录,但拆开来看,它其实…

2026/10/19 7:07:08 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →