当前位置: 首页 > news >正文

离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证

离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证

一、 离散傅里叶变换中的能量守恒公式

离散傅里叶变换中的能量守恒公式:

∑ n = 0 N − 1 ∣ x [ n ] ∣ 2 = 1 N ∑ k = 0 N − 1 ∣ X [ k ] ∣ 2 (1) \sum\limits_{n = 0}^{N - 1} {|x[n]{|^2}} = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {|X[k]{|^2}} \tag1 n=0N1x[n]2=N1k=0N1X[k]2(1)
其中, x [ n ] x[n] x[n]是原始信号的离散时间域表示, X [ k ] {X[k]} X[k]是信号离散傅里叶变换后的频域表示, N N N是信号的长度。

该公式表示了信号在时间域和频率域中的能量之间的关系。

左侧是原始信号的能量,通过计算每个样本值的平方后求和。

右侧是信号的频率域表示的能量,通过计算每个频率分量的平方求和,并除以信号长度。两者之间存在一个归一化因子 1 N \frac{1}{N} N1,用于保持能量守恒。

这个公式的意义在于,它表明信号在时间域和频率域中的能量总量是相等的,即信号的能量在傅里叶变换过程中保持不变。

在该公式中暗含了 n ∈ [ 0 , N − 1 ] , k ∈ [ 0 , N − 1 ] n \in [0,N - 1],k \in [0,N - 1] n[0,N1]k[0,N1].

二、基于短长度信号程序的验证

2.1 问题描述

通过编写matlab程序来简单验证,该能量守恒公式。假设时域信号x=[6,2,5],根据式(1)可得,时间域能量=6×6+2×2+5×5=65。

2.2 通过matlab程序验证

所编写的程序如下:

clc
clear all
close all
% 1.构建一个序列x
x=[6,2,5];
N=length(x);% 2.计算时间域能量energy_time
energy_time=x*x'% 3.计算频率域能量energy_frequency
X=fft(x,N);
X_module=abs(X);
energy_frequency=sum(X_module.^2)/N

运行结果:
图1 运行结果比较
图1 运行结果比较
根据运行结果(图1),可以很看到时频域能量相等,公式准确。

三、基于大长度信号程序的验证

3.1 问题描述

通过编写matlab程序来验证较长尺度信号的时频域能量守恒公式。
比如长度为2001采样率为1000的信号:
x = 10 sin ⁡ ( 2 π ⋅ 300 ⋅ t ) x = 10\sin (2\pi \cdot 300 \cdot t) x=10sin(2π300t)
的时频域能量守恒。

3.2 通过matlab程序验证

clc
clear all
close all% 1.构建一个序列x
fs=1000;
dt=1/fs;
t=0:dt:2;
x=10*sin(2*pi*300*t)  ;% 2.计算时间域能量energy_time
N=length(x);
energy_time=x*x'% 3.计算频率域能量energy_frequency
X=fft(x,N);
X_module=abs(X);
energy_frequency=sum(X_module.^2)/N

运行结果

图2 运行结果比较
图2 运行结果比较

根据运行结果(图2),可以很看到时频域能量相等,公式准确。

相关文章:

  • 根据Word模板,使用POI生成文档
  • Datawhale-AIGC实践
  • 【服务器】Java连接redis及使用Java操作redis、使用场景
  • pytorch笔记 GRUCELL
  • mediasoup-cluster横向扩容机制
  • mac flutter pb解析报错:protoc-gen-dart: program not found or is not executable
  • 蓝桥杯官网练习题(正则问题)
  • openGauss学习笔记-114 openGauss 数据库管理-设置安全策略-设置帐号有效期
  • gcc: __linux__
  • [SSD综述 1.4] SSD固态硬盘的架构和功能导论
  • Julia文件读写函数:write和read
  • 无mac电脑获取app的公钥的方法
  • IOC容器中的Bean是线程安全的吗?
  • 【jvm】虚拟机栈
  • 好物周刊#29:项目管理软件
  • ➹使用webpack配置多页面应用(MPA)
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 4. 路由到控制器 - Laravel从零开始教程
  • JavaScript HTML DOM
  • MySQL主从复制读写分离及奇怪的问题
  • Python 基础起步 (十) 什么叫函数?
  • Rancher-k8s加速安装文档
  • Redux 中间件分析
  • SAP云平台里Global Account和Sub Account的关系
  • Vue.js 移动端适配之 vw 解决方案
  • 浮现式设计
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 微服务入门【系列视频课程】
  • 问题之ssh中Host key verification failed的解决
  • 在Mac OS X上安装 Ruby运行环境
  • C# - 为值类型重定义相等性
  • kubernetes资源对象--ingress
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 达梦数据库知识点
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (30)数组元素和与数字和的绝对差
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (南京观海微电子)——COF介绍
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (转)Unity3DUnity3D在android下调试
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .md即markdown文件的基本常用编写语法
  • .Net CF下精确的计时器
  • .net Stream篇(六)
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET4.0并行计算技术基础(1)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /bin/rm: 参数列表过长"的解决办法
  • @Autowired和@Resource的区别
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [04] Android逐帧动画(一)