数字信号处理 实验三 FFT 应用及 CZT (fft在快速卷积,相关,功率谱及CZT应用)
快速傅里叶变化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应用)相关推荐
- 数字信号处理第三次试验:用FFT对信号作频谱分析
数字信号处理第三次试验:用FFT对信号作频谱分析 前言 一.实验目的 二.实验原理与方法 三.实验环境 四.实验内容及步骤 五.实验结果截图(含分析) 六.思考题 前言 为了帮助同学们完成痛苦的实验课 ...
- 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...
如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...
- 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验(MATLAB版) 刘舒帆,费诺,陆辉 西安电子科技大学出版社 9787560620060...
商品描述: 基本信息 书名:数字信号处理实验(MATLAB版) 原价:31.00元 作者:刘舒帆,费诺,陆辉 著 出版社:西安电子科技大学出版社 出版日期:2013-7-1 ISBN:97875606 ...
- matlab 数字信号波形图,数字信号处理第三次实验代码及波形图
数字信号处理第三次实验 一.实验目的: 1.掌握离散时间系统的DFT 的MATLAB 实现: 2.熟悉DTFT 和DFT 之间的关系. 3.了解信号不同变形的DFT 与原信号DFT 之间的关系 二.实 ...
- matlab fft谱分析实验报告,数字信号处理实验报告-FFT算法的MATLAB实现.doc
数字信号处理实验报告-FFT算法的MATLAB实现.doc 数字信号处理 实验报告实验二FFT算法的MATLAB实现一.实验目的通过本实验的学习,掌握离散傅立叶变换的理论,特别是FFT的基本算法以及其 ...
- fir1截止频率计算_数字信号处理 实验五:FIR数字滤波器设计与软件实现
10.5 实验五:FIR数字滤波器设计与软件实现 10.5.1 实验指导 1.实验目的 (1)掌握用窗函数法设计FIR数字滤波器的原理和方法. (2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和 ...
- Matlab验证dtft共轭性质,数字信号处理实验4重点.docx
深 圳 大 学 实 验 报 告 课程名称: 数字信号处理实验 实验项目名称: 实验4 学院: 信息工程学院 专业: 电子信息工程 指导教师: 陈佳义 报告人: 学号: 班级: 实验时间: 11.12 ...
- matlab数字信号处理实验报告,数字信号处理实验报告一 离散信号及其MATLAB实验...
数字信号处理 离散信号及其MATLAB实验 南昌航空大学实验报告 2012 年 04 月 06 日 课程名称: 数字信号处理 实验名称: 离散信号及其MATLAB实现 班级: 090423班 学号: ...
- 理解数字信号处理的三把钥匙
理解数字信号处理的三把钥匙 在数字信号处理大厦中,有许许多多的小房间,有的门上写着"DFT",有的门上写着"滤波",有的门上写着"卷积",有 ...
最新文章
- 2021年春季学期-信号与系统-第七次作业参考答案-第四小题
- JVM:查看java内存情况命令
- 不吹牛,中国车主已经实现了「停车自由」
- CYJian的新春虐题赛
- vue实战记录(二)- vue实现购物车功能之创建vue实例
- USB Host Device And OTG
- IO与NIO –中断,超时和缓冲区
- java异常处理机制--常见异常汇总
- php db2 页面乱码_DB2代码页设置乱码的处理方法
- arduino 读取串口信息hex_进阶教程1:Arduino串口通信与电脑控制LED
- Access数据库引擎
- MySQL innodb存储引擎的数据存储结构
- UE4启动GameActivity
- 聚类分析 距离 matlab,matlab聚类分析_matlab
- 简单漂亮的流程图模板分享
- 【华人学者风采】孙怡舟,加州大学洛杉矶分校
- data-toggle=dropdown/data-target/data-dismiss/data-backdrop/data-spy/data-slide/data-source是什么意思?
- /hv/hv_go.h:14:27: fatal error: metslib/mets.hh: No such file or director解决办法
- vue+element-ui实现表格编辑
- 计算机机房的安全知识有哪些,计算机机房消防安全管理制度