python:傅里叶分析,傅里叶变换 FFT

使用python进行傅里叶分析,傅里叶变换 FFT  的一些关键概念的引入:

1.1.离散傅里叶变换(DFT)
    离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心,经过它把信号从时间域变换到频率域,进而研究信号的频谱结构和变化规律。可是它的致命缺点是:计算量太大,时间复杂度过高,当采样点数过高的时候,计算缓慢,由此出现了DFT的快速实现,即下面的快速傅里叶变换FFT。
1.2.快速傅里叶变换(FFT)
    计算量更小的离散傅里叶的一种实现方法。快速傅氏变换(FFT),是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
1.3.采样频率以及采样定率
采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫做采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机每秒钟采集多少个信号样本。

采样定理 ,又称香农采样定理,奈奎斯特采样定理,是信息论,特别是通信与信号处理学科中的一个重要基本结论。采样定理指出,若是信号是带限的,而且采样频率高于信号带宽的两倍,那么,原来的连续信号能够从采样样本中彻底重建出来。

1.4.如何理解采样定理
    在对连续信号进行离散化的过程当中,不免会损失不少信息,就拿一个简单地正弦波而言,若是我1秒内就选择一个点,很显然,损失的信号太多了,光着一个点我根本不知道这个正弦信号究竟是什么样子的,天然也没有办法根据这一个采样点进行正弦波的还原,很明显,我采样的点越密集,那越接近原来的正弦波原始的样子,天然损失的信息越少,越方便还原正弦波。

采样定理说明采样频率与信号频率之间的关系,是连续信号离散化的基本依据。 它为采样率创建了一个足够的条件,该采样率容许离散采样序列从有限带宽的连续时间信号中捕获全部信息。
编写 test_fft_1.py 如下

# -*- coding: utf-8 -*-
""" 使用scipy包实现快速傅里叶变换 """
import numpy as np
from scipy.fftpack import fft, ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
mpl.rcParams['axes.unicode_minus'] = False   #显示负号# 采样点选择1400个,由于设置的信号频率份量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍,
# 因此这里设置采样频率为1400赫兹(即一秒内有1400个采样点,同样意思的)
x = np.linspace(0,1,1400)
#设置须要采样的信号,频率份量有200,400和600
y = 7*np.sin(2*np.pi*200*x) + 5*np.sin(2*np.pi*400*x) + 3*np.sin(2*np.pi*600*x)
fft_y = fft(y) #快速傅里叶变换
N= 1400
x = np.arange(N) # 频率个数
half_x = x[range(int(N/2))] #取一半区间
abs_y = np.abs(fft_y) # 取复数的绝对值,即复数的模(双边频谱)
angle_y = np.angle(fft_y) #取复数的角度
normalization_y = abs_y/N #归一化处理(双边频谱)
normalization_half_y = normalization_y[range(int(N/2))] #因为对称性,只取一半区间(单边频谱)
plt.subplot(231)
plt.plot(x,y) 
plt.title('原始波形')
plt.subplot(232)
plt.plot(x,fft_y,'black')
plt.title('双边振幅谱(未求振幅绝对值)',fontsize=9,color='black')
plt.subplot(233)
plt.plot(x,abs_y,'r')
plt.title('双边振幅谱(未归一化)',fontsize=9,color='red')
plt.subplot(234)
plt.plot(x,angle_y,'violet')
plt.title('双边相位谱(未归一化)',fontsize=9,color='violet')
plt.subplot(235)
plt.plot(x,normalization_y,'g')
plt.title('双边振幅谱(归一化)',fontsize=9,color='green')
plt.subplot(236)
plt.plot(half_x,normalization_half_y,'blue')
plt.title('单边振幅谱(归一化)',fontsize=9,color='blue')
plt.show()

运行 python test_fft_1.py


傅里叶定理指出,任何频率为f0的周期信号都可以通过将频率为f0,2f0,3f0,4f0,5f0等的“正弦波”(正弦波)相加而精确地构建。将周期时域信号分割为正弦波称为傅里叶分析。
“傅里叶级数”中的每个正弦曲线的特征在于频率振幅,以及阶段f0被称为基频。
2f0、3f0、4f0等被称为谐波。

编写 test_sawtooth.py 如下

# -*- coding: utf-8 -*-
"""使用scipy中的 sawtooth()生成了频率为f=200Hz的锯齿信号,持续时间为2秒。"""
import matplotlib.pyplot as plt  # plotting
import seaborn as sns            # styling (uncomment if you want)
import numpy as np
from scipy import signal as sig     # for easy sawtooth signal generationsns.set()
fs=8000                   # sampling frequency
t = np.arange(0, 2, 1/fs) # time vector
f = 200                   # frequency in Hz for scipy sawtooth
saw_tooth = sig.sawtooth(2 * np.pi * f * t)
# plot first 20 ms (=160 samples at sampling frequency of 8000 Hz)
plt.subplot(1,2,1)
plt.plot(t[0:160], saw_tooth[0:160], '--', label='scipy sawtooth')
plt.xlabel('time $t$ in seconds')
plt.ylabel('$x(t)$')
plt.legend()# calculate the spectum (frequency domain representation)
FFT_length = 2**15 # take a power of two which is larger than the signal length
f = np.linspace(0, fs/2, num=int(FFT_length/2+1))
spectrum = np.abs(np.fft.rfft(saw_tooth, n=FFT_length))
# plot the spectrum
plt.subplot(1,2,2)
plt.plot(f,spectrum)
plt.xlabel('frequency $f$ in Hz')
plt.ylabel('$x(f)$')
plt.tight_layout() # this allowes for some space for the title text.
plt.show()

运行 pytho test_sawtooth.py

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

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

相关文章

上手 Promethus - 开源监控、报警工具包

名词解释 Promethus 是什么 开源的【系统监控和警报】工具包 专注于: 1)可靠的实时监控 2)收集时间序列数据 3)提供强大的查询语言(PromQL),用于分析这些数据 功能: 1&#xff0…

Java Web——XML

1. XML概述 XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。XML是一种用于存储和传输数据的语言,它使用标签来标记数据,以便于计算机处理和我们人来阅读。 “可扩展”三个字表明XML可以根据需要进行扩展和定制。这意味…

ubuntu+Teslav100 环境配置

系统基本信息 nvidia-smi’ nvidia-smi 470.182.03 driver version:470.182.03 cuda version: 11.4 产看系统体系结构 uname -aUTC 2023 x86_64 x86_64 x86_64 GNU/Linux 下载miniconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?CM&OA https://mi…

MyBatisPlus入门介绍

目录 一、MyBatisPlus介绍 润物无声 效率至上 丰富功能 二、Spring集成MyBatisPlus 三、SpringBoot集成MyBatisPlus 一、MyBatisPlus介绍 MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变&#xff0c…

Kafka系列 - Kafka一篇入门

Kafka是一个分布式流式处理平台。很多分布式处理系统,例如Spark,Flink等都支持与Kafka集成。 Kafka使用场景 消息系统:Kafka实现了消息顺序性保证和回溯消费。存储系统:Kafka把消息持久化到磁盘,相比于其他基于内存的…

如何处理git多分支

本篇文章主要处理以下两种多分支问题 如何将自己在本地的修改上传到一个新的Git分支(比如用于测试,不合并进main分支)?如何在一个新的本地仓库拉取一个项目的非main分支,并处理他们关联关系? 1. 将自己在…

java基于springboot公益帮学网站 新闻发布系统的设计与实现vue

以Java为开发平台,综合利用Java Web开发技术、数据库技术等,开发出公益帮学网站。用户使用版块:可以选择注册并登录,可以浏览信息、可以网上互动、发布文章、内容推荐等。后台管理员管理版块:以管理员身份登录网站后台…

C# 读写FDX-B(ISO11784/85)动物标签源码

本示例使用的发卡器:EM4305 EM4469 ISO11784/85协议125K低频FXD-B动物标签读写发卡器-淘宝网 (taobao.com) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S…

rk3588配置uac功能,android13使能uac及adb的复合设备

最近,因新增需求需要在现有产品上增加UAC的功能,查阅并学习相关知识后,在rk3588 SOC硬件平台搭载android13系统平台上成功配置了uac及uac&adb的复合设备。基于开源共享精神希望给大家提供些参考。 1.技术可行性预研 (1&#…

【一起来学kubernetes】7、k8s中的ingress详解

引言配置示例负载均衡的实现负载均衡策略实现模式实现方案Nginx类型Ingress实现Treafik类型Ingress实现HAProxy类型ingress实现Istio类型ingress实现APISIX类型ingress实现 更多 引言 Ingress是Kubernetes集群中的一种资源类型,用于实现用域名的方式访问Kubernetes…

自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x02 Nginx 配置 https双向认证》

自建CA实战之 《0x02 Nginx 配置 https双向认证》 上一章节我们已经实现了Nginx上配置https单向认证,主要场景为客户端验证服务端的身份,但是服务端不验证客户端的身份。 本章节我们将实现Nginx上配置https双向认证,主要场景为客户端验证服…

C++ 实现位图

引出 面试题:给出 40 亿个不重复的无符号整数,没有排过序。给定一个无符号整数,如何快速判断这个数是否在这 40 亿个无符号整数中。[ 腾讯面试题 ] 想法一:将 40 亿个数据存放到 set 里面,然后再查找指定的无符号整数。…

论文阅读——MCAN(cvpr2019)

补充一下MCAN-VQA: 对图片的处理:首先输入图片到Faster R-CNN,会先设定一个判断是否检测到物体的阈值,这样动态的生成m∈[10,100]个目标,然后从检测到的对应的区域通过平均池化提取特征。第i个物体特征表示为&#xff…

MUYUCMS v2.1:一款开源、轻量级的内容管理系统

MuYuCMS:一款基于Thinkphp开发的轻量级开源内容管理系统,为企业、个人站长提供快速建站解决方案。它具有以下的环境要求: 支持系统:Windows/Linux/Mac WEB服务器:Apache/Nginx/ISS PHP版本:php > 5.6 (…

发布鸿蒙的第一个java应用

1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程(当前用的IDEA 3.1.1 Release) 选择第一个,其他的默认只能用(API9)版本,搞了半天才发现8&#xff…

11 月 25 日 ROS 学习笔记——3D 建模与仿真

文章目录 前言一、在 ROS 中自定义机器人的3D模型1. 在 rviz 里查看3D模型2. xacro 二、Gazebo1. urdf 集成 gazebo2. 综合应用1). 运动控制及里程计2). 雷达仿真3). 摄像头信息仿真4). kinect 深度相机仿真5). 点云 前言 本文为11 月 25 日 ROS 学习笔记——3D 建模与仿真&am…

STK Components 基础篇

1.开发包 STK Components 访问AGI官网,注册并登录后,从官网下载开发包:https://support.agi.com/downloads/,下载成功后可以申请许可证,AGI会向你注册的邮箱地址发送有效期半年的使用授权许可文件(lic文件…

最详细手把手教你安装 Git + TortoiseGit 及使用

软件下载 从 Git 官网 下载 Git 安装程序,点击 Download for Windows: 点击下载 64-bit Git for Windows Setup: Git for Windows Setup 为安装版本,建议选择此版本Git for Windows Portable 为绿色免安装版本 从 TortoiseGit 官网 下载 T…

Spring Boot + hutool 创建海报图片

Spring Boot hutool 创建海报图片 /*** 分享,生成图片* param id* return*/GetMapping("/getShareImg")public void getShareImg(String id,HttpServletResponse response) throws IOException {CouponConsignSaleClassify byId couponConsignSaleClassifyService…

OpenCV简介及安装

前言 因为最近想做图像处理、人脸检测/识别之类的相关开发,所以就开始补OpenCV的相关知识,便开个专栏用于记录学习历程和在学习过程中遇到的一些值得注意的重点和坑。 学习过程基本上也是面向官方文档和Google。 简介 OpenCV(开源的计算机视觉库)是基于…