【 MATLAB 】Fourier Transforms ( fft )
Fourier Transforms
傅立叶变换是将在时间或空间中采样的信号与频率采样的相同信号相关联的数学公式。 在信号处理中,傅里叶变换可以揭示信号的重要特征,即其频率分量。
这个公式也不该陌生吧,就是DFT的公式,见博文:终于到来的DFT
里面给出DFT的公式:
对比一下,你会发现其实二者是一样的。
MATLAB®中的fft函数使用快速傅里叶变换算法来计算数据的傅里叶变换。 考虑一个正弦信号x,它是时间t的函数,频率分量为15 Hz和20 Hz。 使用以10秒为单位以1/50秒为增量采样的时间向量。
t = 0:1/50:10-1/50;
x = sin(2*pi*15*t) + sin(2*pi*20*t);
plot(t,x)
计算信号的傅立叶变换,并创建对应于频率空间中信号采样的向量f。
y = fft(x);
f = (0:length(y)-1)*50/length(y);
当您将信号幅度绘制为频率的函数时,幅度峰值对应于15 Hz和20 Hz的信号频率分量。
plot(f,abs(y))
title('Magnitude')
变换还会生成尖峰的镜像副本,这些副本对应于信号的负频率。 为了更好地可视化此周期性,您可以使用fftshift函数,该函数在变换上执行零中心的循环移位。
n = length(x);
fshift = (-n/2:n/2-1)*(50/n);
yshift = fftshift(y);
plot(fshift,abs(yshift))
Noisy Signals
在科学应用中,信号经常被随机噪声破坏,掩盖了它们的频率成分。 傅里叶变换可以处理随机噪声并显示频率。
For example, create a new signal, xnoise, by injecting Gaussian noise into the original signal, x.
xnoise = x + 2.5*gallery('normaldata',size(t),4);
画出这个信号的图像:
plot(t,xnoise);
作为频率函数的信号功率是信号处理中使用的常用度量。 功率是信号傅立叶变换的平方幅度,通过频率样本的数量进行归一化。
计算并绘制以零频率为中心的噪声信号的功率谱。 尽管存在噪音,但由于功率峰值,您仍然可以确定信号的频率。
ynoise = fft(xnoise);
ynoiseshift = fftshift(ynoise);
power = abs(ynoiseshift).^2/n;
plot(fshift,power)
title('Power')
Computational Efficiency
直接使用傅立叶变换公式计算浮点运算顺序中的每个需求元素。 快速傅里叶变换算法仅需要按计算的操作顺序。 当处理具有数百万个数据点的数据时,这种计算效率是一个很大的优势。 当功率为2时,快速傅里叶变换算法的许多专门实现甚至更有效。
考虑从加利福尼亚海岸外的水下麦克风收集的音频数据。 这些数据可以在康奈尔大学生物声学研究计划维护的图书馆中找到。 在bluewhale.au中加载和格式化数据的子集,其中包含太平洋蓝鲸发声。 您可以使用命令声音(x,fs)来收听整个音频文件。
whaleFile = 'bluewhale.au';
[x,fs] = audioread(whaleFile);
whaleMoan = x(2.45e4:3.10e4);
t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);plot(t,whaleMoan)
xlabel('Time (seconds)')
ylabel('Amplitude')
xlim([0 t(end)])
指定新的信号长度,该信号长度是2的下一个幂,大于原始长度。 然后,使用fft使用新的信号长度计算傅立叶变换。 fft使用零自动填充数据以增加样本大小。 这种填充可以使变换计算明显更快,特别是对于具有大质数因子的样本大小。
m = length(whaleMoan);
n = pow2(nextpow2(m));
y = fft(whaleMoan,n);
绘制信号的功率谱。 该图表明,呻吟由大约17 Hz的基频和一系列谐波组成,其中强调了二次谐波。
f = (0:n-1)*(fs/n)/10; % frequency vector
power = abs(y).^2/n; % power spectrum
plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency')
ylabel('Power')
【 MATLAB 】Fourier Transforms ( fft )相关推荐
- 【 MATLAB 】Fourier Analysis and Filtering frame(傅立叶分析和滤波 框架)
本篇博文只给出一个架构,告诉你有 MATLAB 函数应用于这些方面,随后自己找相关理论知识和各个函数的介绍去填充这个框架. 准备把这个大主题整理起来,里面包含了 傅里叶变换,卷积,数字滤波. 变换和滤 ...
- 【 MATLAB 】信号处理工具箱之fft简介及案例分析
目录 Syntax Description Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) Examples Noisy Signal Syntax Y = fft( ...
- 【 MATLAB 】信号处理工具箱之 fft 案例分析
上篇博文:[ MATLAB ]信号处理工具箱之fft简介及案例分析介绍了MATLAB信号处理工具箱中的信号变换 fft 并分析了一个案例,就是被噪声污染了的信号的频谱分析. 这篇博文继续分析几个小案例 ...
- 【 MATLAB 】nextpow2 函数用法之 Optimize FFT with Padding
您可以使用nextpow2来填充传递给fft的信号. 这样做可以在信号长度不是2的精确幂次时加速FFT的计算. Optimize FFT with Padding 下面这个例子展示了 使用填充优化FF ...
- 【 MATLAB 】信号处理工具箱之 ifft 简介及案例分析
这篇博文和上篇博文对应:[ MATLAB ]信号处理工具箱之fft简介及案例分析 目录 ifft Syntax Description 案例分析 Inverse Transform of Vector ...
- 【 MATLAB 】通过不同样本数的同一个有限长序列作 DTFT 对比
上篇博文我们讨论了:[ MATLAB ]使用 MATLAB 得到高密度谱(补零得到DFT)和高分辨率谱(获得更多的数据得到DFT)的方式对比(附MATLAB脚本) 可是还是觉得不过瘾,还有下面的情况需 ...
- 【 MATLAB 】使用 MATLAB 作图讨论有限长序列的 N 点 DFT(强烈推荐)(含MATLAB脚本)
这篇博文本来是和上篇博文一起写的:[ MATLAB ]离散傅里叶级数(DFS)与DFT.DTFT及 z变换之间的关系 但是这篇博文我最初设计的是使用MATLAB脚本和图像来讨论的,而上篇博文全是公式, ...
- 【 MATLAB 】模拟信号采样及离散时间傅里叶变换(DTFT)案例分析
这篇博文中使用的模拟信号为上篇博文:[ MATLAB ]使用 MATLAB 实现模拟信号的近似及其连续傅里叶变换 中使用的模拟信号: 为了研究在频域数量上的采样效果,对该信号使用两种不同的采样频率采样 ...
- 【 MATLAB 】使用 MATLAB 实现模拟信号的近似及其连续傅里叶变换
严格来说,利用MATLAB是不可能用来分析模拟信号的.然而,如果有足够小的时间增量在足够细的栅格上对采样而产生一种平滑的图,并有足够大的时间来展示所有的模式,那么就能对模拟信号作近似分析.令是栅格间隔 ...
最新文章
- 如何查看CISCO FWSM上ACL分区的空闲资源
- luogu P4085 [USACO17DEC]Haybale Feast(尺取法 + 线段树)
- 《About Multi-Touch(多点触摸是个什么东西?)》:基于光学原理的多点触摸技术全解析...
- SparkSQL 之 Shuffle Join 内核原理及应用深度剖析-Spark商业源码实战
- 如何变得井井有条-来之不易的秘诀来组织您的生活
- Java笔记-JSP初步研究
- 26 WM配置-策略-入库策略6-定义批量仓储的策略B(Bulk Storage Strategy)
- python学来干什么-学python出来到底能干嘛
- 遥感技术在水利行业中的应用
- HLSL Effect的vertex shader和pixel shader的参数传递
- 最新的ARM-GCC下载安装指南
- 4、金字塔原理:演示的逻辑(10-12)-阅读笔记
- 百度杯全国网络攻防大赛——初来乍到
- 【渝粤题库】陕西师范大学202141规制经济学 作业(高起专)
- 四川省评高级教师考职称计算机,四川省中学教师中、高级职称评审条件
- Java反编译器JD
- 转:技术牛人画技术配图的经验分享
- docker 命令详解(二十四):push
- yolo3+python3.6
- Cloudera是个什么东西
热门文章
- 石墨计算机,高性能计算机助力石墨烯生产工艺的优化
- java poi3.15 ppt,Apache POI PPT - 演示( Presentation)
- 米家扩展程序初始化超时_28条规范和建议,教你如何设计出一套完美的PLC程序...
- 计算机怎么设置本地硬盘启动不了,电脑bios怎么设置硬盘启动
- mysql 导入一个数据库_mysql导入一个数据库
- 2021-06-082021年春季学期-信号与系统-第十五次作业-第四小题参考答案
- 2021年春季学期-信号与系统-第六次作业参考答案-第十小题
- panda对于EXCEL单元赋值如何能够设置string?
- 对于STM32F103控制的三轴机械臂基本功能测试-关节转动控制
- matlab中tab键怎么用来缩进,MATLAB中的一些小技巧