快速傅里叶变换MATLAB代码实现

快速傅里叶变换MATLAB代码实现


2024年5月17日发(作者:)

1 概述

2 代码

3 算例

1 概述

任何连续测量的时序或信号,都可以表示为不同频率的余弦(或正弦)波信号的无限叠加。

FFT(Fast Fourier Transform)是离散傅立叶变换的快速算法,可以将一个信号变换到频域。

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

式中:,为虚数单位

为什么做FFT:

(1)有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征

(频率,幅值,初相位);

(2)FFT可以将一个信号的频谱提取出来,进行频谱分析,为后续滤波准备;

(3)通过对一个系统的输入信号和输出信号进行快速傅里叶变换后,两者进行对比,对系统可

以有一个初步认识。

2 代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

p=inputParser;

addOptional(p,'Threshold',1e-6);

parse(p,varargin{:});

Threshold=old;

function

[ExtractedSignal]=FFTransform(OriginalSignal,T,Frequency,varargin)

% description:

%

[ExtractedSignal]=FFTransform(OriginalSignal,T,Frequency,Threshold)

% 快速傅里叶变换提取信号

% input:

% OriginalSignal-----观测值序列

% T------------------采样间隔

% Frequency----------欲提取的信号频率,向量

% varargin-----------可选参数Threshold,频率阈值,默认为1e-6,

% 原始信号频率与给定频率差值大于该阈值则予以剔除

% output:

% ExtractedSignal-----FFT变换后提取的信号

%

%

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

Len=length(OriginalSignal); %信号长度

Fs=1/T; % 采样频率

t=(0:Len-1)*T;

N = 2^nextpow2(Len);

%快速傅里叶变换

fftSingal = fft(OriginalSignal,N);

f = (0:N-1)*Fs/N; %频率

Amplitude = abs(fftSingal/N*2);%幅值

Phase = angle(fftSingal); %相值

ExtractedSignal=zeros(1,length(fftSingal));

%滤波,过滤频率为Frequency以外的信号

for k=0:N-1

if(min(abs(k*(Fs/N)-Frequency))>Threshold);

ExtractedSignal(k+1)=0;

else

ExtractedSignal(k+1)=fftSingal(k+1);

end

end

Yinverse=ifft(ExtractedSignal);%逆变换

assignin('base','X',OriginalSignal);

%绘图分析

close all;

figure;

subplot(2,1,1);

plot(t,OriginalSignal,'r');

xlabel('时间/s');

ylabel('X/m');

hold on;

%频谱图

subplot(2,1,2);

plot(f(1:N/2),Amplitude(1:N/2));

xlabel('频率/Hz');

ylabel('振幅/m');

%原始信号与滤波后的信号对比

figure;

plot((0:N-1)*T,real(Yinverse));

hold on;

plot(t,OriginalSignal,'r');

xlabel('时间/s');

ylabel('X/m');

legend('提取的信号','原始信号');

3 算例

假设一个随时间t变化的信号。其中包含振幅为3m、频率为20Hz正弦信号和振幅为1m、频

率为50Hz的余弦信号,这些信息在实际测量过程中很有可能是未知的,而只能对叠加的信号进

行测量。

式中为高斯白噪声。

加入方差为0.25m2的零均值高斯白噪声的信号和真实信号对比:

经过快速傅里叶变换后的振幅频谱图:

数字滤波

例如只提取20Hz的信号,可以将傅里叶变换后的信号在20Hz以外置零,再通过逆变换得到时间

域的上的信号序列


发布者:admin,转转请注明出处:http://www.yc00.com/news/1715951737a2696936.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信