当信号与系统遇见深度学习:我用傅里叶变换和拉普拉斯算子,看懂了CNN的本质 当信号与系统遇见深度学习我用傅里叶变换和拉普拉斯算子看懂了CNN的本质前言最近在做一个信号与系统课程设计题目是“基于CNN的人物图像特征提取——傅里叶变换与拉普拉斯变换的深度学习应用”。说实话一开始看到这个题目我是懵的——傅里叶、拉普拉斯这不是经典信号处理的内容吗跟深度学习有什么关系但做完整个实验后我发现了一个让我豁然开朗的事实CNN里的卷积核本质上就是一组“可学习的滤波器”而傅里叶变换和拉普拉斯算子正是理解这一切的钥匙。这篇文章我想把这个思考过程分享出来。如果你也在学信号与系统或者刚开始接触CNN希望能帮你打通两个知识体系之间的“任督二脉”。一、信号与系统课里我们学了什么信号与系统课程的核心思想其实很简单把一个信号从不同角度去看。时域信号随时间怎么变化。频域信号由哪些频率成分组成。傅里叶变换帮我们从时域跳到频域拉普拉斯变换更进一步引入复频率 ( s \sigma j\omega )在图像处理里它的离散形式就是大家熟知的拉普拉斯算子在数字图像里一个经典的拉普拉斯核4邻域长这样[[ 0, 1, 0], [ 1, -4, 1], [ 0, 1, 0]]这个核的作用是什么——边缘检测。它本质上是一个高通滤波器能放大图像中灰度变化剧烈的地方。而CNN的第一层卷积核很多也长得像边缘检测算子。这难道是巧合吗二、实验一用傅里叶变换“看”图像的频率我们先拿一张人物图像分辨率1080×1502做二维离散傅里叶变换2D-DFT。原始灰度图 → 幅度谱对数变换后 → 相位谱幅度谱的中心是低频成分平滑区域四周是高频成分边缘、细节。相位谱则保留了图像的结构信息。接下来构造理想低通滤波器截止半径80像素和高通滤波器分别乘到频域上再反变换回空域低通滤波图像变模糊去除了噪声和细节。高通滤波只留下边缘和纹理背景几乎消失。这就是卷积定理的直观体现空域的卷积等于频域的乘积。而CNN里的卷积层做的就是这件事——只不过滤波器 ( h ) 不是手工设计的而是从数据中学出来的。三、实验二用拉普拉斯算子检测边缘拉普拉斯算子是二阶微分算子对噪声敏感所以实际常用**高斯-拉普拉斯LoG**先平滑再求导。我们对比了三种算子4邻域拉普拉斯对水平和垂直边缘敏感。8邻域拉普拉斯对斜向边缘也敏感。LoGσ2边缘更干净噪声抑制好。实验结果详见报告图3-1拉普拉斯边缘图白色表示正响应黑色表示负响应。锐化图像原图减去拉普拉斯结果轮廓变得清晰。这些手工设计的核虽然效果不错但固定、不灵活。而CNN可以学到成千上万种不同的“拉普拉斯”变体。四、实验三看CNN到底学到了什么我搭建了一个简单的三层卷积网络Conv1: 1 → 16 通道, 3×3 核, BatchNorm ReLU MaxPool Conv2: 16 → 32 通道, 3×3 核, BN ReLU MaxPool Conv3: 32 → 64 通道, 3×3 核, BN ReLU MaxPool训练前我首先好奇这个模型在毫无训练的情况下卷积核是随机的能提取特征吗在本次课设里我们没有进行训练只是随机初始化。但即便如此当我们可视化这些随机核时发现很多核已经表现出类似边缘检测的模式比如中间亮、四周暗或者方向性的梯度。更有趣的是即使随机初始化各层的特征图也呈现出层次化的结构Conv1的特征图保留了较多的空间细节响应边缘和纹理。Conv2的特征图开始出现重复模式更抽象。Conv3的特征图分辨率降低但语义信息更强比如对人物轮廓、头发区域有选择响应。如果把Conv1的16个卷积核画出来图4-3你会发现——它们和拉普拉斯算子、Sobel算子、Gabor滤波器有极高的相似度有的像水平边缘检测器有的像垂直边缘检测器有的像斑点检测器。这说明了什么CNN不是在“发明”新的操作而是在学习信号处理里已有的“原子滤波器”只是它们的形式更丰富、更适应数据。五、核心洞察卷积定理是连接经典与现代的桥梁我把整条思考链路画成了演进图图5-1手工频域滤波傅里叶高通 → 2.手工空域微分核拉普拉斯→ 3.CNN第一层学习到的边缘检测核→ 4.CNN深层学习到的语义特征每一步卷积定理都在背后起作用传统方法手工设计 ( F_{\text{kernel}} )而CNN用反向传播自动调整它。更形象一点CNN的第一层就是在学傅里叶频域里的“通带形状”高层则在学组合这些基元来构建更复杂的模式。从这个角度看深度学习并没有“推翻”经典信号处理而是把它推广到了极致——用数据驱动的方式在高维空间里做自适应滤波。六、一些实验代码片段整个实验用Python完成主要依赖numpy,scipy傅里叶变换、LoG滤波。opencv-python图像读写、基础滤波。torchCNN定义与特征可视化。matplotlib绘制所有图表。下面贴几个关键片段完整代码见课设报告附录6.1 二维傅里叶变换与滤波importnumpyasnpimportcv2fromscipyimportndimagedeffourier_analysis(img_gray):# DFTfnp.fft.fft2(img_gray)fshiftnp.fft.fftshift(f)magnitudenp.log(np.abs(fshift)1)phasenp.angle(fshift)# 理想低通rows,colsimg_gray.shape crow,ccolrows//2,cols//2lowpassnp.zeros((rows,cols))cv2.circle(lowpass,(ccol,crow),80,1,-1)# 应用滤波f_lowfshift*lowpass img_lownp.abs(np.fft.ifft2(np.fft.ifftshift(f_low)))returnmagnitude,phase,img_low6.2 拉普拉斯算子kernel_lap4np.array([[0,1,0],[1,-4,1],[0,1,0]])lap4cv2.filter2D(img_gray,-1,kernel_lap4)# LoG (高斯-拉普拉斯)fromscipy.ndimageimportgaussian_laplace log_resultgaussian_laplace(img_gray.astype(float),sigma2.0)6.3 CNN模型定义与特征提取importtorch.nnasnnclassSimpleCNN(nn.Module):def__init__(self):super().__init__()self.conv1nn.Conv2d(1,16,kernel_size3,padding1)self.pool1nn.MaxPool2d(2)self.conv2nn.Conv2d(16,32,3,padding1)self.pool2nn.MaxPool2d(2)self.conv3nn.Conv2d(32,64,3,padding1)self.pool3nn.MaxPool2d(2)self.relunn.ReLU()defforward(self,x,return_featuresFalse):f1self.relu(self.conv1(x))xself.pool1(f1)f2self.relu(self.conv2(x))xself.pool2(f2)f3self.relu(self.conv3(x))ifreturn_features:returnf1,f2,f3returnself.pool3(f3)可视化特征图时我们把每个卷积层的输出batch1取前几个通道画出来。即使模型没训练随机核也能产生有结构的响应。七、最大收获别把“信号与系统”和“深度学习”割裂开很多同学学信号与系统时觉得“这玩意儿古老、数学多、没用”学深度学习时又把它当成一个全新的黑盒。但这次课设让我深刻意识到傅里叶变换告诉你图像 频率的叠加。拉普拉斯算子告诉你边缘 二阶导数的过零点。CNN告诉你这些操作可以组合、堆叠、自动化。没有信号与系统的基础你只能把卷积核当成一个“神奇的模板”而理解了卷积定理你就能从频域的角度去思考为什么浅层学边缘深层学语义本质上是因为多次卷积等价于频域多次乘积相当于构造了更复杂的带通滤波器。八、如果想继续深挖可以做什么本次实验只用了随机初始化的CNN未训练。如果真正训练一个分类任务比如人脸识别观察训练前后卷积核的变化会更有说服力。另外还可以对比手工设计的Gabor滤波器与CNN第一层核的相似度。用梯度上升可视化每个卷积核最“喜欢”的模式。结合傅里叶域分析计算每个卷积核的频响曲线看它到底是低通、高通还是带通。这些都能让经典理论与现代方法的联系更加紧密。写在最后这次课程设计让我对“信号处理”这门课彻底改观。它远不只是教我们算积分、拉普拉斯逆变换而是在教我们用“变换”的眼光看问题。当我把这个眼光投射到CNN上时很多以前觉得玄乎的东西一下子变得清晰了。如果你也在学这两门课强烈建议找一张图片自己动手做一次FFT看看幅度谱和相位谱。用拉普拉斯核做一次边缘检测。搭一个最简单的CNN把第一层卷积核画出来。你一定会看到它们之间那条隐秘而优美的连线。附录完整代码、所有实验结果图傅里叶幅度谱、拉普拉斯边缘图、CNN核及特征图已上传见课程设计报告原文。作者陌生Boy指导教师GYY课程信号与线性系统分析课程设计日期2026年5月