傅里叶变换与Matlab

这篇具有很好参考价值的文章主要介绍了傅里叶变换与Matlab。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

傅里叶变换与Matlab


前言

  很多初学者学习了傅里叶变换之后,只是对其公式死记硬背,从而达到做题的目的,但并不理解其原理,对于很多时频分析问题的理解不够透彻。之前自己也是如此,在经过深入学习之后,对变换公式的的本质进行探讨,理解变换的原理及意义所在,同时将傅里叶变换和时频分析结合起来,运用理论和实际相结合的方式,形成一个较为系统的概念,可以从而这个系统从而引伸到其他方面,也加深自己的理解。
  同时,将对在Matlab中进行FFT变换进行简要分析,解决一些相关问题,加深理解。
  本文采用正弦信号作为FFT变换演示。如有不足之处,希望大家指出。


一、背景

  1、如果大家已经学习了傅里叶变换,那么大家肯定也从老师或者相关书籍了解到了它对重要性。在信号分析领域,它的重要性就类比于正余弦信号在数学中重要性。但是如果只是经过初始的学习,不能够将所学串联起来,很难建立一个系统的概念。
  2、在使用Matlab中的FFT变换进行信号的频域分析,但是对FFT变换Matlab代码中的一些基本构成却不是很明白。

二、原理

  傅里叶告诉我们,现实中的所有信号波形都可以视为一系列正弦信号的叠加。而傅里叶变换则是将原始波形分解为一系列的正弦频率。
  傅里叶变换:
  连续时间傅里叶变换: F ( j w ) = ∫ − ∞ + ∞ x ( t ) e − j w t d t F(jw) = \int_{-\infty}^{+\infty}x(t)e^{-jwt}dt F(jw)=+x(t)ejwtdt
  离散时间傅里叶变换: X ( e j w ) = ∑ i = − ∞ + ∞ x [ n ] e − j w n X(e^{jw})=\sum_{i=-\infty}^{+\infty}x[n]e^{-jwn} X(ejw)=i=+x[n]ejwn
  根据欧拉公式: e j θ = c o s ( θ ) + j s i n ( θ ) e^{j\theta}=cos(\theta)+jsin(\theta) ejθ=cos(θ)+jsin(θ)
  可以知道傅里叶变换的本质就是将原始信号表示为一系列正弦信号的叠加。分别从时间方向和频率方向仔细观察下图。可知,在时间方向上,原始信号波形被分解为一系列正弦波形;在频率方向上,原始波形被分解为对应的单一正弦频率。matlab傅里叶变换,matlab,算法,傅里叶分析

二、Matlab演示

  此代码中我们运用matlab产生一个频率分布为30Hz和100Hz正弦信号叠加而成的一个信号: x ( t ) = 0.5 ∗ s i n ( 2 ∗ p i ∗ 30 ∗ t ) + s i n ( 2 ∗ p i ∗ 100 ∗ t ) x(t) = 0.5*sin(2*pi*30*t) + sin(2*pi*100*t) x(t)=0.5sin(2pi30t)+sin(2pi100t)。然后对信号添加均值为0,方差为4的噪声: w ( t ) = 2 ∗ r a n d n ( s i z e ( t ) ) w(t)=2*randn(size(t)) w(t)=2randn(size(t))(也可使用awgn函数添加噪声)。和信号为 s ( t ) = x ( t ) + w ( t ) s(t)=x(t)+w(t) s(t)=x(t)+w(t)
   然后我们对信号 s ( t ) s(t) s(t)进行FFT变换,分别得到双边谱和单边谱信息。Matlab代码如下:
  首先生成信号并添加噪声:

Fs = 1000;            % 采样率(HZ)                    
T = 1/Fs;             % 采样间隔(秒/S)       
L = 1500;             % 信号长度(毫秒/ms)
t = (0:L-1)*T;        % 时间向量
x = sin(2*pi*30*t) + sin(2*pi*100*t);   %频率分别为50Hz和120Hz的合成信号

%原始信号时域表示图
figure(1)
plot(1000*t(1:500),x(1:500))  %原始长度1500s,为方便观察,取500ms显示
title('原始信号时域表示')
xlabel('t (毫秒)')
ylabel('x(t)')

  添加均值为0,方差为4的噪声: w ( t ) = 2 ∗ r a n d n ( s i z e ( t ) ) w(t)=2*randn(size(t)) w(t)=2randn(size(t));含噪信号: s ( t ) = x ( t ) + w ( t ) s(t)=x(t)+w(t) s(t)=x(t)+w(t)

%加噪
s = x + 2*randn(size(t));   %添加均值为0,方差为4的随机噪声
%含噪信号时域表示图
figure(2)
plot(1000*t(1:500),s(1:500))
title('含噪信号时域表示:')
xlabel('t (毫秒)')
ylabel('x(t)')

  生成原始信号和加噪信号时域图:

matlab傅里叶变换,matlab,算法,傅里叶分析matlab傅里叶变换,matlab,算法,傅里叶分析

  然后我们对信号进行FFT变换,得到双边谱和单边谱:

%计算频域信息
y = fft(s);   %计算信号的傅里叶变换。
P2 = abs(y/L);  %取绝对值
P1 = P2(1:L/2+1);   %单侧谱
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:L-1)/L;
f1 = Fs*(0:(L/2))/L;     %横坐标坐标变换
%信号频谱图
figure(3)
plot(f,P2) 
title('含噪信号s(t)的双边谱')
xlabel('f (Hz)')
ylabel('|P1(f)|')

figure(4)
plot(f1,P1) 
title('含噪信号s(t)的单边谱')
xlabel('f (Hz)')
ylabel('|P1(f)|')

  生成单边谱和双边谱图像:

matlab傅里叶变换,matlab,算法,傅里叶分析matlab傅里叶变换,matlab,算法,傅里叶分析

二、问题分析

1.单边谱和双边谱

  在Matlab中对信号进行FFT变换时,如果不加处理,变换出来的频谱就和上图的双边谱一样,会产生一个镜像频谱,但是这个镜像频谱不是我们所需要的,就需要对变换的频谱进行处理,从而得到信道得单边频谱。我们可以对频域生成图像进行处理,只显示频域图像正半轴的信号,以方便我们的观察。

1.变换后的频域坐标讨论

  对于这个问题,当时自己也不明白在变换后的代码中为何要加入下面这段代码,只知道是时域与频域的一个对应关系。

f1 = Fs*(0:(L/2))/L;     %横坐标坐标变换

  下面,结合查阅资料,理解如下。
  由于机器只能处理数字信号,在Matlab中,我们所观察到的连续的时间信号其实是由一个个足够密的采样点连接而成,而不是我们所认为的连续信号,不过当采样点足够密时,可以在一定程度上认为它是连续信号。那么,在Matlab中信号的组成就是由一个个(x,y)点。有了这个理解就不难领悟下面的解释。首先,要说这个频域横坐标的来源,得涉及一个频域的参数:频率分辨率( Δ f = Δf = Δf= F s N \frac{Fs}{N} NFs);在Matlab中时域有时间分辨率,那么频域自然也有对应的频率分辨率。
  由于是显示的单边谱,那么就只显示信号一边的频谱,那么结合频域长度和频域的分辨率,就自然可以得到频域的横坐标来源了。

点数 0 1 2 3 4 L 2 \frac{L}{2} 2L
横坐标表示 0 ∗ F s N 0*\frac{Fs}{N} 0NFs 1 ∗ F s N 1*\frac{Fs}{N} 1NFs 2 ∗ F s N 2*\frac{Fs}{N} 2NFs 3 ∗ F s N 3*\frac{Fs}{N} 3NFs 4 ∗ F s N 4*\frac{Fs}{N} 4NFs L 2 ∗ F s N \frac{L}{2}*\frac{Fs}{N} 2LNFs
对应值 0.6667 1.3333 2 2.6667 3.3333 500

三、总结

  综上所述,本文通过对傅里叶变换公式本质的讨论,得到傅里叶变换的本质就是将原始信号分解为一系列正弦信号的组合,通过傅里叶变换,我们可以得到原始信号的频率组成,以便于对信号在频域进行滤波等处理。例如,假如原始信号的频率范围为100~200HZ,而且其中添加了其它频率成分的噪声,那么我就可以通过一个带通滤波器,过滤之后保留100·200HZ的信号,从而实现原始信号的恢复。同时,利用matlab对FFT变换之后的频域单边谱、双边谱以及坐标组成进行了演示。将理论与实际相结合,以便于更深的理解及运用。文章来源地址https://www.toymoban.com/news/detail-809044.html

到了这里,关于傅里叶变换与Matlab的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab快速傅里叶变换

    快速傅里叶变换(FFT)是数字信号处理中常用的算法之一,可以用于信号分析、滤波、频率估计和信号生成等。在 Matlab 中,快速傅里叶变换是一个重要的工具,可以快速地计算信号的频域表示,帮助研究人员更好地理解和分析信号。本文将介绍 Matlab 中的快速傅里叶变换及其

    2024年02月09日
    浏览(31)
  • 图像Radon变换与傅里叶变换(matlab)

    图像变化的介绍 图像变换是将图像从空间域变换到变换域。图像变换的目的是根据图像在变换域的某些性质对其处理。通常这些性质在空间域内很难获取。在变换域内处理结束后,将处理的结果进行反转变换到空间域。 我们所看到的图像是在空域上的,其信息具有很强的相

    2024年02月05日
    浏览(31)
  • MATLAB——DFT(离散傅里叶变换)

    题目1: 已知有限长序列x(n)为: x(n)=[0,1,2,3,4,5,6,7,8,9],求x(n)的DFT和IDFT。要求 1)画出序列傅里叶变换对应的|X(k)|和arg[X(k)]图形。 2)画出原信号与傅里叶逆变换IDFT[X(k)]图形进行比较。 知识点: DFT(Discrete Fourier Transform)和IDFT(Inverse Discrete Fourier Transform)是互为逆运算的变换

    2023年04月23日
    浏览(39)
  • 快速傅里叶变换MATLAB代码实现

    任何连续测量的时序或信号,都可以表示为不同频率的余弦(或正弦)波信号的无限叠加。FFT(Fast Fourier Transform)是离散傅立叶变换的快速算法,可以将一个信号变换到频域。 对于包含 n n n 个均匀采样点的向量 x x x ,其傅里叶变换定义为 y k + 1 = ∑ j = 0 n − 1 ω j k x j + 1

    2023年04月09日
    浏览(30)
  • 傅里叶变换的相关实验——matlab实现

    图像变换是数字图像处理中常用的技术,在图像增强、图像复原、图像压缩编码等数字图像处理中,都会用到图像变换技术,傅里叶变换是数字图像处理中应用最广的一种变换。 从空间域到频率的唯一途径是进行傅里叶变换; 傅里叶变换有明确的物理意义,即任何时域连续

    2023年04月11日
    浏览(31)
  • MATLAB——FFT(快速傅里叶变换)

    基础知识 FFT即快速傅里叶变换,利用周期性和可约性,减少了DFT的运算量。常见的有按时间抽取的基2算法(DIT-FFT)按频率抽取的基2算法(DIF-FFT)。 1.利用自带函数fft进行快速傅里叶变换 若已知序列 x = [ 4 , 3 , 2 , 6 , 7 , 8 , 9 , 0 ] x=[4,3,2,6,7,8,9,0] x = [ 4 , 3 , 2 , 6 , 7 , 8 , 9 , 0 ]

    2024年02月03日
    浏览(57)
  • 短时傅里叶变换(STFT)及matlab

    笔记~自用版~         短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,它将信号在时间域上分成若干个短时段,对每个短时段进行窗函数加窗后再做傅里叶变换,得到每个时刻的频率成分。与离散傅里叶变换(Discrete Fourier Transform, DFT)和连续傅里叶变换

    2024年02月08日
    浏览(27)
  • matlab傅里叶变换及矩阵数据统计

    目录 一、   设计任务及指标. 3 二、  设计过程. 3 1、   界面设计. 3 2、   具体设计. 5 傅里叶变换设计思路:. 5 按钮的回调函数:. 5 弹出式菜单部分:. 6 单选按钮部分:. 7 矩阵部分:. 8 三、  设计遇到问题及总结. 9 1.傅里叶变换部分. 9 2.修饰样式部分. 10 四、  课程学

    2024年04月23日
    浏览(26)
  • 【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

    fft2()  傅里叶正变换 fftshift()  频谱搬移-直流量(f=0)搬移至频谱中心 幅度谱只包含亮度信息(f),逆变换后由于没有位置信息(x,y)导致无法重构图像;相位谱只包含位置信息(x,y),逆变换后由于没有亮度信息(f)导致重构图像只有轮廓没有亮度。而同时利用幅度谱

    2024年02月11日
    浏览(26)
  • 用MATLAB计算序列的离散傅里叶变换

    MATLAB提供了用快速算法计算离散傅里叶变换的函数fft,其调用格式为: 其中, 调用参数xn为时域序列向量 , N为离散傅里叶变换区间长度。 当N大于xn的长度时,fft函数自动在xn后面补零,返回xn的N点离散傅里叶变换结果向量Xk。 当N小于xn的长度时,fft函数计算xn的前N个点构成

    2023年04月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包