27、matlab傅里叶变换:fft()函数

1、傅里叶变换简介

傅里叶变换是数学中一种非常重要的工具,用于将一个函数(通常是时域函数)分解成一组正弦和余弦函数的和。通过傅里叶变换,可以将一个信号从时域转换到频域,以便更好地理解信号的频率成分和频谱特征。

傅里叶变换的定义通常有两种形式:连续傅里叶变换(Continuous Fourier Transform)和离散傅里叶变换(Discrete Fourier Transform)。

连续傅里叶变换:连续傅里叶变换用于连续信号,将一个时域连续函数转换为一个频域连续函数。

数学上表示为:  F(\omega )=\int_{-\propto }^{\propto }f(t)e^{-j\omega t}dt

其中,f(t) 是时域函数,F(ω) 是频域函数,ω 是频率。

离散傅里叶变换:离散傅里叶变换用于离散信号,将一个时域离散序列转换为一个频域离散序列。数学上表示为: F(k)=\sum_{n=0}^{N-1}f(n)e^{-j\frac{2\pi }{N}kn}

其中,f(n) 是离散信号序列,F(k) 是频谱序列,N 是信号的长度,k 是频率系数。

傅里叶变换在信号处理、通信、图像处理、声音分析等领域广泛应用。它可以将信号从时域转换为频域,便于进行频率分析、滤波、压缩等操作。同时,逆傅里叶变换可以将频域信号重新转换为时域信号。傅里叶变换的理论基础非常深刻,应用也非常广泛,是现代信号处理和通信领域的基础工具之一。

2、fft  快速傅里叶变换

简介

快速傅里叶变换(Fast Fourier Transform,FFT)是一种快速计算傅里叶变换的算法,它可以在 O(NlogN) 的时间复杂度内计算出 N 个点的离散傅里叶变换。相比传统的直接计算傅里叶变换的方法,FFT具有更高的计算效率,特别适用于对大规模数据进行频域分析。

FFT算法的发展历史悠久,最著名的是Cooley-Tukey算法,它利用了傅里叶变换的对称性和周期性,将一个 N 点DFT(Discrete Fourier Transform)分解为两个 2N/2 点DFT。通过迭代的方式,可以将时间复杂度从O(N2) 降低到 O(NlogN)。

FFT算法在信号处理、图像处理、通信系统等领域得到了广泛的应用,例如在音频处理中进行频谱分析、滤波处理,在通信系统中进行信号调制解调、频谱估计等。由于FFT算法的高效性和稳定性,它在实际工程中经常被使用。

总的来说,快速傅里叶变换是一种高效的计算傅里叶变换的算法,能够快速准确地将信号从时域转换到频域,为信号处理和频谱分析提供了非常重要的工具。

语法

Y = fft(X) 使用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (DFT)。
Y = fft(X,n) 返回 n 点 DFT。
Y = fft(X,n,dim) 返回沿维度 dim 的傅里叶变换。例如,如果 X 是矩阵,则 fft(X,n,2) 返回每行的 n 点傅里叶变换含噪信号

1)原始信号加噪声

代码

Fs = 1000;                          
T = 1/Fs;                   
L = 1500;             
t = (0:L-1)*T;  
%振幅为 0.8 的 DC 偏移量、振幅为 0.7 的 50 Hz 正弦量和振幅为 1 的 120 Hz 正弦量。
%w/2Pi=频率
S = 0.8 + 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%均值为零、方差为 4 的随机噪声扰乱该信号。
X = S + 2*randn(size(t));
plot(1000*t,X)
title("信号加噪声")
xlabel("毫秒")
ylabel("幅度")

视图效果

 2)傅里叶变换显示正频率部分

代码

Y = fft(X);%傅里叶变换
plot(Fs/L*(0:L-1),abs(Y))%复数求模
title("FFT正频率部分")
xlabel("Hz")
ylabel("|fft(X)|")

视图效果

3)傅里叶变换显示全频率部分 

代码

%该图显示五个频率峰值,包括 DC 偏移量在 0 Hz 处的峰值。
%在此示例中,信号预计在 0 Hz、50 Hz 和 120 Hz 处有三个
%频率峰值。此处,绘图的后半部分是前半部分的镜像,
plot(Fs/L*(-L/2:L/2-1),abs(fftshift(Y)))%fftshift 显示正负频率
title("FFT全频率部分")
xlabel("Hz")
ylabel("|fft(X)|")

视图效果

4) 精确检索振幅

代码

%采用原始的、未破坏信号的傅里叶变换并检索精确振幅在 0.8、0.7 和 1.0 处。
f = Fs/L*(0:(L/2));
Y = fft(S);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

plot(f,P1) 
title("检索结果")
xlabel("Hz")
ylabel("|P1(f)|")

视图效果

3、 高斯脉冲

简介

高斯脉冲是一种具有特定频谱特性的信号,它在信号处理和通信工程中有着广泛的应用。高斯脉冲的时间域表达式为: 2g(t)=Ae−αt2 其中,A 是脉冲的幅度,α 是一个控制脉冲宽度的正数。

高斯脉冲的频谱特性主要体现在其傅里叶变换后的频谱形状。高斯脉冲的傅里叶变换可以通过傅里叶变换的性质和高斯函数的特性来求解。

其频谱可以表示为:\frac{A}{2\sqrt{\pi a}}=e^{-\frac{-(2\pi f )^{2})}{4a}}

具体而言,高斯脉冲的频谱是一个以零频率为中心的钟形曲线,频谱宽度受到参数 α 控制,脉冲在时域中越短,频谱中心频率越高,频谱越窄。

高斯脉冲的特性使得它在传输、通信系统中具有很好的性能。例如,在雷达系统中,高斯脉冲被用作雷达信号的发射脉冲,因为高斯脉冲具有较好的峰值信噪比和抗干扰性能。在通信系统中,高斯脉冲可以用于OFDM(正交频分复用)系统的时域信号设计,减小子载波间的相互干扰。

总的来说,高斯脉冲作为一种特定频谱特性的信号,在信号处理、通信系统等领域发挥着重要作用,具有很好的抗噪声、抗干扰性能,广泛应用于实际工程中。

1)时域脉冲信号

代码

%高斯脉冲
Fs = 44100;         
T = 1/Fs;           
t = -0.5:T:0.5;    
L = length(t);     
X = 1/(0.4*sqrt(2*pi))*(exp(-t.^2/(2*(0.1*1e-3)^2)));
plot(t,X)
title("时域脉冲信号")
xlabel("t")
ylabel("X(t)")
axis([-1e-3 1e-3 0 1.1])

视图效果

2)傅里叶变换

代码

n = 2^nextpow2(L);%2次幂输入长度
Y = fft(X,n);
f = Fs*(0:(n/2))/n;
P = abs(Y/sqrt(n)).^2;
plot(f,P(1:n/2+1)) 
title("高斯脉冲")
xlabel("Hz")
ylabel("|P(f)|")

视图效果

 

 4、余弦波

1)时域效果

代码

%3余弦波
Fs = 1000;                    
T = 1/Fs;                  
L = 1000;                    
t = (0:L-1)*T;
x1 = cos(2*pi*50*t);          
x2 = cos(2*pi*150*t);        
x3 = cos(2*pi*300*t);         
X = [x1; x2; x3];
subplot(3,1,1)
plot(t(1:100),X(1,1:100))
title('50HZ时序')
subplot(3,1,2)
plot(t(1:100),X(2,1:100))
title('150HZ时序')
subplot(3,1,3)
plot(t(1:100),X(3,1:100))
title('300HZ时序')

视图效果

 2)傅里叶变换

代码

dim = 2;%行方向
Y = fft(X,L,dim);
P2 = abs(Y/L);
P1 = P2(:,1:L/2+1);
P1(:,2:end-1) = 2*P1(:,2:end-1);
subplot(3,1,1)
plot(0:(Fs/L):(Fs/2-Fs/L),P1(1,1:L/2))
title('50HZ傅里叶变换')
subplot(3,1,2)
plot(0:(Fs/L):(Fs/2-Fs/L),P1(2,1:L/2))
title('150HZ傅里叶变换')
subplot(3,1,3)
plot(0:(Fs/L):(Fs/2-Fs/L),P1(3,1:L/2))
title('300HZ傅里叶变换')

视图效果 

 5、正弦波相位

1)正弦波傅里叶变换

代码

Fs = 100;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*15*t - pi/4) + cos(2*pi*40*t + pi/2);
y = fft(x);
z = fftshift(y);

ly = length(y);
f = (-ly/2:ly/2-1)/ly*Fs;
stem(f,abs(z))
title("傅里叶双边显示")
xlabel("Frequency (Hz)")
ylabel("|y|")

视图效果

2)相位获取

代码

1tol = 1e-6;
z(abs(z) < tol) = 0;
theta = angle(z);

stem(f,theta/pi)
title("相位频率图")
xlabel("Hz)")
ylabel("频率")

视图效果

 

6、总结 

傅里叶变换是一种将信号从时域转换到频域的重要工具,它在信号处理、图像处理、通信系统等领域有着广泛的应用。以下是傅里叶变换的一些总结性内容:

  1. 时域和频域:在信号处理中,时域是指信号随时间变化的情况,频域是指信号的频率成分。傅里叶变换能够将信号在时域和频域之间进行转换,从而揭示信号的频率分量和振幅。

  2. 离散傅里叶变换(DFT):用于将离散信号转换到频域。DFT能够将一段离散信号表示为一系列复数,分别表示不同频率和振幅的成分。

  3. 傅里叶级数:描述周期信号的频域表示,将周期信号分解为多个不同频率的正弦和余弦波形式。

  4. 傅里叶变换的性质:包括线性性质、频率平移、频率调制、卷积性质等,这些性质在信号处理中有着重要的作用。

  5. 逆变换:傅里叶变换的逆变换能够将频域信号转换回时域信号,恢复原始信号的形式。

  6. 快速傅里叶变换(FFT):FFT是一种计算傅里叶变换的高效算法,能够在 �(�log⁡�)O(NlogN) 的时间复杂度内计算出 �N 个数据点的傅里叶变换,被广泛应用于实际工程中。

  7. 应用领域:傅里叶变换在信号处理、通信系统、图像处理等领域有着广泛的应用,例如数字滤波、频谱分析、信号调制解调等。

总的来说,傅里叶变换是一种非常重要的信号处理工具,通过时域和频域之间的转换,能够揭示信号的频率特性,方便信号处理和分析。在实际应用中,合理使用傅里叶变换可以帮助工程师更好地理解和处理信号。

相关推荐

  1. FFT快速变换音频分析

    2024-06-19 08:06:02       43 阅读
  2. 变换全息图 Matlab

    2024-06-19 08:06:02       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 08:06:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 08:06:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 08:06:02       82 阅读
  4. Python语言-面向对象

    2024-06-19 08:06:02       91 阅读

热门阅读

  1. 【100个C++面试题和解答】

    2024-06-19 08:06:02       36 阅读
  2. 数据结构——顺序表的实现

    2024-06-19 08:06:02       31 阅读
  3. 「前端+鸿蒙」鸿蒙应用开发-布局

    2024-06-19 08:06:02       35 阅读
  4. 拥抱未来:探索改变游戏规则的新存储技术

    2024-06-19 08:06:02       37 阅读
  5. LLM大语言模型(GPT)的分布式预训练与微调及部署

    2024-06-19 08:06:02       36 阅读
  6. 创建最基本的web服务器-http模块

    2024-06-19 08:06:02       34 阅读
  7. cpp混淆详解

    2024-06-19 08:06:02       37 阅读
  8. ListMapToExcel

    2024-06-19 08:06:02       31 阅读
  9. 相机的标定

    2024-06-19 08:06:02       26 阅读
  10. ArcGIS Pro SDK (四)框架 1

    2024-06-19 08:06:02       36 阅读