齿轮箱故障数据实战:从振动信号到诊断模型的完整链路

简介:齿轮箱故障数据.zip 面向从事机械故障诊断、信号处理与机器学习的研究生、工程师及算法爱好者,提供一套可直接用于实验与建模的齿轮箱运行数据集,帮助解决早期故障检测与预防性维护中的样本获取难题。压缩包共15个文件,约5.91MB,以mat振动信号、png时频图、py分析脚本、csv参数表、txt说明及pdf实验文档为主,覆盖正常、断齿、磨损等多种工况,便于开展特征工程与模型训练。已有844人学习下载,说明其在故障诊断领域具备一定参考热度。读者可借助配套脚本完成振动信号频谱分析、声音与温度趋势观察、扭矩转速波动分析,并利用标注数据训练支持向量机、随机森林或LSTM等模型,同时通过交叉验证与混淆矩阵评估预测效果,为搭建实时监测与预警系统提供完整的数据与代码基础。

1. 齿轮箱故障数据.zip:一份压缩包背后,藏着旋转机械诊断的完整落地链路

很多人第一次看到「齿轮箱故障数据.zip」这个文件名,会下意识以为它只是一堆振动信号表格,解压完就完事。但真正做过旋转机械故障诊断的工程师知道,这个压缩包其实是一条完整链路的起点:从传感器布点、工况标注、信号切片,到特征提取、模型训练、上线推理,每一步都决定了最终能不能在产线上跑起来。它解决的核心问题是——让算法工程师在没有真实故障设备的情况下,也能拿到带标签、带工况、带转速信息的齿轮箱振动数据,把诊断模型从零训到可用。适合谁?适合正在做设备预测性维护、想从公开数据集切入但不知道数据怎么用、特征怎么提、模型怎么评的从业者。下面我按自己踩过的路径,把这份数据从解压到出结果讲透。

2. 先搞清楚齿轮箱故障数据里到底有什么:从文件结构到标签体系

2.1 解压后先别急着读 CSV,先看目录层级和命名规则

拿到「齿轮箱故障数据.zip」之后,我一般不会直接pd.read_csv,而是先tree一遍目录。常见的组织方式是按「工况 / 故障类型 / 测点」三层分文件夹,文件名里带转速和负载。比如load_0hp_speed_1730rpm/gear_root_crack/这种路径,本身就编码了标签信息。如果你跳过这一步直接合并所有文件,后面做交叉验证时会出现同一工况的数据同时出现在训练集和测试集里,指标虚高得离谱,这就是典型的「数据泄漏」翻车现场。

# 先看目录结构,不要急着读数据 find ./gear_fault_data -maxdepth 3 -type d | head -50 # 统计每个故障类别下的文件数量,判断类别是否均衡 find ./gear_fault_data -name "*.csv" | awk -F'/' '{print $(NF-1)}' | sort | uniq -c

上面第一条命令帮你快速看清层级,第二条命令按倒数第二级目录统计文件数。如果某个故障类型只有两三个文件,而正常状态有上百个,那训练时就必须做重采样或类别加权,否则模型会倾向于全部预测成正常。参数上,-maxdepth 3是防止目录太深刷屏,head -50先看个大概。这一步花五分钟,能省掉后面调参时两天的困惑。

2.2 振动信号的采样率、通道数和单位,决定了你后面能提什么特征

齿轮箱振动数据通常包含多个通道:输入轴径向、输出轴径向、轴向,有的还带麦克风或温度。采样率常见是 12kHz、20kHz 或 48kHz。采样率直接决定你能分析的频率上限——根据奈奎斯特,12kHz 采样只能看到 6kHz 以内的成分,而齿轮啮合频率往往在几千赫兹,边带可能在更远处。如果你要做包络谱分析轴承故障,采样率不够就会混叠,特征频率对不上,模型学到的全是假模式。

import scipy.io as sio import numpy as np # 以某通道为例,读取一段振动信号 data = sio.loadmat('./gear_fault_data/load_0hp/speed_1730/gear_crack/ch1.mat') signal = data['vibration'].flatten() # 展平成一维 fs = 12000 # 采样率,必须从说明文件或元数据里确认,不能猜 t = np.arange(len(signal)) / fs print(f"信号长度: {len(signal)} 点, 时长: {t[-1]:.2f} 秒, 采样率: {fs} Hz")

这段代码的关键不是读取本身,而是fs这个参数。我见过太多人直接拿默认值或者从别人博客里抄一个采样率,结果算出来的故障特征频率和理论值差了一大截。正确做法是找数据集自带的说明文件,或者看文件名里有没有12k、48k字样。flatten()是为了防止 MATLAB 文件读出来是二维数组,后面做 FFT 时维度对不上。时长打印出来是为了确认单段信号够不够做一次有效分析,一般至少要有 1 秒以上的稳态数据。

2.3 标签体系怎么映射成模型能吃的格式

齿轮箱故障数据的标签通常分两大类:齿轮故障(断齿、裂纹、磨损)和轴承故障(内圈、外圈、滚动体)。有的数据集还会标注故障程度(轻微、中度、严重)。做分类任务时,我一般会建一个映射字典,把文件夹名映射成整数标签,同时保留原始名称用于可视化。

import os from pathlib import Path label_map = { 'healthy': 0, 'gear_crack': 1, 'gear_wear': 2, 'bearing_inner': 3, 'bearing_outer': 4, 'bearing_ball': 5 } def build_file_list(root_dir): samples = [] for path in Path(root_dir).rglob('*.mat'): # 从路径中提取故障类型,假设倒数第二级是类别名 category = path.parent.name if category in label_map: samples.append((str(path), label_map[category])) return samples file_list = build_file_list('./gear_fault_data') print(f"共找到 {len(file_list)} 个样本") for cls in set(l for _, l in file_list): print(f"类别 {cls}: {sum(1 for _, l in file_list if l == cls)} 个")

这里用rglob递归查找所有.mat文件,path.parent.name取的是文件所在文件夹名。映射字典的键必须和实际文件夹名完全一致,大小写敏感。打印每个类别的样本数是为了检查均衡性,如果某个类别样本极少,后面就要考虑数据增强或者换评价指标(比如用宏平均 F1 而不是准确率)。这一步的输出直接决定你后面是走普通分类还是异常检测路线。

3. 从原始振动到特征向量:时域、频域、时频域三条路怎么选

3.1 时域特征计算快但容易被工况带偏,适合做基线

时域特征包括均方根、峰值、峭度、裕度等,计算量小,适合在边缘设备上做实时粗筛。但它们的绝对值受负载和转速影响很大,同一故障在不同工况下可能数值差好几倍。我一般会先算一批时域指标,看看类间有没有可分性,如果有,说明数据质量不错;如果完全混在一起,就得往频域走。

from scipy.stats import kurtosis, skew def time_domain_features(signal): rms = np.sqrt(np.mean(signal**2)) peak = np.max(np.abs(signal)) kurt = kurtosis(signal) skewness = skew(signal) crest = peak / rms if rms > 0 else 0 return { 'rms': rms, 'peak': peak, 'kurtosis': kurt, 'skewness': skewness, 'crest_factor': crest } feat = time_domain_features(signal) print(feat)

rms反映能量,kurtosis对冲击成分敏感,齿轮断齿或轴承剥落时峭度会明显升高。crest_factor是峰值和有效值的比值,对早期故障比 RMS 更灵敏。但注意,峭度对转速变化也敏感,如果数据集里转速波动大,峭度会跟着抖。我一般会把时域特征和转速一起作为输入,让模型自己去学工况补偿。

3.2 频域特征要先把转速搞清楚,否则阶次分析全是错的

齿轮箱的频域特征核心是啮合频率及其边带。啮合频率等于轴转频乘以齿数。如果你不知道齿数,可以看频谱里能量最高的那个峰,反推啮合频率,再结合转速算齿数。边带间隔通常等于故障齿轮所在轴的转频,这是定位故障齿轮的关键。

def freq_domain_features(signal, fs): n = len(signal) fft_vals = np.fft.rfft(signal * np.hanning(n)) # 加汉宁窗减少泄漏 fft_mag = np.abs(fft_vals) / n freqs = np.fft.rfftfreq(n, 1/fs) # 找前5个峰值 idx = np.argsort(fft_mag)[-5:][::-1] peaks = [(freqs[i], fft_mag[i]) for i in idx] return freqs, fft_mag, peaks freqs, mag, peaks = freq_domain_features(signal, fs) for f, m in peaks: print(f"频率 {f:.1f} Hz, 幅值 {m:.4f}")

加汉宁窗是为了减少频谱泄漏,否则峰值附近会出现虚假的旁瓣,干扰边带判断。rfft只算正频率部分,因为实信号的负频率是共轭对称的,没必要算。找前五个峰值后,你要拿这些频率和理论啮合频率、转频去对,对上了说明数据没问题,对不上就要检查采样率或者转速标注是不是错了。这一步是后面所有频域特征的地基,地基歪了,模型再复杂也没用。

3.3 时频域用 STFT 或小波,适合变转速工况但计算量大

如果数据集里转速是变化的(比如升降速过程),纯频域分析会 smear 掉故障特征,这时候要用短时傅里叶变换或小波变换。STFT 的窗口长度是核心参数:窗口太短,频率分辨率不够;窗口太长,时间分辨率不够。我一般先用 256 或 512 点窗口试,看时频图里故障冲击有没有形成清晰的竖条纹。

from scipy.signal import stft def time_freq_features(signal, fs, nperseg=256): f, t, Zxx = stft(signal, fs=fs, nperseg=nperseg, noverlap=nperseg//2) mag = np.abs(Zxx) # 按频带统计能量,比如0-1kHz, 1-2kHz... band_energy = [] for i in range(0, len(f)-1, 10): band_energy.append(np.mean(mag[i:i+10, :])) return f, t, mag, np.array(band_energy) f, t, mag, band_energy = time_freq_features(signal, fs) print(f"时频矩阵形状: {mag.shape}, 频带数: {len(band_energy)}")

nperseg=256在 12kHz 采样下对应约 21ms 的时间窗,频率分辨率约 47Hz。noverlap设成一半是为了让帧之间平滑过渡。band_energy是把频谱按每 10 个频点一组求平均,相当于做了个粗糙的频带能量统计,可以直接作为特征喂给分类器。时频特征维度高,后面一定要做降维或者用 CNN 自动提特征,不然传统分类器会被维度灾难拖垮。

4. 把特征喂给模型:从随机森林到一维 CNN 的选型与调参

4.1 传统机器学习基线:随机森林在几百个样本上往往比深度学习稳

如果每个故障类别只有几十到几百个样本,我第一版一定用随机森林或 SVM 做基线。特征就是前面算的时域加频域统计量,维度控制在 20 到 50 之间。这个基线跑出来,你才知道数据本身有没有可分性。如果随机森林都做不好,上深度学习大概率也是白搭。

from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score from sklearn.preprocessing import StandardScaler import numpy as np # 假设 X 是特征矩阵,y 是标签 X = np.array([list(time_domain_features(s).values()) for s, _ in file_list]) y = np.array([l for _, l in file_list]) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) clf = RandomForestClassifier(n_estimators=200, max_depth=10, random_state=42) scores = cross_val_score(clf, X_scaled, y, cv=5, scoring='f1_macro') print(f"5折交叉验证 F1: {scores.mean():.3f} ± {scores.std():.3f}")

StandardScaler必须加,因为峭度和 RMS 的量纲差好几个数量级,树模型虽然对尺度不敏感,但 SVM 和后续的神经网络很敏感。n_estimators=200是经验值,再多提升有限。max_depth=10是防止过拟合,样本少的时候树太深会记住噪声。cv=5做五折交叉验证,f1_macro对类别不均衡比准确率更公平。如果 F1 低于 0.6,先别调模型,回去检查特征和标签有没有对错。

4.2 一维 CNN 直接吃原始信号:省去手工特征但需要更多数据

当样本量上千时,我会用一维 CNN 直接对原始振动信号做端到端分类。输入是固定长度的信号段,比如 2048 点。网络结构一般三到四层卷积加池化,最后全局平均池化接全连接。这样省去了手工设计特征的麻烦,但需要的数据量也更大,而且对信号对齐很敏感。

import torch import torch.nn as nn class GearCNN(nn.Module): def __init__(self, num_classes=6): super().__init__() self.conv1 = nn.Conv1d(1, 16, kernel_size=15, stride=2, padding=7) self.conv2 = nn.Conv1d(16, 32, kernel_size=9, stride=2, padding=4) self.conv3 = nn.Conv1d(32, 64, kernel_size=5, stride=2, padding=2) self.pool = nn.AdaptiveAvgPool1d(1) self.fc = nn.Linear(64, num_classes) self.relu = nn.ReLU() self.bn1 = nn.BatchNorm1d(16) self.bn2 = nn.BatchNorm1d(32) self.bn3 = nn.BatchNorm1d(64) def forward(self, x): x = self.relu(self.bn1(self.conv1(x))) x = self.relu(self.bn2(self.conv2(x))) x = self.relu(self.bn3(self.conv3(x))) x = self.pool(x).squeeze(-1) return self.fc(x) model = GearCNN() print(model)

第一层卷积核设 15,是为了覆盖低频冲击的持续时间;后面逐层减小核尺寸,让网络从局部波形逐渐抽象到全局模式。stride=2是下采样,减少计算量。BatchNorm放在卷积和激活之间,能加速收敛。AdaptiveAvgPool1d(1)把任意长度的特征图压成一个值,这样输入信号长度可以灵活调整。训练时学习率一般从 1e-3 开始,用 Adam 优化器,batch size 设 32 或 64。如果验证集损失震荡,先把学习率降到 1e-4。

4.3 迁移学习:把在仿真数据上预训练的模型搬到真实数据上

真实故障数据往往很少,但仿真数据可以无限生成。我一般会先在仿真数据上训一个 CNN,然后把卷积层冻结,只微调全连接层。这样在小样本上也能拿到不错的精度。关键是仿真数据的工况分布要尽量覆盖真实场景,否则迁移效果会大打折扣。

# 假设 pretrained_model 是在仿真数据上训好的 pretrained_model = GearCNN() # 冻结卷积层 for param in pretrained_model.conv1.parameters(): param.requires_grad = False for param in pretrained_model.conv2.parameters(): param.requires_grad = False # 只训练全连接层 optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, pretrained_model.parameters()), lr=1e-4)

冻结卷积层是因为底层特征(边缘、冲击)在仿真和真实之间差异不大,而高层语义差异大,需要重新学。学习率设 1e-4 比从头训练小一个数量级,防止把预训练权重冲掉。如果微调后效果还是差,可以解冻最后一层卷积一起训,但学习率要再降。这个策略在样本少于 500 时特别有用,但前提是仿真数据不能太假,否则就是负迁移。

5. 避坑与排查:齿轮箱故障诊断里最容易翻车的五个地方

5.1 现象:交叉验证 F1 很高,上线后一塌糊涂

原因:数据泄漏。同一段信号被切片后,不同片段分到了训练集和测试集,模型其实在背答案。解决:按「文件」或「工况」划分训练测试集,而不是按切片。用GroupKFold按工况分组,确保同一工况不出现在两边。

5.2 现象:模型把正常样本全预测成故障

原因:类别极度不均衡,正常样本占 90% 以上。解决:训练时给少数类加权,或者用 focal loss。评价指标换成宏平均 F1 或 AUC,别再看准确率。

5.3 现象:频域峰值对不上理论啮合频率

原因:采样率标错,或者转速单位是 rpm 而代码里当成了 Hz。解决:统一单位,转速除以 60 才是转频。检查数据集说明文件,别信文件名里的数字。

5.4 现象:CNN 训练损失不下降

原因:输入信号没有归一化,或者标签编码从 1 开始而 PyTorch 要求从 0 开始。解决:对每个信号做 z-score 标准化,标签统一减最小值。检查CrossEntropyLoss的输入范围。

5.5 现象:时频图里故障冲击被噪声淹没

原因:信噪比太低,或者 STFT 窗口选得不对。解决:先做带通滤波,保留啮合频率附近的频带。窗口长度根据冲击持续时间调,一般取冲击周期的 2 到 3 倍。

6. 进阶技巧:用包络谱和阶次分析把早期故障从噪声里抠出来

前面讲的时域和频域特征,对中度以上故障很有效,但早期故障的冲击能量很弱,直接看频谱往往被啮合频率的边带和噪声盖住。我后来习惯先做包络谱:对信号做带通滤波,只保留轴承或齿轮共振频带,然后做希尔伯特变换取包络,再对包络做 FFT。这样故障特征频率会以清晰的峰值出现在低频段,比原始频谱好认得多。

from scipy.signal import hilbert, butter, filtfilt def envelope_spectrum(signal, fs, band=(2000, 4000)): # 带通滤波,保留共振频带 b, a = butter(4, [band[0]/(fs/2), band[1]/(fs/2)], btype='band') filtered = filtfilt(b, a, signal) # 希尔伯特变换取包络 envelope = np.abs(hilbert(filtered)) # 对包络做FFT n = len(envelope) env_fft = np.abs(np.fft.rfft(envelope - np.mean(envelope))) / n freqs = np.fft.rfftfreq(n, 1/fs) return freqs, env_fft freqs, env_spec = envelope_spectrum(signal, fs) # 找包络谱里前三个峰值 idx = np.argsort(env_spec)[-3:][::-1] for i in idx: print(f"包络谱峰值: {freqs[i]:.1f} Hz")

带通范围(2000, 4000)不是随便写的,要先看原始频谱里共振峰在哪个频段。butter(4, ...)是四阶巴特沃斯滤波器,filtfilt做零相位滤波,避免相位失真。希尔伯特变换后取模得到包络,减均值是为了去掉直流分量。包络谱里的峰值如果和轴承内圈、外圈、滚动体的理论故障频率对上,基本就能确诊。这个方法的坑在于带通范围选错,如果共振频带没覆盖到,包络谱里什么也看不到。我一般会先画原始频谱,手动找共振峰,再定带通。

另一个进阶方向是阶次分析。变转速工况下,频率会随时间漂移,但阶次(频率除以转频)是固定的。做阶次分析需要转速信号,如果数据集没给,可以从振动信号里用瞬时频率估计反推。算出阶次谱后,齿轮故障的阶次成分会非常稳定,不受转速波动影响。我一般会把阶次谱的前几十个阶次能量作为特征,喂给分类器,效果比直接用频谱好一截。

最后说一个我自己的习惯:每次拿到新的齿轮箱数据,先花半天时间做可视化,把每个类别的时域波形、频谱、包络谱各画几张图,肉眼看看有没有明显差异。如果肉眼看不出区别,就别指望模型能学出来。这个习惯帮我省掉了无数次无效调参。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

VLAN基本原理:802.1Q标签、Trunk与PVID排错实践

VLAN基本原理:802.1Q标签、Trunk与PVID排错实践

这是我网络学习日志的第13篇,主题锁定在VLAN基本原理。之所以把这么基础的东西单独拎出来写一篇,是因为前阵子在模拟项目X里搭实验时被它狠狠教育了一回:两台交换机的配置看起来没毛病,Access、Trunk都设了,但还是出现…

2026/10/20 2:26:29 阅读更多 →
上线 10 小时冲进 ModelScope 前十:DeepSeek 视觉实验版的开源速度战

上线 10 小时冲进 ModelScope 前十:DeepSeek 视觉实验版的开源速度战

上线 10 小时冲进 ModelScope 前十:DeepSeek 视觉实验版的开源速度战 【免费下载链接】DeepSeek-V4-Flash-Vision-Exp 项目地址: https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp 8 月底的这十天,AI 圈发生了两件事…

2026/10/20 2:26:29 阅读更多 →
数控机床联网数据采集方案:从接口适配到车间看板实战

数控机床联网数据采集方案:从接口适配到车间看板实战

车间里的设备,最怕的不是机器本身出故障,而是“机器明明在干活,但管理者两眼一抹黑”。车间主任想知道今天开动了几台设备、每台设备实际加工了多少件、有没有频繁报警停机;工艺员想知道某道工序的实际加工时间是不是和编程预估的…

2026/10/20 2:25:29 阅读更多 →

最新新闻

熵权TOPSIS多指标决策:从数据离散度到方案排序的完整MATLAB实现

熵权TOPSIS多指标决策:从数据离散度到方案排序的完整MATLAB实现

简介:本资源是一套面向高校学生、科研人员及工程决策者的熵权TOPSIS多属性综合评价建模实践包,聚焦解决经济分析、项目评估、技术选型等场景下的方案排序与优选问题。压缩包共5个文件(4个MATLAB源码文件 1份Word建模说明文档)&am…

2026/10/20 18:55:57 阅读更多 →
Rust与AI协同开发:破解类型、所有权与宏的三大卡点

Rust与AI协同开发:破解类型、所有权与宏的三大卡点

1. 项目概述:这不是AI的“能力短板”,而是Rust语言特性的必然回响 “当AI写代码遇见Rust为什么会卡壳”——这句话最近在开发者社区里反复刷屏,不是因为某个新模型崩了,而是大量一线工程师在真实场景中集体撞上了同一堵墙&#xf…

2026/10/20 18:55:57 阅读更多 →
Anaconda与PyCharm集成指南:解释器配置与调试实战

Anaconda与PyCharm集成指南:解释器配置与调试实战

1. 为什么装了 Anaconda 之后还要折腾 PyCharm很多人第一次接触 Python 数据科学或者机器学习,第一步就是装 Anaconda。装完之后打开 Anaconda Navigator,发现里面有个 Spyder,也能写代码,也能跑,于是就觉得“够了”。…

2026/10/20 18:55:57 阅读更多 →
GEO实战:RAG链路与品牌知识图谱如何重塑AI搜索可见性

GEO实战:RAG链路与品牌知识图谱如何重塑AI搜索可见性

做GEO的人如果绕开RAG链路去谈品牌曝光,基本等于隔着防火墙调SEO落地页——方向没错,但路径根本不通。生成式引擎的每一次回答,背后都是一条“召回-重排-生成”的流水线,品牌信息能不能进入AI的答案,取决于你是否把信息…

2026/10/20 18:55:57 阅读更多 →
自己无法登录?从密码哈希到账号锁定的排查全记录

自己无法登录?从密码哈希到账号锁定的排查全记录

“自己无法登录?”——看到这个标题时,我第一反应是写下这行字的人又得加班了。因为这类问题记录通常不是用户报上来的,而是开发者自己在联调环境里敲了半天密码,页面却始终不认账。我最近也撞上了几乎一样的事:一个内…

2026/10/20 18:55:57 阅读更多 →
基于Simulink的龙伯格观测器无传感器转速估计建模与仿真

基于Simulink的龙伯格观测器无传感器转速估计建模与仿真

做电机驱动的,很多场合不想装编码器。装一个编码器不仅贵,振动、油污、线缆耦合、安装间隙,哪一样都是售后问题的来源。于是龙伯格观测器(Luenberger Observer)就成了替代方案里最常见的一种——它不需要额外硬件&…

2026/10/20 18:54:56 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →