傅里叶变换和拉普拉斯变换
一、回顾欧拉公式1.1 欧拉公式欧拉公式为它表示单位圆上的一个点。随着 θ 变大这个复数就在平面上旋转。例如如果取实部如果取虚部二、傅里叶变换就是频率探针2.1 案例假设我们的源信号是其含义是x(t) 50Hz 正弦波 120Hz 正弦波其中成分为50Hz 分量幅值 1120Hz 分量幅值为 0.52.2 使用积分计算函数成分2.2.1 频率探针可以把傅里叶分析理解成拿不同频率的波一个个去和原信号对暗号。2.2.1 50Hz 积分探针首先用 50Hz 的波去测试让它与原信号相乘 (相当于重合的面积相乘)然后在一段时间内积分因为 x(t) 原本就有50Hz信号所以平方永远不小于零所以会不断累加结果比较大。2.2.2 120Hz 积分探针同样的我们对 120Hz 也求积分求他们重合的面积2.2.3 计算结果在下列案例中引入了实部和虚部的概念。这是因为我们的案例波形 t0 时刻开始周期所以实部统计不到为 0。为了避免复杂这里不举例 tx 时刻开始周期的 f(t) 函数了。#include stdio.h // 标准输入输出函数 #include math.h // sin、cos、sqrt 数学函数 #define PI 3.14159265358979323846 #define N 100000 // 数值积分分段数量 #define T 1.0 // 信号观察时间单位s // 生成包含 50 Hz 和 120 Hz 的测试信号 double signal(double t) { return sin(2.0 * PI * 50.0 * t) 0.5 * sin(2.0 * PI * 120.0 * t); } // 计算信号在指定频率 f 下的傅里叶积分 void calculate_fourier(double f) { double dt T / N; // 每个积分小区间的时间宽度 double real 0.0; // 傅里叶变换的实部 double imag 0.0; // 傅里叶变换的虚部 // 用矩形面积累加的方式近似计算连续积分 for (int n 0; n N; n) { double t n * dt; // 当前时刻 double x signal(t); // 当前时刻的信号值 double angle 2.0 * PI * f * t; // 检测频率对应的相位角 real x * cos(angle) * dt; // 计算实部积分 imag - x * sin(angle) * dt; // 计算虚部积分 } // 根据实部和虚部计算复数模长 double magnitude sqrt(real * real imag * imag); // 将傅里叶积分模长还原为单边正弦波幅值 double amplitude 2.0 * magnitude / T; // 输出当前检测频率的计算结果 printf(检测频率%6.1f Hz\n, f); printf(实部 Re % .6f\n, real); printf(虚部 Im % .6f\n, imag); printf(模长 %.6f\n, magnitude); printf(幅值 %.6f\n\n, amplitude); } int main(void) { // 分别检测 50 Hz、120 Hz 和 80 Hz calculate_fourier(50.0); calculate_fourier(120.0); calculate_fourier(80.0); return 0; }2.3 引入真正的傅里叶公式其含义是原信号乘反向旋转频率然后积分累加。其中就是用来检测频率 fx(t) 的反向旋转探针。将 公式展开后得到积分后也就是将实部分虚部分离可得2.4 离散化的 C 代码离散化代码如下#include stdio.h #include math.h #define N 1000 // 定义采样点数也就是信号长度为 1000 个点 #define FS 1000.0 // 定义采样频率单位为 Hz这里表示每秒采样 1000 次 #define PI 3.14159265358979323846 // 定义圆周率常量用于角度计算 int main(void) { // 主函数函数体开始 double x[N]; // 定义长度为 N 的数组用来保存测试信号的采样值 // 构造一个测试信号由 50Hz 正弦波和 120Hz 正弦波叠加而成 for (int n 0; n N; n) { double t n / FS; // 根据采样点序号计算当前时间单位为秒 // 给第 n 个采样点赋值生成 50Hz、幅值为 1 的正弦信号叠加 120Hz、幅值为 0.5 的正弦信号 x[n] sin(2.0 * PI * 50.0 * t) 0.5 * sin(2.0 * PI * 120.0 * t); } // 对信号 x 进行离散傅里叶变换 DFT计算频谱 for (int k 0; k N / 2; k) // 遍历频率下标只计算前半部分频谱 { // 外层 for 循环函数体开始 double real 0.0; // 保存 DFT 结果的实部初始值为 0 double imag 0.0; // 保存 DFT 结果的虚部初始值为 0 for (int n 0; n N; n) // 遍历所有采样点用于计算当前频率 k 的 DFT { // 内层 for 循环函数体开始 double angle 2.0 * PI * k * n / N; // 计算 DFT 公式中的旋转角度 real x[n] * cos(angle); // 累加当前频率分量的实部 imag - x[n] * sin(angle); // 累加当前频率分量的虚部负号来自 DFT 定义 } // 根据实部和虚部计算当前频率分量的幅值 double amplitude 2.0 / N * sqrt(real * real imag * imag); // 计算单边频谱幅值 // 根据频率下标 k 计算对应的实际频率 double freq k * FS / N; // 当前频率点对应的频率单位为 Hz // 只打印幅值比较明显的频率成分 if (amplitude 0.1) // 如果当前频率分量的幅值大于 0.1就认为它比较明显 { // if 语句函数体开始 printf(freq %7.2f Hz, amplitude %.3f\n, freq, amplitude); // 输出频率和幅值 } } return 0; }三、 漏水水桶案例3.1 漏水水桶案例引入假设我们有一个漏水的水桶水量是假设规律是x 剩余水量水量的导数是 -2x。意味着任意时刻水量的瞬时减少速率 (每分钟流量)等于当前水量的 2 倍。假设当前桶中有 1L 水在不考虑微分的情况1 分钟后会流出 2L 水。写成自然常数的形式就是x0 初始水量3.2 变量分离的微分形式计算我们假设桶里目前水量为 5L试求 1 分钟后的桶中水量。已知水量变化的微分方程为把 xxx 和 ttt 分到两边按照初始 t0x5 (5L 水) 计算 t 1 (1 分钟)两边做定积分所以3.3 自然指数 e 形式计算四、赫维塞斯算子4.1 得到算子首先定义微分算子 (赫维塞斯算子)那么 px 的意思是所以在水桶案例中可以将原来的导数形式写成提取可得最后得到4.2 使用算子我们知道指数函数满足把我们的赫维塞斯算子代入因此水量函数一定具有下面的形式将我们的初始水量 5L 带入公式得到4.3 总结这个例子中把微分直接转化成 p于是直接变成微分方程就像普通代数一样处理了。五、拉普拉斯变换5.1 拉普拉斯变换公式x(t) 时间有关的函数t 时间 瞬时变化速度 拉普拉斯变换符号s 拉普拉斯域的自变量 拉普拉斯域的函数 时间的初始值可以理解为导数的拉普拉斯变换 s乘原函数的变换结果 − 初始值5.2 使用拉普拉斯变换计算水桶案例5.2.1 两侧拉普拉斯变换水桶案例的原微分方程是两边同时进行拉普拉斯变换得到5.2.2 求 X(s)提取 X(s)两侧相除得到水量在 s 域的表达式5.2.3 拉普拉斯反变换查表现在我们需要把拉普拉斯域反变换目前已有公式我们直接将 X(s) 根据公式转换得到我们的初始水量是 5L 时间是 1 分钟代入得到5.3 拉普拉斯变换和傅里叶变换的关系5.3.1 两个公式傅里叶变换的公式是而拉普拉斯变换的公式多了一个 s5.3.2 s 的定义 频率旋转 指数增长/衰减5.3.3 两者关系总结拉普拉斯变换 傅里叶变换 指数衰减 / 增长因子在傅里叶分析中我们只能分析不衰减的波形拉普拉斯变换则可以分析增长信号和衰减信号这样就是衰减了拉普拉斯变换把探针升级了也就是说不仅可以分析波形的频率成分还可以分析衰减状态。

相关新闻

5分钟自动化部署:Brigadier如何让Mac Boot Camp驱动安装变得简单快速

5分钟自动化部署:Brigadier如何让Mac Boot Camp驱动安装变得简单快速

5分钟自动化部署:Brigadier如何让Mac Boot Camp驱动安装变得简单快速 【免费下载链接】brigadier Fetch and install Boot Camp ESDs with ease. 项目地址: https://gitcode.com/gh_mirrors/bri/brigadier 还在为Mac安装Windows系统后繁琐的驱动安装而烦恼吗…

2026/9/25 2:49:13 阅读更多 →
Unity Sprite批量处理工具:基于Excel配置的轴心点与名称自动化修改

Unity Sprite批量处理工具:基于Excel配置的轴心点与名称自动化修改

1. 项目概述:为什么我们需要一个批量处理工具 在Unity的2D游戏开发流程里,Sprite图集(Sprite Atlas)和它的切片(Slicing)操作是家常便饭。美术同学给过来一张大图,我们拖进Unity,设置…

2026/9/23 22:01:18 阅读更多 →
总结xin ri公司(第三家)

总结xin ri公司(第三家)

总结xinri-CSDN博客

2026/9/25 5:47:17 阅读更多 →

最新新闻

Atlas 300V 24G推理卡详解:YOLO模型迁移部署与调优实战

Atlas 300V 24G推理卡详解:YOLO模型迁移部署与调优实战

Atlas 300V 24G这块卡,最近问我的人特别多。搜“atlas部署yolo”能搜出一堆帖子,搜“atlas 300v 24g 是运算加速卡吗”也能搜出一堆疑问。很多人手里已经有这张卡了,或者是正准备从GPU阵营切过来,但搞不清它到底算什么定位、能不能…

2026/9/25 13:51:13 阅读更多 →
用 SetCursorPos 和 mouse_event 模拟鼠标移动与点击:一份可直接跑的配置骨架

用 SetCursorPos 和 mouse_event 模拟鼠标移动与点击:一份可直接跑的配置骨架

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

2026/9/25 13:51:13 阅读更多 →
使用Claude Code Router轻松切换各种高性价比模型:TaoToken统一Key接入与config.toml配置实战

使用Claude Code Router轻松切换各种高性价比模型:TaoToken统一Key接入与config.toml配置实战

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

2026/9/25 13:51:12 阅读更多 →
使用 Nacos + Higress 连接 Agent 和 MCP 服务进行使用:TaoToken 统一 Key 接入配置骨架

使用 Nacos + Higress 连接 Agent 和 MCP 服务进行使用: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/9/25 13:51:12 阅读更多 →
缤果日纪为什么做黄酒创新?聊聊品牌的出发点和产品定位

缤果日纪为什么做黄酒创新?聊聊品牌的出发点和产品定位

近几年黄酒有点“安静”:说起它,很多人脑子里浮现的还是厨房料酒、长辈酒桌上的老味道,年轻人日常喝酒时很少第一时间想到它。缤果日纪这个品牌,正是在这样的背景下做黄酒创新。这篇不讲口号,把品牌为什么出发、想解决…

2026/9/25 13:51:12 阅读更多 →
DeepSeek接入微信公众号问题记录:TaoToken统一Key配置与回调验证

DeepSeek接入微信公众号问题记录: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/9/25 13:50:12 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →