离散傅里叶变换(Discrete Fourier Transform, DFT)介绍,地震波分析

news2024/11/13 14:29:30

介绍

离散傅里叶变换(Discrete Fourier Transform, DFT)是一种非常重要的信号处理工具,它将离散时间信号从时间域转换到频率域。DFT在信号处理、图像处理、通信系统以及许多其他工程和科学领域中得到了广泛应用。为了理解DFT,我们需要从几个角度来探讨它的背景、定义、性质以及应用。

傅里叶变换的背景

傅里叶变换的基本思想是将信号分解为一系列不同频率的正弦波和余弦波的叠加。这种分解方式使得我们能够在频率域中分析信号的频率成分。傅里叶变换最早由法国数学家和物理学家约瑟夫·傅里叶(Joseph Fourier)提出,最初是为了研究热传导问题。

傅里叶变换有几种不同的形式,包括连续傅里叶变换(Continuous Fourier Transform, CFT)、离散时间傅里叶变换(Discrete Time Fourier Transform, DTFT)以及离散傅里叶变换(DFT)。DFT是其中专门用于处理离散信号的变换方法。

离散傅里叶变换的定义

离散傅里叶变换是针对离散时间序列的傅里叶变换。假设我们有一个长度为 N N N的离散时间序列 x [ n ] x[n] x[n],其中 n = 0 , 1 , 2 , . . . , N − 1 n =0,1,2,...,N-1 n=0,1,2,...,N1。DFT 将该序列转换为另一个长度为 N N N的序列 X [ k ] X[k] X[k],其中 k = 0 , 1 , 2 , . . . , N − 1 k = 0,1,2,...,N-1 k=0,1,2,...,N1。DTF的数学定义如下:
X [ k ] = ∑ n = 0 N − 1 x [ n ] ⋅ e − j 2 π N k n X[k] = \sum_{n=0}^{N-1}x[n]·e^{-j\frac{2\pi}{N}kn} X[k]=n=0N1x[n]ejN2πkn
其中, X [ k ] X[k] X[k]是信号在频率 k k k处的频谱分量, j j j是虚数单位, e − j 2 π N k n e^{-j\frac{2\pi}{N}kn} ejN2πkn表示一个复数指数函数,它可以被看作是一个旋转的矢量。
DFT 的逆变换(Inverse Discrete Fourier Transform, IDFT)用于将频域信号转换回时间域信号,其定义为:
x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] ⋅ e j 2 π N k n x[n] = \frac{1}{N}\sum_{k=0}^{N-1}X[k]·e^{j\frac{2\pi}{N}kn} x[n]=N1k=0N1X[k]ejN2πkn

DFT 的性质

DFT 具有一些重要的性质,这些性质使得它在实际应用中非常有用:
线性性(Linearity):DFT 是线性的,这意味着如果 y [ n ] = a x [ n ] + b z [ n ] y[n]=ax[n]+bz[n] y[n]=ax[n]+bz[n],那么 Y [ k ] = a X [ k ] + b Z [ k ] Y[k]=aX[k]+bZ[k] Y[k]=aX[k]+bZ[k],其中 a a a b b b是常数
对称性(Symmetry):对于实值序列,DFT 具有共轭对称性,即 X [ N − k ] = X ∗ [ k ] X[N-k]=X*[k] X[Nk]=X[k],其中 X ∗ [ k ] X^*[k] X[k] X [ k ] X[k] X[k]的共轭。
周期性(Periodicity):DFT 是周期性的,即 X [ k + N ] = X [ k ] X[k+N]=X[k] X[k+N]=X[k],这意味着频谱在频率上是周期重复的。
时间位移性质(Time Shifting Property):如果信号在时间域被移位 𝑚 个单位,那么频域信号会被乘以一个相应的相位因子。

率位移性质(Frequency Shifting Property):如果在时间域信号上乘以一个指数函数,在频域中则会产生相应的频率位移。

卷积定理(Convolution Theorem):卷积定理指出,在时间域中的卷积运算对应于频域中的乘法运算。这一性质在信号处理中的滤波操作中非常重要。

DFT 的应用

DFT 在许多领域有着广泛的应用,以下是一些主要的应用领域:

信号分析:通过 DFT,我们可以分析信号的频率成分,识别出信号中包含的各个频率分量。这对于语音分析、音频处理、地震波分析等非常有用。

滤波器设计:在信号处理中,滤波器用于提取信号中的特定频率分量或消除不需要的噪声。通过在频域中设计滤波器,DFT 可以帮助我们更好地理解和设计各种类型的滤波器。

图像处理:在图像处理中,DFT 用于图像的频域表示。它可以帮助我们去除图像中的噪声、进行图像增强、压缩图像等。

通信系统:在通信系统中,DFT 被用于调制和解调信号,特别是在正交频分复用(OFDM)技术中,DFT 是关键的技术之一。

频谱分析:频谱分析是指分析信号的频率特性,DFT 提供了一种将时间域信号转换为频域信号的方法,便于识别和分析信号的频谱特征。

DFT 的限制与挑战

尽管 DFT 具有强大的功能,但它也有一些限制和挑战:

频谱泄露(Spectral Leakage):由于 DFT 是基于有限长度的信号序列,因此在频域中可能会出现频谱泄露的现象,即某些频率分量会泄露到相邻频率上,导致频谱模糊。

频率分辨率(Frequency Resolution):DFT 的频率分辨率由信号长度决定。较短的信号序列会导致较差的频率分辨率,这意味着我们难以区分彼此接近的频率分量。

边界效应(Boundary Effects):在计算 DFT 时,信号的边界部分可能会产生不连续性,导致频域中的伪影。这通常通过窗函数(如汉宁窗、汉明窗等)来减小这种效应。

本文代码

地震波分析是地球物理学中的一个重要领域,DFT(离散傅里叶变换)在地震波的频率分析、信号过滤和模式识别中扮演着重要角色。下面将展示一个非常复杂且专业的MATLAB代码,用于对地震波数据进行分析,包括DFT的应用,滤波处理,以及地震波的频谱分析

分析步骤

生成模拟的地震波信号(包含多种频率成分和噪声)。
使用DFT对信号进行频谱分析,识别出主要频率成分。
对信号进行带通滤波,提取感兴趣的频率范围。
通过反向DFT(IDFT)恢复滤波后的信号,并分析处理效果。

核心代码

% MATLAB Code for Seismic Wave Analysis Using DFT

% Simulation Parameters
Fs = 1000;           % Sampling frequency (Hz)
T = 1/Fs;            % Sampling period (s)
L = 10000;           % Length of signal
t = (0:L-1)*T;       % Time vector

% Simulate Seismic Wave Signal with Multiple Frequency Components
f1 = 5;    % Frequency of the first seismic wave component (Hz)
f2 = 20;   % Frequency of the second seismic wave component (Hz)
f3 = 50;   % Frequency of the third seismic wave component (Hz)

% Amplitudes of the seismic wave components
A1 = 10;  
A2 = 7;
A3 = 3;

% Generate the signal with multiple sinusoidal components
seismic_signal = A1*sin(2*pi*f1*t) + A2*sin(2*pi*f2*t) + A3*sin(2*pi*f3*t);

% Additive White Gaussian Noise (AWGN) to simulate background noise
noise = 2*randn(size(t));  
seismic_signal_noisy = seismic_signal + noise;

% Plot the original noisy seismic signal
figure;
plot(t(1:1000), seismic_signal_noisy(1:1000));
title('Original Noisy Seismic Signal');
xlabel('Time (s)');
ylabel('Amplitude');

% Apply DFT to analyze the frequency components of the noisy seismic signal
Y = fft(seismic_signal_noisy);

% Compute the two-sided spectrum and then the single-sided spectrum
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

f = Fs*(0:(L/2))/L;

% Plot the single-sided amplitude spectrum of the noisy signal
figure;
plot(f, P1);
title('Single-Sided Amplitude Spectrum of Seismic Signal');
xlabel('Frequency (Hz)');
ylabel('Amplitude');

% Filter Design: Band-pass filter to extract specific frequency components
% Design a band-pass filter to isolate the frequency range of interest
f_low = 4;   % Lower cutoff frequency (Hz)
f_high = 55; % Upper cutoff frequency (Hz)

[b, a] = butter(4, [f_low, f_high]/(Fs/2), 'bandpass');

% Apply the band-pass filter to the noisy seismic signal

% Plot the filtered seismic signal
figure;
plot(t(1:1000), seismic_signal_filtered(1:1000));
title('Filtered Seismic Signal');
xlabel('Time (s)');
ylabel('Amplitude');


% Inverse DFT (IDFT) to recover the filtered seismic signal in time domain
seismic_signal_recovered = ifft(Y_filtered);

% Plot the recovered seismic signal
figure;
plot(t(1:1000), seismic_signal_recovered(1:1000));
title('Recovered Seismic Signal after Filtering');
xlabel('Time (s)');
ylabel('Amplitude');

% Further analysis: Compute and plot the power spectral density (PSD) of the filtered signal
figure;
pwelch(seismic_signal_filtered,[],[],[],Fs);
title('Power Spectral Density of Filtered Seismic Signal');
xlabel('Frequency (Hz)');
ylabel('Power/Frequency (dB/Hz)');

% Signal comparison: Original vs. Filtered
figure;
subplot(2,1,1);
plot(t(1:1000), seismic_signal_noisy(1:1000));
title('Original Noisy Seismic Signal');
xlabel('Time (s)');
ylabel('Amplitude');

subplot(2,1,2);
plot(t(1:1000), seismic_signal_filtered(1:1000));
title('Filtered Seismic Signal');
xlabel('Time (s)');
ylabel('Amplitude');


代码说明

信号生成
生成一个包含三种不同频率(5Hz、20Hz、50Hz)的地震波模拟信号,每种频率成分代表不同的地震事件或地层反应。
添加高斯白噪声(AWGN)以模拟实际环境中的背景噪声。

频谱分析
使用DFT对生成的地震波信号进行频谱分析。fft函数用于计算信号的频率成分,结果展示在单边幅值谱图中。
通过频谱图可以识别出信号中存在的主要频率成分。

滤波处理
设计了一个带通滤波器,用于提取感兴趣的频率范围(4Hz到55Hz)。butter函数用于设计Butterworth带通滤波器。
滤波后的信号进行再次DFT分析,以观察频谱的变化。

信号恢复
使用IDFT(逆傅里叶变换)将滤波后的频域信号转换回时域,以获得处理后的地震波信号。
比较原始信号和滤波后的信号,以观察滤波效果。

功率谱密度分析
使用pwelch方法计算并绘制滤波后信号的功率谱密度(PSD),以进一步分析信号的频率特性。

信号比较
将原始噪声信号与滤波后的信号进行比较,直观地展示了滤波处理前后信号的变化。

效果

在这里插入图片描述
在这里插入图片描述

完整代码获取

关注下方公众号,回复"DTF"获取完整代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时序预测 | 基于DLinear+PatchTST多变量时间序列预测模型(pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 DLinearPatchTST多变量时间序列 dlinear,patchtst python代码,pytorch架构 适合功率预测,风电光伏预测,负荷预测,流量预测,浓度预测,机械领域预…

3.美食推荐系统(Java项目springboot和vue)

目录 0.系统的受众说明 1 绪论 1.1研究背景 1.2研究现状 1.3研究内容 2 系统关键技术 2.1 Springboot框架 2.2 JAVA技术 2.3 MYSQL数据库 2.4 B/S结构 3 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2 系统性能分析 3.3 系统功能分析 3.4系统…

【3D目标检测】MMdetection3d——nuScenes数据集训练BEVFusion

引言 MMdetection3d:【3D目标检测】环境搭建(OpenPCDet、MMdetection3d) MMdetection3d源码地址:https://github.com/open-mmlab/mmdetection3d/tree/main?tabreadme-ov-file IS-Fusion源码地址:https://github.co…

139. MySQL同步ES的四种方案

文章目录 1. 前言2. 数据同步方案2.1 同步双写2.2 异步双写2.3 基于 SQL 抽取2.4 基于 Binlog 实时同步 3. 数据迁移工具选型3.1 Canel3.2 阿里云 DTS3.3 Databus3.4 其它 4. 后记 本文介绍数据同步的 4 种方案,并给出常用数据迁移工具,目录如下&#xf…

【软件测试专栏】认识软件测试、测试与开发的区别

博客主页:Duck Bro 博客主页系列专栏:软件测试专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 认识软件测试、测试与开发的区别 关键词:软件测试、测…

最短路算法详解(Dijkstra 算法,Bellman-Ford 算法,Floyd-Warshall 算法)

文章目录 一、Dijkstra 算法二、Bellman-Ford 算法三、Floyd-Warshall 算法 由于文章篇幅有限,下面都只给出算法对应的部分代码,需要全部代码调试参考的请点击: 图的源码 最短路径问题:从在带权图的某一顶点出发,找出…

【PyCharm激活码】2024年最新pycharm专业版激活码+安装教程!

一、PyCharm激活 激活码: KQ8KMJ77TY-eyJsaWNlbnNlSWQiOiJLUThLTUo3N1RZIiwibGljZW5zZWVOYW1lIjoiVW5pdmVyc2l0YXMgTmVnZXJpIE1hbGFuZyIsImxpY2Vuc2VlVHlwZSI6IkNMQVNTUk9PTSIsImFzc2lnbmVlTmFtZSI6IkpldOWFqOWutuahtiDorqTlh4blupflkI0iLCJhc3NpZ25lZUVtYWlsIjoi…

ArcEngine二次开发实用函数18:使用shp矢量对栅格文件进行掩模和GP授权获取

目录 1. 权限设置 2. 添加如下引用 3. 核心代码: 首先要确定要使用的gp工具需要什么权限,这个可以在工具的帮助中查看;获取权限之后,引用名称空间,编写处理代码: 下面给出具体的实例代码: 1. 权限设置 ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Eng…

介绍一下最近很火的一款游戏黑神话悟空,以及国产游戏面临的挑战

《黑神话:悟空》是一款由杭州游科互动科技有限公司开发的单机动作角色扮演游戏,以中国古典名著《西游记》为背景。游戏在2024年8月20日上线,支持PC(Steam、Epic、Wegame)和PlayStation 5平台,未来还将登陆X…

OpenCV绘图函数(13)绘制多边形函数函数polylines()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 画几条多边形曲线 函数原型 void cv::polylines (InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar & color…

浅谈 Android 15 新 API:确保 TextView 完整展示、不被切断~

本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究! 前言 很多语言和文字拥有特殊的、复杂的写法、画法,一个字符可能延伸到前一个字符的区域,甚至后一个字符的区域。 …

力扣375.猜数字大小 II

力扣375.猜数字大小 II dp dp[i][j]是说依次以从i到j的数字作为分割点(猜的数),必定赢的游戏所用钱的最小值。 枚举每一列,从下往上算出dp[i][j],最终答案为dp[1][n] class Solution {public:int getMoneyAmount(int n) {if(n 1)retu…

巧用scss实现一个通用的媒介查询代码

巧用scss实现一个通用的媒介查询代码 效果展示 实现代码 <template><div class"page-root"><div class"header"></div><div class"content"><div class"car-item" v-for"item in 9">…

20行为型设计模式——访问者模式

一、访问者模介绍 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;用于将操作封装在访问者对象中&#xff0c;以便在不改变被访问对象的类的前提下&#xff0c;定义新的操作。它允许你在不修改现有代码的情况下&#xff0c;向对象结构中添…

类和对象以及内存管理

对象拷贝时的编译器优化 现代编译器会为了尽可能提高程序的效率&#xff0c;在不影响正确性的情况下会尽可能减少⼀些传参和传返回值的过程中可以省略的拷贝。如何优化C标准并没有严格规定&#xff0c;各个编译器会根据情况自行处理。当前主流的相对新⼀点的编译器对于连续⼀个…

电池信息 v5.29.11 高级版,智能优化充电,最多可延长50%电池寿命

Charging Master 是一款非常实用的安卓 APP&#xff0c;专注于为您的手机充电提供最佳体验。借助其智能优化功能&#xff0c;Charging Master 能够最大程度地延长电池寿命&#xff0c;最多可达 50% 的节省。此外&#xff0c;该应用还提供了一系列功能&#xff0c;助您更好地管理…

提升团队效率的9款免费办公工具评测

本文主要介绍了以下9款协同办公软件&#xff1a;1.Worktile&#xff1b;2.PingCode&#xff1b;3.石墨文档&#xff1b;4.Teambition&#xff1b;5.蓝湖&#xff1b;6.工作宝&#xff1b;7.飞书&#xff1b;8.Asana&#xff1b;9.ClickUp。 在现代职场中&#xff0c;团队协作已…

GD - GD32350R_EVAL - PWM实验和验证1

文章目录 GD - GD32350R_EVAL - PWM实验和验证1概述笔记实验设计实验环境GD32350R_EVAL 的硬件连接修改程序配置 - 只产生PWM波&#xff0c;不要CMP清除波形TIMER0时钟设置TIMER0的PWM设置参数设置main()中PWM波形的开启代码示波器测量结果如果要产生4KHZ的PWM需要设置怎样的参…

在centos系统中kill掉指定进程

如上图&#xff0c;我想kill掉 python3 func_tg_1_vps.py这个进程&#xff08;而不kill掉python3 func_tg_2_vps.py&#xff09;。 解决方法&#xff1a; 第一步&#xff1a;首先使用ps -ef | grep python3命令&#xff0c;查出所有包含python3的命令 拿其中一条讲解 root …

开放式耳机漏音有多大?开放式耳机是否值得购买?

开放式耳机确实存在漏音的问题&#xff0c;这是因为其设计原理决定的。开放式耳机不像封闭式耳机那样完全封闭耳道&#xff0c;因此声音会向外散播&#xff0c;导致漏音。不过&#xff0c;随着技术的发展&#xff0c;许多耳机制造商已经开始着手解决这个问题&#xff0c;通过改…