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

本文主要是介绍离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

∑ 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),可以很看到时频域能量相等,公式准确。

这篇关于离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/330418

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程