0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Matlab实现傅里叶变换的步骤

冬至子 来源:算法工程师的学习日志 作者:搬砖工程师domi 2023-07-19 17:47 次阅读

傅里叶变换是将按时间或空间采样的信号与按频率采样的相同信号进行关联的数学公式。在信号处理中,傅里叶变换可以揭示信号的重要特征(即其频率分量)。

图片

对于包含 n 个均匀采样点的向量 x,其傅里叶变换定义为

图片

ω=e−2πi/n 是 n 个复单位根之一,其中 i 是虚数单位。对于 x 和 y,索引 j 和 k 的范围为 0 到 n−1。

MATLAB中的 fft 函数使用快速傅里叶变换算法来计算数据的傅里叶变换。以正弦信号 x 为例,该信号是时间 t 的函数,频率分量为 15 Hz 和 20 Hz。使用在 10 秒周期内以 150 秒为增量进行采样的时间向量。

t = 0:1/50:10-1/50;                     
x = sin(2*pi*15*t) + sin(2*pi*20*t);
figure
plot(t,x)

图片

计算信号的傅里叶变换,并在频率空间创建对应于信号采样的向量 f。

y = fft(x);     
f = (0:length(y)-1)*50/length(y);

以频率函数形式绘制信号幅值时,幅值尖峰对应于信号的 15 Hz 和 20 Hz 频率分量。

figure
plot(f,abs(y))
title('Magnitude')

图片

该变换还会生成尖峰的镜像,对应于信号的负频率。为了更好地以可视化方式呈现周期性,使用 fftshift 函数对变换执行以零为中心的循环平移。

n = length(x);                         
fshift = (-n/2:n/2-1)*(50/n);
yshift = fftshift(y);
figure
plot(fshift,abs(yshift))

图片

含噪信号

在科学应用中,信号经常遭到随机噪声破坏,掩盖其频率分量。傅里叶变换可以清除随机噪声并显现频率。例如,通过在原始信号 x 中注入高斯噪声,创建一个新信号 xnoise

rng('default')
xnoise = x + 2.5*randn(size(t));

频率函数形式的信号功率是信号处理中的一种常用度量。功率是信号的傅里叶变换按频率样本数进行归一化后的平方幅值。计算并绘制以零频率为中心的含噪信号的功率谱。尽管存在噪声,仍可以根据功率中的尖峰辨识出信号的频率。

ynoise = fft(xnoise);
ynoiseshift = fftshift(ynoise);    
power = abs(ynoiseshift).^2/n; 
figure
plot(fshift,power)
title('Power')

1.jpg

计算效率

直接使用傅里叶变换公式分别计算 y 的 n 个元素需要 n平方 数量级的浮点运算。使用快速傅里叶变换算法,则只需要 nlogn 数量级的运算。在处理包含成百上千万个数据点的数据时,这一计算效率会带来很大的优势。在 n 为 2 的幂时,许多专门的快速傅里叶变换实现可进一步提高效率。

以加利福尼亚海岸的水下麦克风所收集的音频数据为例。在康奈尔大学生物声学研究项目维护的库中可以找到这些数据。载入包含太平洋蓝鲸鸣声的文件 bluewhale.au,并对其中一部分数据进行格式化。可使用命令 sound(x,fs) 来收听完整的音频文件。

whaleFile = 'bluewhale.au';
[x,fs] = audioread(whaleFile);
whaleMoan = x(2.45e4:3.10e4);
t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);
figure
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      
figure
plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency')
ylabel('Power')

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 变换器
    +关注

    关注

    17

    文章

    2088

    浏览量

    109164
  • FFT
    FFT
    +关注

    关注

    15

    文章

    434

    浏览量

    59328
  • MATLAB仿真
    +关注

    关注

    4

    文章

    176

    浏览量

    19908
  • 傅里叶变换
    +关注

    关注

    6

    文章

    438

    浏览量

    42573
  • 信号采样电路

    关注

    1

    文章

    2

    浏览量

    1193
收藏 人收藏

    评论

    相关推荐

    图像频率域分析之傅里叶变换

    文章目录傅里叶变换基础傅里叶级数傅里叶积分傅里叶变换一维连续傅里叶变换一维离散傅里叶变换二维离散傅里叶变换
    发表于 05-22 07:41

    傅里叶变换是什么?如何求傅里叶变换

    傅里叶变换是什么?三傅里叶变换的意义是什么?如何求傅里叶变换
    发表于 05-08 09:23

    DSP变换运算-傅里叶变换

    第24章 DSP变换运算-傅里叶变换本章节开始进入此教程最重要的知识点之一傅里叶变换。关于傅里叶变换,本章主要是把傅里叶相关的基础知识进行必要的介绍,没有这些基础知识的话,后面学习FF
    发表于 08-03 06:14

    什么是傅里叶变换

    什么是傅里叶变换 傅里叶变换(Transformée de Fourier)是一种积分变换。 因其基本思想首先
    发表于 11-29 12:46 9508次阅读
    什么是<b class='flag-5'>傅里叶变换</b>

    傅立叶变换五大性质的matlab实现

    matlab关于傅里叶变换的一些实现方法。
    发表于 02-23 18:21 0次下载

    傅立叶变换matlab实现

    有关傅里叶变换matlab教程,简单明了。
    发表于 02-23 18:22 0次下载

    小波变换傅里叶变换好在哪里_小波变换傅里叶变换详解

    小波变换傅里叶变换有什么区别吗?小波变换傅里叶变换哪个好?我们通过小波变换傅里叶变换的详细
    发表于 01-13 11:02 1.6w次阅读
    小波<b class='flag-5'>变换</b>比<b class='flag-5'>傅里叶变换</b>好在哪里_小波<b class='flag-5'>变换</b>与<b class='flag-5'>傅里叶变换</b>详解

    傅里叶变换去除图像条纹杂讯实现步骤

    空间域的处理方法比较多,比如傅里叶变换和小波变换等。
    的头像 发表于 05-15 10:29 1439次阅读
    <b class='flag-5'>傅里叶变换</b>去除图像条纹杂讯<b class='flag-5'>实现</b><b class='flag-5'>步骤</b>

    matlab对信号进行傅里叶变换

    傅氏变换分析是信号分析中很重要的方法,借助matlab可以很方便的对各类信号进行傅氏频域分析。本文介绍了集中离散的傅氏变换以及matlab实现
    的头像 发表于 07-19 10:10 1797次阅读
    用<b class='flag-5'>matlab</b>对信号进行<b class='flag-5'>傅里叶变换</b>

    傅里叶变换基本性质 傅里叶变换本质 傅里叶变换的应用

    傅里叶变换基本性质 傅里叶变换本质 傅里叶变换的应用 傅里叶变换是现代数学、物理学、工程学等领域中非常重要的一种数学工具和基本理论。在信号处理、图像处理、通信技术、音乐分析、光学、医学
    的头像 发表于 09-07 16:18 6478次阅读

    傅里叶变换实现方法

    傅里叶变换实现方法  傅里叶变换是一种将信号在时间域和频率域之间相互转换的数学工具。它的实现方法有很多种,其中最常见的是离散傅里叶变换(D
    的头像 发表于 09-07 16:47 1255次阅读

    傅里叶变换和离散傅里叶变换的关系

    傅里叶变换和离散傅里叶变换的关系 傅里叶变换(Fourier Transform)是一种将时间域(或空间域)的信号转换为频率域(或波数域)的信号的数学工具。而离散傅里叶变换(Discr
    的头像 发表于 09-07 17:04 2515次阅读

    傅里叶变换的定义 傅里叶变换的意义

    傅里叶变换的定义 傅里叶变换的意义  傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。 在不同的研究领域,傅里叶变换具有多种不同
    的头像 发表于 11-30 15:32 1981次阅读

    什么是傅里叶变换和逆变换?为什么要用傅里叶变换?

    傅里叶变换和逆变换是一对数学变换,用于分析信号和数据的频域特征。傅里叶变换将一个信号或函数从时间域转换到频域,而逆变换则将
    的头像 发表于 01-11 17:19 3716次阅读

    如何实现离散傅里叶变换

    离散傅里叶变换(DFT)是将离散时序信号从时间域变换到频率域的数学工具,其实现方法有多种,以下介绍几种常见的实现方案: 一、直接计算法 直接依据离散
    的头像 发表于 11-14 09:35 204次阅读