高级软件技术笔记
本文最后更新于:2026年4月20日 下午
Lecture 02: Basic Audio Processing
声音是波
- Amplitude(振幅):波的高度,决定声音的响度
- Frequency:每秒多少波(Hz),决定音高
把声音采集进电脑(ADC,采样与量化)
声音采样的两个关键核心定义:
- Sampling Rate: 每秒对连续声波进行的测量次数(单位Hz)。决定了时间轴上的分辨率
- Bit Depth: How prcise is our measurement.
- 高Bit Depth: Smooth, detailed
- 低Bit Depth: Crude, blocky representation
控制音量,避免爆音(Dynamic Range, Headroom & Clipping)
Dynamic Range: 系统能记录的最静到最响的跨度
如果声音太大超出了最大限制,波峰就会被削平,这就是Clipping,它会产生极其刺耳的失真。
为防止削波,我们需要在正常音量和绝对最大值之间留出一段安全距离,这就是Headroom
修理噪音(Filters/滤波器)
录完音后,发现背景中有杂音,需要用Filters处理不需要的信号成分
- 低通滤波器(Low Pass Filter)
- 原理:人类的语音能量主要集中在低频,而噪音大多是高频噪音
- 操作:套用一个低通滤波器,设定截止频率,切掉高频,保留低频
给声音“拍个X光片”
- Waveform: Time Domain下的声音。X轴是时间,Y轴是振幅。
- Spectrum(频谱图) & Spectrogram(语谱图):这是在Frequency Domain看声音。需要用FFT作为桥梁,把时间信号转为频率信号
处理长视频的分尸和缝合技巧(Segmentation & Windowing)
为生成Spectrogram,我们要把连续的音频切成短帧
- Overlap:像叠瓦片一样,让相邻的帧有50%重叠,确保没有特征遗漏
- Windowing: 在把每帧加起来之前,给每一帧套上一个窗函数,这样缝合后的音频就不会出现突兀的断层点。
Lecture 03: Human Auditory System
声音的产生
人类的发声系统可以简化为三个物理部件:
- 肺部(Lungs): 电源。提供气流
- 声带(Vocal Cords): 振荡器Oscillator。气流经过声带引起震动,产生最基础的声音
- 声道(Vocal Tract): Filter/Resonator。声音在经过口腔和喉咙时,会被放大或改变。
两大核心语音特征:
- 特征1:基频(f0/Pitch,音高)
- 原理:声带震动的频率。声带震动的越快,音高越高。
- 核心考点(Pitch Contour):你在说Hello时,音高的起伏曲线不仅传递字面意思,还传递emotion, grammar, emphasis.
- 特征2:共振峰(Formants, F1/F2/F3)
- 原理:当声带发出的声音经过声道时,口腔形状会改变声音的共振频率。这些在谱频图上形成明显的能量峰值的地方就是共振峰。
The ear & Hearing
Mechanical-to-electrical. 分为三关:
- Outer Ear(collector/filter)
- Middle Ear(impedance matcher)
- Inner Ear
大脑的漏洞与代码的结合
大脑在接受这些电信号时,并不是线性的,客观的,其中最重要的现象叫做Masking。
Masking 分为两种:
- Frequency Masking(频域掩码):如果在1kHz处有一个机器响亮的声音,那么在他附近就会有一个微弱的声音被大脑直接忽略。A loud sound at a certain frequency will make it impossible to hear quieter sounds at nearby frequencies at the same time.
- Temporal Masing(时域掩码):一个响亮的生硬,不仅会掩盖和它同时发生的声音,还会掩盖在它近前发生或紧后发生的微弱声音。A loud sound can mask quieter sounds that occur immediately before or after it.
Lecture 04: Psychoacoustics and Compression
Masking: A louder sound can make a softer sound inaudible.
大脑的听觉错觉
物理世界的声音是客观的(波),但大脑听到的声音却是主观加工过的。这里有三个错觉:
- 音量错觉(Amplitude Models):
- 物理上的音量叫做振幅db SPL, 但人类主观能感受到的响度叫做Phones
- 人耳对频率是偏心的,最敏感的区间在2-5kHz。
- 频率错觉(Frequency Models):
- 人耳的耳蜗像一个滤波器组,把它分成24个临界频带。
- 由此诞生两个非线性的频率刻度:Bark Scale和Mel Scalde.
- 残差效应(The Residue Effect):
- 如果你给大脑同时播放800Hz和1000Hz的高频声音,大脑会自动脑补出200Hz的低频音。
终极漏洞——掩蔽效应 (Masking) 与 MP3 的秘密
定义:掩蔽效应 (Masking) 就是一个响亮的声音(Masker)会让你根本听不见旁边微弱的声音(Maskee)。 它分为两种:
频域掩蔽 (Frequency Masking):在 1kHz 处有一个大声的音,那么它附近临界频带内的微弱声音都会被掩蔽。时域掩蔽 (Temporal Masking):一个大声音,不仅能掩盖同时发生的声音,还能掩盖在它紧前 (Pre-masking) 或紧后 (Post-masking) 发生的微弱声音。
分析题考点:为什么有损压缩(如 MP3)能把体积缩小 10 倍且音质听起来没差?
无损压缩 (Lossless):比如 FLAC 格式,只压缩数据的冗余,压缩比只有大约 2:1。有损压缩 (Lossy):比如 MP3、AAC 格式,它们利用了上述的心理声学和掩蔽效应。编码器会计算出哪些微弱的音频数据被响亮声音“掩蔽”了(反正人耳也听不见),然后直接把这些数据丢弃(替换为零)。这就是它们能实现 10:1 惊人压缩比的秘密
MFCC Model
将心理学与机器学习联系起来的特征
对数步骤模拟耳朵对数响度感知,DCT 对特征进行装饰,使其对 ML 模型更有效。
The log step mimics the ear’s logarithmic loudness perception. The DCT decorrelates the features, making them efficient for ML models.
Coding and Compression
- Coding: the representation of sound in a digital format. Involves Sampling and Quantization.
- Compression: coding specifically focused on reducing the bit rate.
主观测试(MUSHRA)
怎么证明你发明的 MP3 算法好听?不能只看电脑数据,得找“金耳朵(专家听众)”来测试。
工业界常用 MUSHRA 测试:给专家听原音(Reference)、各种不同码率的压缩音(如 128kbps Opus, 96kbps MP3),以及故意弄差的锚点音(Anchors),让他们打分。这证明了压缩不仅取决于算法,还跟播放设备、音乐内容息息相关
Lecture 05: Basic Image Processing
把世界抓进屏幕(Sampling & Quantization)
数字图像生成的过程:
- Sampling: Digitizing the coordinate values. 把连续的画面切成一个个小方格。这决定了图像的空间分辨率。如果采样量太低,图片放大后就会变成粗糙的马赛克。
- Quantization: Digiting the amplitude values.
图像处理的三个段位
- Low-Level: 输入是图片,输出也是图片。比如:给模糊的车牌降噪、增强对比度。
- Mid-Level: 输入是图片,输出是特征。比如:从车牌图片中提取出字符的边缘轮廓
- High-Level: 输入是特征,输出是理解。比如OCR读懂轮廓,输出文本
人类眼镜的硬件参数与视觉欺骗
要处理好图像,得先懂人眼是怎么工作的。
视网膜 (Retina) 的两种细胞 :视杆细胞 (Rods):对光极度敏感,负责黑白视觉和夜视。分布在眼睛边缘。视锥细胞 (Cones):负责彩色视觉和高清晰度细节。集中在眼睛中心的黄斑区 (Fovea)。其中对红色(60%)最敏感,其次是绿色(30%)和蓝色(10%)。
大脑的“视觉欺骗” (Visual Illusions) :同时对比度 (Simultaneous contrast):人眼感知的亮度不仅取决于像素本身的数值,还取决于它的背景。同一个灰度方块,放在纯黑背景下看起来会变亮,放在纯白背景下看起来会变暗。这说明绝对客观的像素值,在人眼中是主观的。
图像的基本属性与瑕疵
Dynamic range: estabilishes the lowest and highest intensity levels that an image can have. 图像中最暗和最亮级别之间的跨度。
Image Contrast: the difference in intensity between the highest and lowest intensity levels in an image。最高和最低强度
Saturation(饱和度):最大值,超过这个值之后,所有的强度值都会被裁剪掉。
Noise: 纹理图案。暗色背景的噪点更多,但噪点难以察觉。
图像放大/变形 – 插值(Interpolation)
当把一张图片放大两倍,电脑无法知道这些多出来的新像素应该填什么像素,这就需要插值:
- 最近邻插值(Nearest-neighbor): 直接抄最近的颜色。
- 双线性插值(Bilinear): 参考周围4个相邻像素的平均值
- 双三次插值(Bicubic): 参考周围16个像素点进行复杂计算。
图像的加减乘除
图像相减(Subtraction) = 找不同
图像相乘(Multiplication) = 抠图
Lecture 06: Image Enhancement
修图的两种思路
当拿到一张不完美的图片时,通常有两种处理方式:
- 只看单像素(Intensity Transformations): 比如觉得图片太暗,就把每个像素都调亮。
- 参考周围的邻居(Spatial Filtering/空间滤波):如果想把图片磨皮或者锐化,就不能只看单个像素,需要参考周围的一小圈像素。
如果设计自动驾驶摄像头,哪些信息应该增强:
Lane edges, obstacles, pedestrians
第一招 - 调整对比度
核心工具: Image Histograms: A histogram represents the distribution of pixel intensities.
如果大部分的像素聚集在小部分强度范围内,这个图像看起来flat.
Histogram Equalization解决这个问题
Goal: Spread intensities across entire dynamic range
Benefits: increases contrast and reveals hidden details
算法将挤在一起的像素强行拉开,均匀分布到从纯黑到纯白的所有区间。尽管这种方案可以提升对比度,但是会放大噪点(Amplify noise)
第二招 - 解决噪点,磨皮
利用 Spatial filtering 空间滤波,在像素上套上一个小方块(Kernal)滑动处理
平滑/低通滤波器(Snoothing/Lowpass Filters),抹平图像里突然变化的突兀像素。利用三种磨皮工具:
- Box Filter(盒式滤波):把小方块里的所有像素加起来算个平均值。缺点时produce visible blur artifacts.
- Gaussian Filter(高斯滤波):离中心越近的像素权重越高,磨皮效果更自然。
- Median Filtering(中值滤波,非线形):不求平均,把方块里的像素排序,取中间的值。擅长去除 Salt and pepper noise
第三招 - 图片太模糊,锐化
磨皮(平滑)去掉了噪点,但导致图片模糊(边缘不清晰),所以需要Sharpening
原理:边缘就是颜色突然发生跳变的点那个。在数学上,找跳变就是求导
- Laplcaian Operator(拉普拉斯算子):利用二阶导找出所有的边缘和细节,然后将这些细节重新加回原图上,图片就清晰了。
- Unsharp Masking(非锐化掩蔽):先把原图变模糊,然后用原图减去模糊的图,得到一个只有细节的轮廓,最后把轮廓加回去。
- Sobel/Roberts 梯度滤波器:这是用来专门把物体的轮廓抠出来的工具
彩色世界处理
CMYK
为什么CMY -> CMYK
Cyan, magenta and yellow, should produce black. Combining these colors produces instead a muddy-looking brown. To produce true black a fourth color black is added.
HSI
最符合人类感知的颜色模型。Separates intensity from color.
图像上色的技巧:Pseudocolor假彩色处理:给黑白影像根据灰度强行图上颜色,为了让医生肉眼更容易分辨