快速傅里叶变化FFT的应用

  • 前言
  • 快速傅里叶变换
  • 快速卷积计算
  • 快速相关计算
  • 功率谱计算
  • 线性调频Z变换(CZT)
  • 全部程序可点此处下载

前言

傅里叶变换在时频域转换和频域分析上有着重要的作用。但是如果直接用DFT公式进行计算当序列长度N很大时,运算量大,且运算耗时。而快速傅里叶变换(FFT)就可以很好的解决这个问题。本次实验便是利用FFT算法,在快速卷积,快速自相关等理论基础上,使用matlab编写程序实现计算卷积,信号自相关和功率谱,实现CTZ变换。

快速傅里叶变换

N 点的 DFT 可以分解为两个 N/2 点的 DFT,每个 N/2 点的 DFT 又可以分解为两个 N/4 点的 DFT。依此类推,当 N 为 2 的整数次幂时由于每分解一次降低一阶幂次,所以通过 M 次的分解,最后全部成为 N/2 个 2 点 DFT 运算。以上就是按时间抽取的快速傅立叶变换(FFT)算法。当需要进行变换的序列的长度不是 2 的整数次方的时候,为了使用以 2 为基的 FFT,可以用末尾补零的方法,使其长度延长至 2 的整数次方。
在matlab中,fft()函数可以帮助我们方便的使用快速傅里叶变换,ifft()函数可以让我们方便的使用快速傅里叶逆变换。

快速卷积计算

快速卷积就是用快速傅里叶变换的方法来进行卷积。其方法与DFT实现卷积相同,只是将DFT改为FFT。应用时域频域卷积定理,时域卷积等于频域相乘。即两序列卷积等于两序列的FFT相乘后再将结果做IFFT即可得到时域卷积结果。过程图如下图所示。

例1
序列一:x(n)=cos(w n2 ) , 0<=n<=40 , w=0.025pi
序列二:h(n)=
[-0.9754, -0.7820, -0.4142, 0.092, 0.6871, 1.31287, 1.908,
2.4142, 2.7820, 2.9754, 2.9754, 2.7820, 2.4142, 1.908,
1.31287, 0.6871, 0.092, -0.4142, -0.7820, -0.9754]
对这两个序列使用快速傅里叶的方法进行卷积运算。在matlab中编写程序,并使用直接卷积的方法进行验证。
使用freqz函数求频响特性,再使用abs和angle分别求幅频响应和相频响应。
程序

clear;close all;
n=0:1:40;
w=0.025*pi;
x=cos(w*(n.^2));
h=[-0.9754,-0.7820,-0.4142,0.092,0.6871,1.31287,1.908,2.4142,2.7820,2.9754,2.9754,2.7820,2.4142,1.908,1.31287,0.6871,0.092,-0.4142,-0.7820,-0.9754];
N1=length(x);
N2=length(h);
N=N1+N2-1;        %计算卷积序列长度
X=fft(x,N);     %计算两个序列fft
H=fft(h,N);
Y=X.*H;      %频域相乘
y=ifft(Y);
m=0:1:N-1;
subplot(211);
stem(m,y);
title('fft法');
y1=conv(x,h);  %卷积函数验证
subplot(212)
stem(m,y1);
title('直接卷积法');

运行结果如下

快速相关计算

快速相关即使用FFT的方法计算相关函数。实际上应用的是相关定理,计算流程如下图所示。

计算自相关时,两个序列相同,计算出rxx就为自相关序列,Rxx为其功率谱。


序列x(n)=[-0.9754, -0.7820, -0.4142, 0.092, 0.6871, 1.31287, 1.908,
2.4142, 2.7820, 2.9754, 2.9754, 2.7820, 2.4142, 1.908,
1.31287, 0.6871, 0.092, -0.4142, -0.7820, -0.9754]
要求计算 h(n)的自相关函数,并将结果显示出来。
程序如下

clear;close all;
x=[-0.9754,-0.7820,-0.4142,0.092,0.6871,1.31287,1.908,2.4142,2.7820,2.9754,2.9754,2.7820,2.4142,1.908,1.31287,0.6871,0.092,-0.4142,-0.7820,-0.9754];
N=length(x); %fft法
xn=[x,zeros(1,N-1)];  %补零
X=fft(xn);           %正变换
R=X.*conj(X);       %套用公式
r=ifft(R);            %逆变换
r1= circshift(r, N-1); %移位r0=xcorr(x,x);     %自带函数法
n=1-N:N-1;
subplot(211);
plot(n,r1);
subplot(212);
plot(n,r0);

分别使用fft法和使用matlab自带相关函数进行计算,计算结果相同,证明fft方法正确性。运行结果如下

功率谱计算


信号设为:x(t)=cos2πf1t + cos2πf2t + cos2πf3t
f1=42Hz, f2=45Hz, f3=47Hz,采样频率 fs=200Hz,采样点数 N=128。
计算信号的功率谱,将功率谱图显示出来。
计算方法与计算自相关方法类似,但自相关序列的傅里叶变换就是序列的功率谱,因此,计算出Rxx即可。
程序如下

close all;
clear;
%抽样
f1=42;f2=45;f3=47;
N=128;T=1/200;
t=0:T:(N-1)*T;
x=cos(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t);
%计算自相关序列,方法和第二步相同
xn=[x,zeros(1,N-1)];
X=fft(xn);
R=X.*conj(X);%自相关函数频谱即为功率谱
plot(abs(R))

运行结果如下

线性调频Z变换(CZT)

CZT 是 Z 平面上的一段螺线等间隔采样,,可以利用 FFT 计算 CZT。
其计算公式如下。

或使用如下流程图,利用fft计算

信号设为:x(t)=cos2πf1t + cos2πf2t + cos2πf3t
f1=42Hz, f2=45Hz, f3=47Hz
要求
a. 用 FFT 计算信号的频谱,并显示信号的幅频和相频波形,坐标横轴以频率 Hz为单位。
b. 以下列参数计算 CZT:
起始频率:40Hz, 点数:20, 频率间隔:0.5Hz
将 CZT 的幅频、相频图显示在屏幕上,坐标横轴以频率 Hz 为单位。

在matlab中,可以使用函数czt(x,M,w,a)来计算CZT变换。利用如下公式计算出w和a,M为取样点数,带入函数中,即可球的信号的CZT

程序如下

close all;
clear;
%抽样
f1=42;f2=45;f3=47;
N=128;fs=200;Ts=1/fs;t=(0:N-1)*Ts;
x=cos(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t);
X=fft(x);     %快速傅里叶变换
f=(0:N-1)*fs/N;  %确定频率范围
subplot(411);
plot(f,abs(X));
xlabel('频率HZ');
title('fft幅度');
subplot(412);
plot(f,angle(X));
xlabel('频率HZ');
title('fft相位');fs1=0.5;
fl=40;
M=20;
fh=fl+M*fs1;    %确定抽取频率范围
w=exp(-1j*2*pi*(fh-fl)/(fs*M)); %计算参数Wn
a=exp(1j*2*pi*fl/fs);  %计算参数An
xk=czt(x,M,w,a);   %代入计算czt结果m=0:1:M-1;
f0=fs1*m+fl;    %确定频率范围
subplot(413);
plot(f0,abs(xk));
title('czt幅度');
xlabel('频率HZ');
subplot(414);
plot(f0,angle(xk));
title('czt相位');
xlabel('频率HZ');

运行结果如下

全部程序可点此处下载

数字信号处理 实验三 FFT 应用及 CZT (fft在快速卷积,相关,功率谱及CZT应用)相关推荐

  1. 数字信号处理第三次试验:用FFT对信号作频谱分析

    数字信号处理第三次试验:用FFT对信号作频谱分析 前言 一.实验目的 二.实验原理与方法 三.实验环境 四.实验内容及步骤 五.实验结果截图(含分析) 六.思考题 前言 为了帮助同学们完成痛苦的实验课 ...

  2. 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...

    如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...

  3. 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验(MATLAB版) 刘舒帆,费诺,陆辉 西安电子科技大学出版社 9787560620060...

    商品描述: 基本信息 书名:数字信号处理实验(MATLAB版) 原价:31.00元 作者:刘舒帆,费诺,陆辉 著 出版社:西安电子科技大学出版社 出版日期:2013-7-1 ISBN:97875606 ...

  4. matlab 数字信号波形图,数字信号处理第三次实验代码及波形图

    数字信号处理第三次实验 一.实验目的: 1.掌握离散时间系统的DFT 的MATLAB 实现: 2.熟悉DTFT 和DFT 之间的关系. 3.了解信号不同变形的DFT 与原信号DFT 之间的关系 二.实 ...

  5. matlab fft谱分析实验报告,数字信号处理实验报告-FFT算法的MATLAB实现.doc

    数字信号处理实验报告-FFT算法的MATLAB实现.doc 数字信号处理 实验报告实验二FFT算法的MATLAB实现一.实验目的通过本实验的学习,掌握离散傅立叶变换的理论,特别是FFT的基本算法以及其 ...

  6. fir1截止频率计算_数字信号处理 实验五:FIR数字滤波器设计与软件实现

    10.5 实验五:FIR数字滤波器设计与软件实现 10.5.1 实验指导 1.实验目的 (1)掌握用窗函数法设计FIR数字滤波器的原理和方法. (2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和 ...

  7. Matlab验证dtft共轭性质,数字信号处理实验4重点.docx

    深 圳 大 学 实 验 报 告 课程名称: 数字信号处理实验 实验项目名称: 实验4 学院: 信息工程学院 专业: 电子信息工程 指导教师: 陈佳义 报告人: 学号: 班级: 实验时间: 11.12 ...

  8. matlab数字信号处理实验报告,数字信号处理实验报告一 离散信号及其MATLAB实验...

    数字信号处理 离散信号及其MATLAB实验 南昌航空大学实验报告 2012 年 04 月 06 日 课程名称: 数字信号处理 实验名称: 离散信号及其MATLAB实现 班级: 090423班 学号: ...

  9. 理解数字信号处理的三把钥匙

    理解数字信号处理的三把钥匙 在数字信号处理大厦中,有许许多多的小房间,有的门上写着"DFT",有的门上写着"滤波",有的门上写着"卷积",有 ...

最新文章

  1. 2021年春季学期-信号与系统-第七次作业参考答案-第四小题
  2. JVM:查看java内存情况命令
  3. 不吹牛,中国车主已经实现了「停车自由」
  4. CYJian的新春虐题赛
  5. vue实战记录(二)- vue实现购物车功能之创建vue实例
  6. USB Host Device And OTG
  7. IO与NIO –中断,超时和缓冲区
  8. java异常处理机制--常见异常汇总
  9. php db2 页面乱码_DB2代码页设置乱码的处理方法
  10. arduino 读取串口信息hex_进阶教程1:Arduino串口通信与电脑控制LED
  11. Access数据库引擎
  12. MySQL innodb存储引擎的数据存储结构
  13. UE4启动GameActivity
  14. 聚类分析 距离 matlab,matlab聚类分析_matlab
  15. 简单漂亮的流程图模板分享
  16. 【华人学者风采】孙怡舟,加州大学洛杉矶分校
  17. data-toggle=dropdown/data-target/data-dismiss/data-backdrop/data-spy/data-slide/data-source是什么意思?
  18. /hv/hv_go.h:14:27: fatal error: metslib/mets.hh: No such file or director解决办法
  19. vue+element-ui实现表格编辑
  20. 计算机机房的安全知识有哪些,计算机机房消防安全管理制度

热门文章

  1. pdf是什么?pdf文件又该怎么进行编辑?
  2. jdb 调试 java_Java逆向基础之JDB动态调试
  3. 解决word保存后再打开,页眉多出横线的解决方法(非删除横线方法)
  4. 软件服务项目中的商务管理问题
  5. 数据挖掘中的支持度 置信度 期望置信度 提升度
  6. 20个华丽丽的导航设计PSD下载
  7. 一休哥儿童浏览器 v1.6 官网
  8. 学校固定资产管理系统有哪些功能
  9. 面试中的工具问题 看这一篇就够了
  10. Twelfth4: Deploy Git version control system optimize Web server | Cloud computing