尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
傅里叶变换和拉普拉斯变换
一、回顾欧拉公式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 两者关系总结拉普拉斯变换 傅里叶变换 指数衰减 / 增长因子在傅里叶分析中我们只能分析不衰减的波形拉普拉斯变换则可以分析增长信号和衰减信号这样就是衰减了拉普拉斯变换把探针升级了也就是说不仅可以分析波形的频率成分还可以分析衰减状态。
RELATED

相关推荐

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/10/8 7:13:55
Unity Sprite批量处理工具:基于Excel配置的轴心点与名称自动化修改

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

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

📅 2026/8/31 23:21:20
总结xin ri公司(第三家)

总结xin ri公司(第三家)

总结xinri-CSDN博客

📅 2026/9/1 1:26:50
MORE NEWS

更多资讯

📰

基于BP神经网络的车牌识别系统Matlab实现全解析

车牌识别这事儿,听起来挺唬人,其实拆开看就是一套“图像处理 神经网络”的组合拳。最近我把这个基于BP神经网络的车牌识别系统在Matlab里完整实现了一遍,从车牌定位、字符分割到字符识别,每一步都踩了不少坑。这篇东西就是给准备…

📰

RAG完整落地链路:从原理到代码,从Demo到生产

先说一个我最近的真实感受。但凡做过企业知识库相关项目的同学,应该都有过这种阶段:模型参数调了一轮又一轮,提示词写了一版又一版,可面对那些冷门的内部文档、刚更新的售后工单、没公开上过网的产品参数,大模型要么一…

📰

从零啃Spark架构与RDD:核心机制、依赖关系与实操避坑指南

1. 为什么我要从零啃Spark架构和RDD刚接触分布式计算那会儿,我对Spark的认知就停留在“比Hadoop快”这个层面。直到有一次处理一批日志数据,单机跑Python脚本跑了四十多分钟还没出结果,我才真正下决心把这套东西搞明白。这篇文章就是我当时学…

📰

BomGW v1.0软网关实战:PLC数据采集配置、调优与排障指南

做工业数据采集的朋友,估计都体会过被“采集”两个字折磨到半夜的滋味。现场PLC品牌杂、协议多、点位表千奇百怪,再加上网络环境时好时坏,采集端动不动就断连、漏采、数据错位。BomGW v1.0软网关就是在这种背景下做的一件事:用纯软…

📰

RAG检索优化实战:提升准确率与召回率的完整指南

前阵子帮某团队调一个RAG问答项目,用户明明问的是“报销流程里发票丢失该怎么处理”,系统翻出来的却是“发票开具规范”。这类答非所问,十有八九不是生成模型的问题,而是 RAG的检索准确率与召回率 没跟上。我从入门到实战把RAG跑…

📰

GitHub日榜热度建模:从star增量到技术趋势预测

1. 项目概述:这不是一个“项目”,而是一面实时映射技术生态的镜子“GitHub 热榜项目:日榜(2026-10-10)”这个标题,乍看像一份新闻简报,实则藏着一整套可复用的技术观测方法论。它不是某个具体开…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬