维纳滤波器设计代码:从统计估计到信号去噪的完整实现
简介这套维纳滤波器MATLAB源码围绕最小均方误差准则设计面向信号处理初学者与图像复原、语音降噪开发者提供三个可直接运行的m文件分别对应二维图像滤波与语音/拼音数据处理两种典型场景。代码覆盖了自相关函数估计、功率谱密度计算、频域传递函数构造等核心步骤同时体现时域卷积与频域滤波两种设计思路适合课程设计或算法对比。压缩包仅1KB内含三个m文件结构精简但知识点集中能快速理解维纳滤波的落地写法。目前已有446人学习浏览是入门维纳滤波的轻量范例。直接运行并调整参数可观察不同噪声水平下的复原效果体会噪声抑制与细节保留的平衡以及FFT加速、子块处理等工程化技巧整体便于快速上手实验。1. 维纳滤波器设计代码先懂它是“估计”才谈得上“滤波”做信号去噪的同行应该都有这种经历拿到一段含噪信号第一反应是上带通滤波器结果噪声没压下去有用信号的高频细节倒先没了。维纳滤波器设计代码解决的是这个更本质的问题——它不再按“某段频率该保留、某段该切掉”来做固定滤波而是根据信号和噪声的统计特性对每个频点估计一个最优增益让滤波后的信号在均方误差意义上最接近原始干净信号。也就是说维纳滤波器不是一组固定系数而是一次针对当前信号和噪声分布的“统计估计”。常见的做法是把维纳滤波分成频域和时域两条实现路线。频域路线按帧处理核心是估计先验信噪比并计算维纳增益时域路线则通过求解维纳-霍夫方程拿到一组FIR系数。两条路线各有适用场景频域实现灵活、适合语音和传感器信号在线去噪代价是延迟和块效应时域实现适合系统辨识和离线分析系数物理意义清楚但对自相关矩阵的估计质量敏感。本文会给几段可直接运行的设计代码把两条路线的关键步骤、参数取法和翻车点一次说清适合正在搭去噪流程、或想把手里的滤波方案从“按频率硬切”升级成“按统计自适应”的人。读完你至少能复现出一套可测信噪比提升的维纳去噪链路并知道自己调参时到底在调什么。2. 频域维纳滤波设计代码先验SNR与增益函数怎么配频域维纳滤波的核心推理并不复杂把信号按帧做FFT到频域后每个频点上的观测是干净谱与噪声谱的叠加。假设二者不相关在最小均方误差准则下最优增益是该频点的先验信噪比 xi 除以xi 1。也就是说信噪比越高的频点增益越接近1越干净的信噪比接近0的频点增益被压得越低。设计代码的关键不在这个公式本身而在于“先验信噪比怎么估计”。2.1 频域实现的最小流程加窗、FFT、增益、重叠相加先给一段可以完整跑通的频域维纳滤波代码输入一段含噪信号和噪声功率谱估计输出滤波后的信号。这里用重叠相加法消除分帧边界。import numpy as np from scipy.fft import rfft, irfft def wiener_filter_fd(x, noise_psd, fs16000, win_len512, hop128, alpha0.98): 频域维纳滤波decision-directed先验SNR估计 x: 含噪信号一维float数组 noise_psd: 噪声功率谱估计长度 win_len//2 1由纯噪声段得到 win np.hanning(win_len).astype(np.float32) n_frames (len(x) - win_len) // hop 1 # 预分配输出缓冲后续做重叠相加 out np.zeros(len(x), dtypenp.float32) win_sum np.zeros(len(x), dtypenp.float32) # 决策指导估计中的上一帧先验SNR初始为0 xi_prev np.zeros(win_len // 2 1, dtypenp.float32) for i in range(n_frames): start i * hop frame x[start:start win_len].astype(np.float32) * win spec rfft(frame) # 复频谱 mag np.abs(spec) # 幅值谱 phase np.angle(spec) # 相位谱 # 后验SNR: 观测功率 / 噪声功率 gamma (mag ** 2) / (noise_psd 1e-10) # decision-directed 先验SNR估计 xi alpha * xi_prev (1.0 - alpha) * np.maximum(gamma - 1.0, 0.0) xi_prev xi # 维纳增益加一个下限避免完全消除 gain xi / (xi 1.0) gain np.maximum(gain, 0.05) filtered mag * gain * np.exp(1j * phase) frame_out irfft(filtered, nwin_len) # 重叠相加 out[start:start win_len] frame_out * win win_sum[start:start win_len] win ** 2 # 归一化消除加窗带来的幅度损失 win_sum np.maximum(win_sum, 1e-10) out out / win_sum return out这段代码里最需要理解的有三处窗函数、重叠率、先验SNR递归。win_len取512点时在16kHz采样率下对应32ms这是语音去噪最常见的帧长既能保证频域分辨率足够表达语音的共振峰结构又不会让帧内信号过度非平稳。hop 128表示帧移为窗长的四分之一也就是75%重叠这样做的直接效果是让重叠相加时窗函数平方之和更接近常数大幅削弱块效应。alpha是先验SNR估计中的平滑因子取值在0.9到0.99之间它控制了先验SNR跟随后验SNR的速度alpha越接近1估计越平滑但突变噪声出现时响应越慢alpha偏低则跟随快但容易出现所谓的“音乐噪声”。2.2 decision-directed先验SNR估计alpha与噪声地板decision-directed方法是语音增强里的经典做法它不用当前帧直接算先验SNR而是用上一帧的先验SNR和当前帧的后验SNR做递归。写成公式就是xi(t, k) alpha * xi(t-1, k) (1 - alpha) * max(gamma(t, k) - 1, 0)其中gamma是后验SNR。之所以要这样绕一圈直接用gamma - 1作为先验SNR估计方差极大那些瞬时功率突起的频点会被误判为语音成分于是去噪后留下很多短促的“啁啾”声。而alpha足够大时先验SNR变得平滑增益曲线就不会剧烈抖动这是整个频域维纳滤波听感好坏最重要的一个参数。代码里的noise_psd必须是稳态噪声的功率谱估计一般取信号前200ms~500ms的纯噪声段逐帧平均得到。噪声地板的含义是即便某个频点当前帧没有语音也会有一个不为零的噪声能量作为分母保证增益不会无约束地放大。设置gain np.maximum(gain, 0.05)是给增益定了一个地板防止去噪把某些弱语音段彻底抹掉——当整段的先验SNR都很低时0.05的增益意味着最极端的压制也有-26dB的下限这在实际听感上比完全置零要自然得多。2.3 增益函数的两种选择与SNR下限保护维纳增益xi / (xi 1)是经典形式但在低SNR条件下它衰减过快。谱减法的增益形式可以作为一个对比gain sqrt(xi / (xi 1))。二者在高SNR区域差别不大差异主要出现在SNR接近0dB甚至更低的频点维纳增益此时只有0.5而开方形式还有约0.7语音保留得更多残余噪声也更明显。实际项目中我会让增益形式可切换脱机测试时用客观指标选在线跑时用开方形式保听感。# 增益函数切换示例 def wiener_gain(xi, modewiener, gain_floor0.05): if mode wiener: g xi / (xi 1.0) elif mode sqrt_wiener: g np.sqrt(xi / (xi 1.0)) else: raise ValueError(mode must be wiener or sqrt_wiener) return np.maximum(g, gain_floor)参数说明mode选wiener时去噪更彻底残余噪声少但偶有语音损伤选sqrt_wiener时语音保留更好噪声残留稍多。gain_floor是保护下限它应当小于等于0.1否则去噪能力会明显不足。需要注意频域维纳滤波全程只改幅度谱、不换相位谱人耳对相位不敏感所以这样做可行。但如果你的目标是从含噪信号里恢复一个严格意义的波形用于后续处理比如震动信号的特征提取相位失真可能会影响特征稳定性这时应该转向时域维纳滤波器设计。3. 时域维纳-霍夫方程求解从自相关矩阵到FIR系数的三条路时域维纳滤波的思路和频域完全不同它不再逐帧计算增益而是设计一个固定的或者缓慢更新的FIR滤波器让滤波器的输出与期望信号之间的均方误差最小。设输入信号为x[n]期望信号为d[n]滤波器系数为w [w_0, w_1, ..., w_{n-1}]则维纳-霍夫方程写为R * w p其中R是输入信号的自相关矩阵p是输入与期望信号的互相关向量。解出w后对这个滤波器做卷积就是维纳滤波的输出。3.1 直接解Toeplitz方程构造R和p自相关矩阵R是Toeplitz结构主对角线是r[0]次对角线是r[1]依此类推。p[i]是x[n-i]与d[n]的互相关。直接用数值库解这个线性方程最省事代码也最不容易出错。import numpy as np from scipy.linalg import toeplitz, solve_toeplitz def design_wiener_fir(x, d, n_taps32): 从一段输入信号x和期望信号d设计维纳滤波器FIR系数 x: 含噪观测信号 d: 期望信号通常来自同一采样率下的干净参考 n_taps: 滤波器阶数 1 返回: 维纳滤波器系数w N len(x) # 自相关: r[k] E[x[n] * x[n-k]] r np.correlate(x, x, modefull)[N-1:Nn_taps] r r / N # 归一化得到自相关估计 # 互相关: p[k] E[x[n-k] * d[n]] p np.correlate(d, x, modefull)[N-1:Nn_taps] p p / N # 解 Toeplitz 方程 R * w p w solve_toeplitz((r, r), p) return w这段代码的逻辑是采样点数为N的信号np.correlate(x, x, modefull)得到长度为2N-1的互相关序列正中间的索引是零延迟相关。从[N-1]开始取n_taps个值正好对应r[0]到r[n_taps-1]。除以N是把累积和相关变成期望意义上的自相关。关键参数是n_taps。它决定了滤波器在频域的分辨率阶数越高滤波器的频响越精细能更好地刻画信号和噪声的谱形状差异但阶数越高需要的用于估计自相关的数据长度也越长否则矩阵病态。实际经验是16kHz采样率下做语音去噪32到64阶是平衡点低于16阶滤波器频响太粗只能做整体幅度调整高于128阶除非你有超过3秒的平稳数据否则自相关矩阵的估计误差会显著影响系数稳定性。3.2 Levinson-Durbin递推样本少时更稳的一条路直接解Toeplitz方程的问题在于当R接近奇异时——比如信号是窄带或纯周期成分——数值解会抖动得很厉害。Levinson-Durbin递推利用Toeplitz矩阵的结构从1阶逐步递推到n阶每一步只做少量向量运算数值稳定性更好而且能顺带给出每一阶的预测误差功率这对判断该用多少阶有直接帮助。def levinson_durbin(r, p_vec, order): Levinson-Durbin求解Toeplitz方程 R*w p_vec r: 自相关序列 r[0..order] p_vec: 互相关向量 p[0..order-1] 返回滤波器系数w w np.zeros(order, dtypenp.float64) e r[0].real # 预测误差功率初始为 r[0] # 1阶情形先行计算 k p_vec[0] / (e 1e-10) w[0] k e e * (1.0 - k * k) for m in range(2, order 1): # 计算反射系数 k_num p_vec[m-1] for j in range(1, m): k_num - r[j] * w[m-j-1] k k_num / (e 1e-10) # 更新滤波器系数: 前m个 new_w np.zeros(m, dtypenp.float64) new_w[:m-1] w[:m-1] - k * w[:m-1][::-1] new_w[m-1] k w new_w e e * (1.0 - k * k) return w这里p_vec长度应等于order。递推过程每步计算一个反射系数k可以把它理解为当前阶数下“新增的预测贡献”如果k的绝对值接近1说明信号有很强的周期性成分矩阵趋于奇异。代码中用了1e-10做分母保护。这个递推式的代价是O(order^2)比直接矩阵求逆快得多而且不需要显式构造矩阵内存占用从order * order降到了order。3.3 滤波器阶数n的选择从频响分辨力到延迟阶数的选择直接影响三个指标频响细节、相位延迟、系数稳定性。二阶小节的表可以说明问题信号为16kHz采样语音阶数频响分辨率引入延迟适用场景8约2kHz一格0.5ms粗略谱形校正实时性优先的低功耗嵌入式32约500Hz一格1ms语音宽带去噪系数估计稳定64约250Hz一格2ms可捕捉共振峰和窄带噪声需要足够数据量128约125Hz一格4ms离线处理、系统辨识要求数据平稳FIR滤波器引入的延迟约为(n_taps - 1) / 2 / fs秒。对实时应用32阶带来的1ms延迟可忽略对闭环控制系统比如用维纳滤波器做传感器信号的前馈补偿128阶的4ms延迟可能直接让系统稳定性恶化。我一般以目标信号的最窄谱特征周期为基准滤波器阶数应至少覆盖两个最窄特征周期再多就容易过拟合。时域设计的另一个常用技巧是对角加载。当自相关矩阵R的条件数过大时给R的对角线加一个小量lambda * r[0]例如lambda 0.01可以让解稳定。代价是滤波器不再严格最优SNR提升会损失不超过0.3dB换来的却是系数不会出现极大的振荡。4. 维纳滤波设计代码的常见坑噪声谱估计、边界效应与参数翻车维纳滤波设计代码的问题大都出在“统计量估计不准”和“帧处理边界处理不当”这两类根源上。下面几条都是实际调试中反复踩过的坑按现象、原因、解决写清楚。4.1 现象去噪后声音发闷高频被削把含噪语音跑完频域维纳滤波出来的声音低频厚重、高频发闷像隔了一层布。原因几乎全是噪声功率谱估计偏高。当noise_psd被高估时所有频点的先验SNR都被拉低增益整体偏小高频段本来信噪比就低于是被压制得更厉害。我遇到过一次是用前300ms做噪声段估计但那300ms里其实混进了一段键盘敲击声噪声谱中高频被临时抬高。解决方法是检查噪声段选取是否“干净”同时给噪声谱估计加上下限保护noise_psd np.maximum(noise_psd, np.median(noise_psd) * 0.1)。下限保护的作用是避免个别频点噪声能量接近0时后验SNR爆炸性增长导致该频点增益接近1、噪声直接通过。4.2 现象去噪后出现“音乐噪声”短促啁啾声不断音乐噪声是频域去噪最典型的翻车现场滤波后残留的噪声听起来像一段段短促的、随机音高的哨声这是因为某些频点的增益在帧与帧之间剧烈变化这一帧保留、下一帧压制形成了断续的窄带噪声。根源是先验SNR估计的平滑程度不够alpha太小或者帧长太短导致频谱估计方差过大。解决方法是把alpha从0.9上调到0.96以上。如果还不行就把帧长从512点加到1024点。需要权衡的是alpha太大时对冲击噪声的响应变慢表现为突发噪声之后会有约100ms的“尾巴”去不干净。4.3 现象滤波后的信号幅度周期性起伏像有人反复拧音量听起来不是噪声而是语音本身的音量在一抖一抖地波动。这个问题出在重叠相加归一化上。如果重叠率不是窗长的整数分母或者用了非对称窗win_sum在局部不等于常数于是逐帧去噪后再叠回去每一帧的增益略有不同宏观上就形成幅度调制。解决方法是固定重叠率为75%并检查win_sum序列的波动范围(win_sum.max() - win_sum.min()) / win_sum.mean()应小于0.01。如果超出改用平方根汉宁窗np.sqrt(np.hanning(win_len))这样win ** 2的叠加和更接近常数。4.4 现象时域设计的滤波器低频增益异常偏高输出有“隆隆”声用维纳-霍夫方程求出的FIR系数做卷积低频被明显放大输出一段沉闷的隆隆声。这通常是因为期望信号d与输入信号x之间没有对齐。维纳滤波假设输入是期望信号的含噪版本二者按时间对齐才满足x[n] d[n] v[n]的加性关系。如果d比x提前了哪怕十几个采样点互相关向量p就会出现整体偏移滤波器会把一部分“未来”的信息也加权进来在低频段形成放大。解决方法是先做互相关峰值定位找到d相对x的延迟把d按延迟对齐后再重新估算p。代码上可以用np.argmax(np.correlate(d, x, modefull))得到峰值索引。5. 用合成信号验证设计代码以及一个迭代维纳技巧设计代码跑通了第一件事不是接真实数据而是用完全可控的合成信号验证正确性。我一般生成一段已知的干净信号比如正弦叠加与扫频叠加上白噪声或粉噪声然后用设计代码去噪比较输出与干净信号的均方误差、信噪比改善量和波形相关性。信噪比提升达到理论预期附近说明代码正确如果差异很大优先怀疑噪声谱估计和帧参数而不是维纳滤波原理本身。客观指标至少看三个分段信噪比改善、谱距离、时域波形相关系数。信噪比改善是主指标谱距离反映听感层面“是否发闷”相关系数则约束波形不要被过度整形。三者的合理趋势是同时改善如果信噪比提升但谱距离反而变大说明噪声被压下去了但语音结构也有了损伤这时候应该降低增益压制强度。一个进阶技巧是迭代维纳滤波。第一遍滤波输出已经比原始含噪信号干净此时用输出信号重新估计噪声谱——即原始含噪信号减去滤波输出的残余作为新的噪声估计——再做第二遍维纳滤波。这样做的原因是第一遍的噪声谱估计可能偏低或偏高迭代可以让估计逐步逼近真实的噪声分布。实际操作中两到三次就能收敛超过三次增益极小但计算代价翻倍。def iterative_wiener(x, noise_init, rounds2, **kwargs): 迭代维纳滤波每轮用新估计的残余噪声更新noise_psd y x.astype(np.float32) noise_psd noise_init.copy() for _ in range(rounds): y_clean wiener_filter_fd(x, noise_psd, **kwargs) residual x - y_clean # 用残余噪声段重新估计噪声谱 noise_psd np.mean(np.abs(rfft(residual * np.hanning(len(residual)))) ** 2) return y_clean迭代时注意残余噪声里如果还混有语音泄漏成分噪声谱会被高估下一遍滤波会把语音也压掉一部分。所以第二遍时可以把残余信号里能量最高的5%帧剔除后再估计噪声谱。这是我自己的习惯先用能量阈值判断哪些帧大概率还有语音残留只拿剩余帧更新噪声谱。写了好几版维纳滤波器设计代码之后我最深的体会是这玩意儿在原理上只有一页纸工程上九成时间都在跟“估计不准”做斗争。噪声谱估计不准频域增益就失真自相关估计不准时域系数就飘。能把这些统计量估计稳了剩下的参数调整只是微调。希望这篇笔记能帮你少走几段弯路把你的维纳滤波器代码一次调到一个能拿得出手的听感水平。本文还有配套的精品资源点击获取

相关新闻

程序员持续学习系统:从选学到用,构建真正的职业优势

程序员持续学习系统:从选学到用,构建真正的职业优势

我从一个很具体的现象讲起:这两年的技术圈,光是每天冒出来的新框架、新模型、新工具,就足够让一个在职程序员产生“不学就掉队”的恐慌。身边不少同行在这种恐慌下疯狂囤课、刷帖、收藏文章,一年下来却发现,收藏夹从没…

2026/10/18 22:38:47 阅读更多 →
CSS盒模型实战:用TaoToken统一Key调试多端布局的完整配置大纲

CSS盒模型实战:用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/18 22:38:46 阅读更多 →
猫眼Top100电影爬虫、数据清洗、分析与可视化实战

猫眼Top100电影爬虫、数据清洗、分析与可视化实战

简介:基于Python构建的猫眼电影数据爬取、分析与可视化综合项目,主要面向Python学习者、数据分析入门者及需要完成期末大作业的高校学生。项目以猫眼电影为素材,完整覆盖数据爬取、清洗存储、统计分析及可视化展示全流程,能够直接…

2026/10/18 22:38:46 阅读更多 →

最新新闻

Dify工作流实现双模型分栏流式对比:从原理到实践

Dify工作流实现双模型分栏流式对比:从原理到实践

最开始我对比两个模型的回答质量,用的还是最笨的办法:开两个浏览器标签页,把同一个问题分别粘进去,再左右来回切。遇到长回答还得自己对对齐位置,效率低到让人怀疑人生。直到我把这套动作搬进 Dify,用可视化…

2026/10/19 6:51:01 阅读更多 →
击剑赛事编排引擎:离线优先、规则可配置的本地化工具

击剑赛事编排引擎:离线优先、规则可配置的本地化工具

简介:Engarde816是一款面向击剑赛事组织者、裁判团队及体育信息化管理者的专业编排软件,专为解决中小型至大型击剑比赛中的分组抽签、赛制设定(单/双败淘汰、循环赛)、对阵生成、实时成绩追踪与多场地日程协同等核心难题而设计。资…

2026/10/19 6:51:01 阅读更多 →
TaskExplorer 完整指南:跨平台深度进程监控工具

TaskExplorer 完整指南:跨平台深度进程监控工具

TaskExplorer 完整指南:跨平台深度进程监控工具 【免费下载链接】TaskExplorer Power full Task Manager for Windows and Linux 项目地址: https://gitcode.com/GitHub_Trending/ta/TaskExplorer TaskExplorer 是一款功能强大的跨平台任务管理器&#xff0c…

2026/10/19 6:51:01 阅读更多 →
DeepSeek-V4-Flash-Vision-Exp-MLX生产部署指南:OpenAI兼容API与本地服务搭建

DeepSeek-V4-Flash-Vision-Exp-MLX生产部署指南:OpenAI兼容API与本地服务搭建

【免费下载链接】DeepSeek-V4-Flash-Vision-Exp-MLX 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/DeepSeek-V4-Flash-Vision-Exp-MLX 点击查看 免费下载 DeepSeek-V4-Flash-Vision-Exp-MLX 是 DeepSeek V4 系列的实验性多模态模型(支持…

2026/10/19 6:51:01 阅读更多 →
VideoMamba开发者指南:如何将它作为Backbone无缝替换ViT接入你的视频项目

VideoMamba开发者指南:如何将它作为Backbone无缝替换ViT接入你的视频项目

【免费下载链接】VideoMamba 项目地址: https://ai.gitcode.com/OpenGVLab/VideoMamba 点击查看 免费下载 VideoMamba 是一个基于双向状态空间模型(Bidirectional SSM)的轻量级视频理解模型,由 OpenGVLab 开发,核心定…

2026/10/19 6:51:01 阅读更多 →
LTX-2 在 ComfyUI 中如何落地:ComfyUI-LTXVideo 节点安装、首跑与显存配置指南

LTX-2 在 ComfyUI 中如何落地:ComfyUI-LTXVideo 节点安装、首跑与显存配置指南

LTX-2 在 ComfyUI 中如何落地:ComfyUI-LTXVideo 节点安装、首跑与显存配置指南 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 本文面向刚接触 AI 视频生成的读者&am…

2026/10/19 6:50:01 阅读更多 →

日新闻

频率跟踪型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 阅读更多 →