MATLAB FFT算法的应用

article/2025/10/18 22:26:03

目录

一,实验原理

二,实验内容

1、实现2N点实数序列

2、已知某序列​编辑在单位圆上的N=64等分样点的Z变换为:

3、周期为N的余弦序列:

     1,求该序列N点FFT

     2,求该序列2N点FFT

     3,求该序列N/2点FFT

4、用FFT实现有限长序列的线性卷积,给定两个序列x=[2,1,1,2],h=[1,-1,-1,1]

1,直接计算两个序列的线性卷积

2,用FFT实现序列的线性卷积


一,实验原理

N点序列的DFT和IDFT变换定义式如下:

利用旋转因子具有周期性,可以得到快速算法(FFT)。

在MATLAB中,可以用函数计算N点序列的DFT正、反变换。

二,实验内容

1、实现2N点实数序列

N=64。用一个64点的复数FFT程序,一次算出,并绘出 的图形。

N=64; 
n=0: N-1; 
n1=2*n;%n为偶数时
n2=2*n+1;%n为奇数时
n3=0:2*N-1;%信号的长度%拆分时间域信号为奇部和偶部(2n/2n+1)
xn1=cos (2*pi*7*n1/N)+1/2*cos (2*pi*19*n1/N);  %偶部
xn2=cos (2*pi*7*n2/N)+1/2*cos (2*pi*19*n2/N); %奇部
x1=fft(xn1);   %对偶部进行FFT变换
x2=fft(xn2);   %对奇部进行FFT变换
Xk1=x1+exp(-1j*pi*n/N).*x2;%
Xk2=x1-exp(-1j*pi*n/N).*x2;%
Xk1=[Xk1 zeros(1,64)];%
Xk2=[ zeros(1,64) Xk2];%
Xk=Xk1+Xk2;%将两部分拼起来
Xk=abs(Xk); %求取信号振幅
stem(n3,Xk);   %绘出随频率变化的振幅
xlabel('频率');
ylabel('振幅');
title('N=64时的|X(k)|');%绘图标题
grid on;%显示网格线

  


2、已知某序列在单位圆上的N=64等分样点的Z变换为:

用N点IFFT程序计算

k=0:63;
N=64;
X=1./(1-0.8*exp(-j*2*pi*k/N));
xn=ifft(X,N);
subplot(2,1,1);%分屏
stem(k,real(xn));
xlabel('n');
ylabel('re');
subplot(2,1,2);%分屏
stem(k,imag(xn),'r');
xlabel('n');
ylabel('im');

 


3、周期为N的余弦序列:

X[n]=cos(2πn/N),N=20

     1,求该序列N点FFT

N=20; 
n=0: N-1; 
xn=cos(2*pi*n/N);
x1=fft(xn);   
Xk=abs(x1); %求取信号振幅
stem(n,Xk);  
xlabel('频率');
ylabel('振幅');
title('N点时的|X(k)|');%绘图标题
grid on;%显示网格线

     2,求该序列2N点FFT

N=20; 
n=0: 2*N-1; 
xn=cos(2*pi*n/N);
x1=fft(xn);   
Xk=abs(x1); %求取信号振幅
stem(n,Xk);   %绘出随频率变化的振幅
xlabel('频率');
ylabel('振幅');
title('2N点时的|X(k)|');%绘图标题
grid on;%显示网格线

     3,求该序列N/2点FFT

N=20; 
n=0: N/2-1; 
xn=cos(2*pi*n/N);
x1=fft(xn);   
Xk=abs(x1); %求取信号振幅
stem(n,Xk);   %绘出随频率变化的振幅
xlabel('频率');
ylabel('振幅');
title('N/2点时的|X(k)|');%绘图标题
grid on;%显示网格线


4、用FFT实现有限长序列的线性卷积,给定两个序列x=[2,1,1,2],h=[1,-1,-1,1]

1,直接计算两个序列的线性卷积

h = [2,1,1,2]; 
x = [1,-1,-1,1]; 
y = conv(h,x);%conv函数执行两个向量的卷积
n = 0:6;
stem(n,y);%绘制散点图
xlabel('Time index n'); 
ylabel('Amplitude');
title('Output Obtained by Convolution'); 
grid;%显示坐标的网格线

2,用FFT实现序列的线性卷积

在使用FFT进行线性卷积时,需要补零,具体原理请参考:

MATLAB实现 利用FFT和IFFT计算线性卷积_timerring的博客-CSDN博客_fft实现线性卷积

h = [2,1,1,2,0,0,0];
x = [1,-1,-1,1,0,0,0];
n=0:6;
Hn=fft(h);
Xn=fft(x);
Yn=Hn.*Xn;
y=ifft(Yn);
stem(n,y);%绘制散点图
xlabel('Time index n'); 
ylabel('Amplitude');
title('Output Obtained by Convolution'); 	


http://chatgpt.dhexx.cn/article/hEiA9dRr.shtml

相关文章

FFT算法实现

关于FFT算法的原理这里就不多说了,具体参考有关书籍。 DFT与FFT运算量的比较 N点DFT的运算量 复数乘法 复数加法 一个X(k) N N-1 N个X(k)(N点DFT) N*N N(N-1) N点FFT的运算量 复数乘法 复数加法 N个X(k) (N/2)*log2N N*log2N 如…

使用python手写FFT算法

FFT(Fast Fourier Transform) 是 DFT(Discrete Fourier Transform)的快读实现,它在机理上没有改变DFT的算法,只是在实现上采用的巧妙的实现。 使 O ( N 2 ) O(N^2) O(N2)的实现变成了 O ( N l o g 2 N ) O(Nlog_2N) O(Nlog2​N)的实现,优化算…

C语言实现FFT算法

C语言实现FFT算法 fft1d.c和fft1d.h见https://download.csdn.net/download/weixin_43216875/12009644 1 fft1d.h #ifndef FFT1D_H #define FFT1D_H#include "math.h"#define PI 3.1415926535897932384626433832795028841971typedef struct complex //复数类型 {flo…

Matlab实现DITFFT算法

这段时间刚好在学习数字信号处理的快速傅立叶变换,也刚好应着老师布置的作业用matlab实现N点的FFT。 方法也是采用教科书上的DITFFT,当然关键也就是分治的思想,分成奇偶序列,再观察旋转因子和步长的不同来编写算法 该算法首先的部…

FFT算法的C语言实现

FFT算法的C语言实现 :数字信号处理 需要注意的几个点 #mermaid-svg-Q0Cv61uzu3GVxhM0 .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Q0Cv61uzu3GVxhM0 .label text{fill:#333}#mer…

优雅的FFT算法

简 介: 利用FFT算法实现快速傅里叶变换, 在理论、工程中具有非常广泛的应用。 除了能够在合适的计算平台完成FFT算法,同时还需要注意到它在频谱分析中可能带来的频率混叠以及频率泄露等问题。 关键词: FFT,算法实现 #m…

STM32 FFT算法实现

DSP 库运行环境搭建 在 MDK 里面搭建 STM32F4 的 DSP 运行环境(使用.lib 方式)是很简单的,分为 3 个步骤: 1, 添加文件。 首先,我们在例程工程目录下新建:DSP_LIB 文件夹,存放我们将要添加的文件&#xff…

FFT算法解析

问题描述 两个n次多项式相乘,其时间复杂度为 O(n2) ,通过FFT来减小其问题的复杂度。 分析过程 FFT的基本思路是:我知道一个多项式表达式可以根据其表达式算出结果,同理我们也可以根据其结果算出表达式。对于A,B两个n次多项式,一共所有又2n+1个参数需要求解,我们至少需要…

FFT算法再学以及终于理解

前言 人生如逆旅,我亦是行人。 一、FFT FFT(Fast Fourier Transformation),中文名快速傅里叶变换,用来 加速多项式乘法 ,就是用来降低算法的时间复杂度的,将时间复杂度由原来的 O(n^2) 变为了O…

十分简明易懂的FFT(快速傅里叶变换)

FFT前言 快速傅里叶变换 (fast Fourier transform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少&…

第四章快速傅里叶变换FFT

一、基2FFT算法 1.直接计算DFT的特点 对于N点DFT的乘法和加法运算次数均为N^2(运算量较大)减少运算量的基本途径:将N点DFT分解成多个较短的DFT旋转因子具有 周期性: 对称性:或又或者 2.时域抽取法基2FFT基本原理 分类:基2FFT分…

数学专题小结:FFT算法

快速傅里叶变换(FFT,Fast Fourier Transform)是信号处理的常用手段,可以把时域信号变成频域信号,时域的卷积运算对应于频域就成了简单的乘法运算。由于两个多项式的乘积,其系数的运算实际上也是一种卷积运算,因此可以用FFT来计算多项式的乘法。网上关于FFT算法的讲解大多…

转:fft算法(快速傅里叶变换算法)

FFT (Fast Fourier Transform) 是一种快速傅里叶变换算法。它是用来将一个信号从时域转换到频域的算法。这个算法通过分治策略,将一个长度为 N 的复数序列分解成 N/2 个长度为 2 的复数序列,然后对这些小的序列分别进行 FFT 计算。 最简单的 FFT 算法是暴…

快速傅里叶变换(FFT)算法学习

前言 人生如逆旅,我亦是行人。 一、介绍 算法的世界多么广大,我们可以将算法大致分为两类: 第一类是较为有用的算法:比如一些经典的图算法,像 DFS 和 BFS(深度 / 广度优先算法),这些…

FFT算法讲解——麻麻我终于会FFT了!

FFT——快速傅里叶变换 这块不写东西空荡荡的,我决定还是把FFT的定义给贴上吧 FFT(Fast Fourier Transformation)是离散傅氏变换(DFT)的快速算法。即为快速傅氏变换。它是根据离散傅氏变换的奇、偶、虚、实等特性&…

怎么计算网站流量?

如何计算网站的流量呢?在这华仔给大家分享一个如何计算流量的算法: 举个栗子:1G1024M,10G就是101024M10240M. 一个1M的文件被下载1000次的流量约为1G;被下载10000次的流量约为10G. 假如你每月的网站流量为10G,那10G的流…

CDN流量是什么,怎么计算?

CDN流量通俗来讲就是使用CDN加速时,网络加速会产生一个数据使用量,到达某一个时段,统计出这个时段使用的量,也就是CDN流量,和网站流量的使用很像。 随着互联网的发展,用户在使用网络时对网站的浏览速度和…

流量计算器

为所做的工作处于初始开发的阶段,所以数据一直在变化,导致1s的流量大小一直也在变化。每次都需要手动根据新的参数进行计算,真的好烦。 所以呢,作为一个程序员,能让程序做的事情,自己就不要动手了呀&#x…

Flink1.14相关-3.数据流量计算

1. 前言 使用环境 Flink1.14.6Centos7.9Java8 Flink1.14.6安装部署测试参考:参考链接 2 .数据采集 2.1 信号监听 需要监听文件夹下的新文件产生,并且数据库中的值未更新时才发送消息通知后续模块开始采集数据。【后面需要重新搭建监听部分和判断部分…

适应多场景的客流量统计-人流量统计算法

在商场、展厅、景区等受人流量影响较大的场所,流量统计算法可以快速获取流量数据和动态趋势,辅助评估店铺和部分活动的效果,帮助商业决策。另外,在地铁站、火车站、机场等公共场所。实时检测人数可以及时预警高密度人群&#xff0…