【 MATLAB 】信号处理工具箱之fft简介及案例分析

举报
李锐博恩 发表于 2021/07/15 07:40:18 2021/07/15
【摘要】 目录   Syntax Description Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) Examples Noisy Signal Syntax Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim) Description Y = fft(X) Y&n...

目录

 

Syntax

Description

Y = fft(X)

Y = fft(X,n)

Y = fft(X,n,dim)

Examples

Noisy Signal


Syntax

Y = fft(X)

Y = fft(X,n)

Y = fft(X,n,dim)



Description

Y = fft(X)

Y = fft(X) 使用fast Fourier transform(FFT)算法计算信号X的离散傅里叶变换:


Y = fft(X,n)

Y = fft(X,n) 返回 n 点 DFT。 如果未指定任何值,则Y与X的大小相同。

  • 如果X是向量并且X的长度小于n,则用尾随零填充X到长度n。

  • 如果X是向量并且X的长度大于n,则X被截断为长度n。

  • 如果X是矩阵,那么每个列都被视为向量情况。

  • 如果X是多维数组,则大小不等于1的第一个数组维度将被视为向量的情况。


Y = fft(X,n,dim)

Y = fft(X,n,dim)沿维度dim返回傅立叶变换。 例如,如果X是矩阵,则fft(X,n,2)返回每行的n点傅立叶变换。



Examples

Noisy Signal

使用傅立叶变换来查找隐藏在噪声中的信号的频率分量。

指定采样频率为1 kHz且信号持续时间为1.5秒的信号参数。


  
  1. clc
  2. clear
  3. close all
  4. % Use Fourier transforms to find the frequency components of a signal buried in noise.
  5. % Specify the parameters of a signal with a sampling frequency of 1 kHz and a signal duration of 1.5 seconds.
  6. Fs = 1000; % Sampling frequency
  7. T = 1/Fs; % Sampling period
  8. L = 1500; % Length of signal
  9. t = (0:L-1)*T; % Time vector
  10. % Form a signal containing a 50 Hz sinusoid of amplitude 0.7 and a 120 Hz sinusoid of amplitude 1.
  11. S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
  12. % Corrupt the signal with zero-mean white noise with a variance of 4.
  13. X = S + 2*randn(size(t));
  14. % Plot the noisy signal in the time domain. It is difficult to identify the frequency components by looking at the signal X(t).
  15. figure();
  16. plot(1000*t(1:50),X(1:50))
  17. title('Signal Corrupted with Zero-Mean Random Noise')
  18. xlabel('t (milliseconds)')
  19. ylabel('X(t)')
  20. % Compute the Fourier transform of the signal.
  21. Y = fft(X);
  22. % Compute the two-sided spectrum P2. Then compute the single-sided spectrum P1 based on P2 and the even-valued signal length L.
  23. P2 = abs(Y/L);
  24. P1 = P2(1:L/2+1);
  25. P1(2:end-1) = 2*P1(2:end-1);
  26. % Define the frequency domain f and plot the single-sided amplitude spectrum P1.
  27. % The amplitudes are not exactly at 0.7 and 1, as expected, because of the added noise. On average,
  28. % longer signals produce better frequency approximations.
  29. figure();
  30. f = Fs*(0:(L/2))/L;
  31. plot(f,P1)
  32. title('Single-Sided Amplitude Spectrum of X(t)')
  33. xlabel('f (Hz)')
  34. ylabel('|P1(f)|')
  35. % Now, take the Fourier transform of the original, uncorrupted signal and retrieve the exact amplitudes, 0.7 and 1.0.
  36. %
  37. Y = fft(S);
  38. P2 = abs(Y/L);
  39. P1 = P2(1:L/2+1);
  40. P1(2:end-1) = 2*P1(2:end-1);
  41. figure();
  42. plot(f,P1)
  43. title('Single-Sided Amplitude Spectrum of S(t)')
  44. xlabel('f (Hz)')
  45. ylabel('|P1(f)|')

 

figure(1)是加上零均值的随机噪声后的信号时域图形,通过观察这幅图很难辨别其频率成分。

figure(2)是X(t)的单边幅度谱,通过这幅图其实已经能够看出信号的频率成分,分别为50Hz和120Hz,其他的频率成分都会噪声的频率分量。

figure(3)是信号S(t)的单边幅度谱,用作和figure(2)的幅度谱对比,原信号确实只有两个频率成分。

上面三幅图画到一起:

更多案例见下篇博文:【 MATLAB 】信号处理工具箱之 fft 案例分析

 

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83059170

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。