实验三 用FFT对信号进行频谱分析及MATLAB程序
- 格式:doc
- 大小:265.00 KB
- 文档页数:11
信号的频谱分析及MATLAB实现频谱分析是对信号的频率特性进行研究和分析的方法,可以帮助我们了解信号中不同频率成分的强度和分布情况。
MATLAB是一款功能强大的数学计算和数据处理软件,具有丰富的信号处理工具箱,可以方便地进行频谱分析。
频谱分析的基本原理是将时域信号转换为频域信号,即将信号从时域表示转换为频域表示。
在频域表示中,信号的幅度和相位都可以很直观地观察和分析。
频谱分析的第一步是对信号进行采样和离散化,得到离散时间序列信号。
可以使用MATLAB中的信号处理函数进行采样和离散化的操作。
例如,可以使用"audioread"函数读取音频文件,并使用"fft"函数对信号进行快速傅里叶变换。
接下来,可以使用MATLAB提供的"fftshift"函数对离散频谱进行平移操作,使得频谱的零频率分量位于频谱中心。
然后,可以计算频谱的幅度谱和相位谱,并使用"abs"和"angle"函数提取幅度和相位信息。
除了基本的频谱分析方法外,MATLAB还提供了更高级的频谱分析工具,如功率谱密度估计和滤波器设计等。
使用这些工具,可以更准确地估计信号的频谱特性,并对信号进行滤波和频谱修正等处理。
总结起来,频谱分析是对信号频率特性进行研究的重要方法,MATLAB提供了丰富的工具和函数,便于实现频谱分析的各个步骤。
通过对信号频谱的分析,可以更深入地了解信号的特性和结构,为信号处理和相关研究提供有力支持。
(注:由于所给的字数限制,以上内容只是对频谱分析及MATLAB实现的简要介绍。
实验三用FFT对信号进行频谱分析和MATLAB程序实验三中使用FFT对信号进行频谱分析的目的是通过将时域信号转换为频域信号,来获取信号的频谱信息。
MATLAB提供了方便易用的函数来实现FFT。
首先,我们需要了解FFT的原理。
FFT(快速傅里叶变换)是一种快速计算离散傅里叶变换(DFT)的算法,用于将离散的时间域信号转换为连续的频域信号。
FFT算法的主要思想是将问题划分为多个规模较小的子问题,并利用DFT的对称性质进行递归计算。
FFT算法能够帮助我们高效地进行频谱分析。
下面是一个使用MATLAB进行频谱分析的示例程序:```matlab%生成一个10秒钟的正弦波信号,频率为1Hz,采样率为100Hzfs = 100; % 采样率t = 0:1/fs:10-1/fs; % 时间范围f=1;%正弦波频率x = sin(2*pi*f*t);%进行FFT计算N = length(x); % 信号长度X = fft(x); % FFT计算magX = abs(X)/N; % 幅值谱frequencies = (0:N-1)*(fs/N); % 频率范围%绘制频谱图figure;plot(frequencies, magX);xlabel('频率(Hz)');ylabel('振幅');title('信号频谱');```上述代码生成了一个10秒钟的正弦波信号,频率为1 Hz,采样率为100 Hz。
通过调用MATLAB的fft函数计算信号的FFT,然后计算每个频率分量的幅值谱,并绘制出信号频谱图。
在频谱图中,横轴表示频率,纵轴表示振幅。
该实验需要注意以下几点:1.信号的采样率要与信号中最高频率成一定比例,以避免采样率不足导致的伪频谱。
2.FFT计算结果是一个复数数组,我们一般只关注其幅值谱。
3.频率范围是0到采样率之间的频率。
实验三的报告可以包含以下内容:1.实验目的和背景介绍。
应用FFT实现信号频谱分析一、快速傅里叶变换(FFT)原理快速傅里叶变换是一种将时域信号转换为频域信号的算法,它通过将信号分解为不同频率的正弦波的和,来实现频谱分析。
FFT算法是一种高效的计算DFT(离散傅里叶变换)的方法,它的时间复杂度为O(nlogn),在实际应用中得到广泛使用。
二、FFT算法FFT算法中最基本的思想是将DFT进行分解,将一个长度为N的信号分解成长度为N/2的两个互为逆序的子信号,然后对这两个子信号再进行类似的分解,直到分解成长度为1的信号。
在这一过程中,可以通过频谱折叠的性质,减少计算的复杂度,从而提高计算效率。
三、FFT实现在实际应用中,可以使用Matlab等软件来实现FFT算法。
以Matlab 为例,实现FFT可以分为以下几个步骤:1.读取信号并进行预处理,如去除直流分量、归一化等。
2. 对信号进行FFT变换,可以调用Matlab中的fft函数,得到频域信号。
3.计算频谱,可以通过对频域信号进行幅度谱计算,即取频域信号的模值。
4.可选地,可以对频谱进行平滑处理,以降低噪音干扰。
5.可选地,可以对频谱进行归一化处理,以便于分析和比较不同信号的频谱特性。
四、应用1.音频处理:通过分析音频信号的频谱,可以实现音频特性的提取,如频率、振幅、共振等。
2.图像处理:通过分析图像信号的频谱,可以实现图像特征的提取,如纹理、边缘等。
3.通信系统:通过分析信号的频谱,可以实现信号的调制解调、频谱分配等功能。
4.电力系统:通过分析电力信号的频谱,可以实现电力质量分析、故障检测等。
总结:应用FFT实现信号频谱分析是一种高效的信号处理方法,通过将时域信号转换为频域信号,可以实现对信号频谱特性的提取和分析。
在实际应用中,我们可以利用FFT算法和相应的软件工具,对信号进行频谱分析,以便于进一步的研究和应用。
实验三 用FFT 作谱分析1、实验目的(1)进一步加深DFT 算法原理和基本性质的理解(因为FFT 只是DFT 的一种快速算法,所以FFT 的运算结果必然满足DFT 的性质)(2)熟悉FFT 算法原理及子程序的应用。
(3)掌握用FFT 对连续信号和时域离散信号进行频谱分析的基本方法。
了解可能出现的分析误差和原因,以便在实际中正确应用FFT 。
2、实验原理如果用FFT 对模拟信号进行谱分析,首先要把模拟信号转换成数字信号,转换时要求知道模拟信号的最高截止频率,以便选择满足采样定理的采样频率。
一般选择采样频率是模拟信号中最高频率的3~4倍。
另外要选择对模拟信号的观测时间,如果采样频率和观测时间确定,则采样点数也确定了。
这里观测时间和对模拟信号进行谱分析的分辨率有关,最小的观测时间和分辨率成倒数关系。
要求选择的采样点数和观测时间大于它的最小值。
用FFT 作谱分析时,要求做FFT 的点数服从2的整数幂,这一点在上面选择采样点数时可以考虑满足,即使满足不了,可以通过在序列尾部加0完成。
如果要进行谱分析的模拟信号是周期信号,最好选择观测时间是信号周期的整数倍。
如果不知道信号的周期,要尽量选择观测时间长一些,以减少截断效应的影响。
用FFT 对模拟信号作谱分析是一种近似的谱分析。
首先一般模拟信号(除周期信号外)的频谱是连续频谱,而用FFT 作谱分析得到的是数字谱,因此应该取FFT 的点数多一些,用它的包络作为模拟信号的近似谱。
另外,如果模拟信号不是严格的带限信号,会因为频谱混叠现象引起谱分析的误差,这种情况下可以预先将模拟信号进行预滤,或者尽量将采样频率取高一些。
一般频率混叠发生在折叠频率附近,分析时要注意因频率混叠引起的误差。
最后要注意一般模拟信号是无限长的,分析时要截断,截断的长度和分辨率有关,但也要尽量取长一些,取得太短因截断引起的误差会很大。
举一个极端的例子,一个周期性正弦波,如果所取观察时间太短,例如取小于一个周期,它的波形和正弦波相差太大,肯定误差很大,但如果取得长一些,即使不是周期的整倍数,这种截断效应也会小一些。
实验三利用MATLAB进行系统频域分析系统频域分析是指通过对系统的输入输出信号进行频域分析,从而分析系统的频率响应特性和频率域特征。
利用MATLAB进行系统频域分析可以方便地实现信号的频谱分析、滤波器设计等功能。
下面将介绍如何利用MATLAB进行系统频域分析的基本步骤。
一、信号频谱分析1. 将信号导入MATLAB环境:可以使用`load`函数导入数据文件,或者使用`audioread`函数读取音频文件。
2. 绘制信号的时域波形图:使用`plot`函数绘制信号的时域波形图,以便对信号的整体特征有一个直观的了解。
3. 计算信号的频谱:使用快速傅里叶变换(FFT)算法对信号进行频谱分析。
使用`fft`函数对信号进行频域变换,并使用`abs`函数计算频谱的幅度。
4. 绘制信号的频谱图:使用`plot`函数绘制信号的频谱图,以便对信号的频率特征有一个直观的了解。
二、滤波器设计1.确定滤波器类型和要求:根据系统的要求和信号的特性,确定滤波器的类型(如低通滤波器、高通滤波器、带通滤波器等)和相应的频率响应要求。
2. 设计滤波器:使用MATLAB中的滤波器设计函数(如`fir1`、`butter`、`cheby1`等)来设计滤波器。
这些函数可以根据指定的滤波器类型、阶数和频率响应要求等参数来生成相应的滤波器系数。
3. 应用滤波器:使用`filter`函数将滤波器系数应用到信号上,得到滤波后的信号。
三、系统频率响应分析1. 生成输入信号:根据系统的要求和实际情况,生成相应的输入信号。
可以使用MATLAB中的信号生成函数(如`square`、`sine`、`sawtooth`等)来生成基本的周期信号,或者使用`randn`函数生成高斯白噪声信号。
2.绘制输入信号的频谱图:使用前面提到的信号频谱分析方法,绘制输入信号的频谱图。
3. 输入信号与输出信号的频域分析:使用`fft`函数对输入信号和输出信号进行频谱分析,并使用`abs`函数计算频谱的幅度。
matlab 信号频谱分析实验报告《Matlab 信号频谱分析实验报告》实验目的:通过Matlab软件对信号进行频谱分析,了解信号的频谱特性,并掌握频谱分析的基本方法。
实验原理:信号的频谱分析是指将信号在频域上进行分析,得到信号的频谱特性。
频谱分析可以帮助我们了解信号的频率成分,频率分布情况,以及信号的频谱密度等信息。
在Matlab中,可以使用fft函数对信号进行频谱分析,得到信号的频谱图像。
实验步骤:1. 生成信号:首先在Matlab中生成一个信号,可以是正弦信号、方波信号或者任意复杂的信号。
2. 采样信号:对生成的信号进行采样,得到离散的信号序列。
3. 频谱分析:使用fft函数对采样的信号进行频谱分析,得到信号的频谱特性。
4. 绘制频谱图像:将频谱分析得到的结果绘制成频谱图像,观察信号的频谱分布情况。
实验结果分析:通过频谱分析,我们可以得到信号的频谱图像,从图像中可以清晰地看出信号的频率成分,频率分布情况,以及信号的频谱密度等信息。
通过对信号频谱图像的观察和分析,可以更好地了解信号的频谱特性,为后续的信号处理和分析提供参考。
实验结论:通过本次实验,我们成功使用Matlab对信号进行了频谱分析,得到了信号的频谱特性,并且掌握了频谱分析的基本方法。
频谱分析是信号处理和分析的重要工具,对于理解信号的频率特性和频率分布情况具有重要意义。
希望通过本次实验,能够对信号的频谱分析有更深入的了解,并且能够在实际工程中应用到相关领域。
通过本次实验,我们对Matlab信号频谱分析有了更深入的了解,对信号处理和分析有了更深入的认识,也为我们今后的学习和工作提供了更多的帮助。
希望通过不断地实践和学习,能够更加深入地掌握信号频谱分析的相关知识,为实际工程应用提供更多的帮助。
实验三用FFT 对信号进行频谱分析一 实验目地1 能够熟练掌握快速离散傅立叶变换地原理及应用FFT 进行频谱分析地基本方法; 2了解用FFT 进行频谱分析可能出现地分析误差及其原因;二 实验原理1.用DFT 对非周期序列进行谱分析单位圆上地Z 变换就是序列地傅里叶变换,即()()j j z e X e X z ωω== (3-1)()j X e ω是ω地连续周期函数.对序列()x n 进行N 点DFT 得到()X k ,则()X k 是在区间[]0,2π上对()j X e ω地N 点等间隔采样,频谱分辨率就是采样间隔2Nπ.因此序列地傅里叶变换可利用DFT (即FFT )来计算.用FFT 对序列进行谱分析地误差主要来自于用FFT 作频谱分析时,得到地是离散谱,而非周期序列地频谱是连续谱,只有当N 较大时,离散谱地包络才能逼近连续谱,因此N 要适当选择大一些.2.用DFT 对周期序列进行谱分析已知周期为N 地离散序列)(n x ,它地离散傅里叶级数DFS 分别由式(3-2)和(3-3) 给出:DFS : ∑-=-=12)(1N n kn N j k e n x N a π , n =0,1,2,…,N -1 (3-2) IDFS : ∑-==102)(N k kn N j ke a n x π , n =0,1,2,…,N -1 (3-3) 对于长度为N 地有限长序列x (n )地DFT 对表达式分别由式(3-4)和(3-5)给出: DFT :∑-=-=102)()(N n kn N j e n x k X π , n =0,1,2,…,N -1 (3-4)IDFT : ∑-==102)(1)(N k kn N j e k X N n x π,n =0,1,2,…,N -1 (3-5) FFT 为离散傅里叶变换DFT 地快速算法,对于周期为N 地离散序列x (n )地频谱分析便可由式(3-6)和(3-7)给出:DTFS : 1*(())k a fft x n N= (3-6)IDTFS : ()*()k x n N i f f t a = (3-7)周期信号地频谱是离散谱,只有用整数倍周期地长度作FFT ,得到地离散谱才能代表周期信号地频谱.3.用DFT 对模拟周期信号进行谱分析对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号.对于模拟周期信号,也应该选取整数倍周期地长度,经采样后形成周期序列,按照周期序列地谱分析进行.如果不知道信号地周期,可以尽量选择信号地观察时间长一些.三 实验内容1.对以下序列进行谱分析:14()()x n R n =2103()84700n n x n nn thers +≤≤⎧⎪=-≤≤⎨⎪⎩3403()34700n n x n n n thers-≤≤⎧⎪=-≤≤⎨⎪⎩ 选择FFT 地变换区间N 为8和16两种情况进行频谱分析.分别打印其幅频特性曲线,并进行对比、分析和讨论.2.对以下周期序列进行谱分析:4()cos()4x n n π= 5()cos()cos()48x n n n ππ=+ 选择FFT 地变换区间N 为8和16两种情况进行频谱分析.分别打印其幅频特性曲线,并进行对比、分析和讨论.3.对模拟周期信号进行谱分析: 6()cos(8)cos(16)cos(20)x t t t t πππ=++选择采样频率64s F Hz ,对变换区间N 分别取16、32、64三种情况进行谱分析.分别打印其幅频特性曲线,并进行对比、分析和讨论.四 思考题1. 对于周期序列,如果周期不知道,如何用FFT 进行谱分析?2. 如何选择FFT 地变换区间?(包括非周期信号和周期信号)3. 当N=8时,2()x n 和3()x n 地幅频特性会相同吗?为什么?N=16呢?五 实验报告及要求1. 完成各个实验任务和要求,附上程序清单和有关曲线.2. 简要回答思考题.程序代码:%用FFT 对信号作频谱分析clear all;close all;%实验(1)x1n=[ones(1,4)]; %产生序列向量R4(n)M=8;xa=1:(M/2);xb=(M/2):-1:1;x2n=[xa,xb]; %产生长度为8地三角波序列x2(n)、x3(n)x3n=[xb,xa];X1k8=fft(x1n,8); %计算x1n地8点DFTX1k16=fft(x1n,16); %计算x1n地16点DFTX2k8=fft(x2n,8); %计算x2n地8点DFTX2k16=fft(x2n,16); %计算x2n地16点DFTX3k8=fft(x3n,8); %计算x3n地8点DFTX3k16=fft(x3n,16); %计算x3n地16点DFT%幅频特性曲线N=8;wk=2/N*(0:N-1);subplot(3,2,1);stem(wk,abs(X1k8),'.'); %绘制8点DFT地幅频特性图title('(1a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,3);stem(wk,abs(X2k8),'.');title('(2a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,5);stem(wk,abs(X3k8),'.');title('(3a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');N=16;wk=2/N*(0:N-1);subplot(3,2,2);stem(wk,abs(X1k16),'.'); %绘制16点DFT地幅频特性图title('(1b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,4);stem(wk,abs(X2k16),'.');title('(2b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,6);stem(wk,abs(X3k16),'.');title('(3b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');%实验2对周期序列作频谱分析clear all;close all;N=8;n=0:N-1; %FFT地变换区间N=8x4n=cos(pi*n/4);x5n=cos(pi*n/4)+cos(pi*n/8);X4k8=fft(x4n); %计算x4n地8点DFTX5k8=fft(x5n); %计算x5n地8点DFTN=16;n=0:N-1; %FFT地变换区间N=16x4n=cos(pi*n/4);x5n=cos(pi*n/4)+cos(pi*n/8);X4k16=fft(x4n); %计算x4n地16点DFTX5k16=fft(x5n); %计算x5n地16点DFTN=8;w1k=2/N*(0:N-1);subplot(2,2,1);stem(w1k,abs(X4k8),'.'); %绘制8点DFT地幅频特性图title('(4a) 8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X4k8))]);subplot(2,2,3);stem(w1k,abs(X5k8),'.'); %绘制8点DFT地幅频特性图title('(5a)8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X5k8))]);N=16;w2k=2/N*(0:N-1);subplot(2,2,2);stem(w2k,abs(X4k16),'.'); %绘制16点DFT地幅频特性图title('(4b) 16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X4k16))]);subplot(2,2,4);stem(w2k,abs(X5k16),'.'); %绘制16点DFT地幅频特性图title('(5b)16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X5k16))]);%实验3对模拟周期信号作谱分析(归一化)Fs=64;T=1/Fs;N=16;n=0:N-1; %FFT地变换区间N=16x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)16点采样X6k16=fft(x6nT); %计算x6nT地16点DFTTp=N*T;F=1/Tp; %频率分辨率Fk=0:N-1;fk=2*k/N; %产生16点DFT对应地采样点频率(以零频率为中心)subplot(3,1,1);stem(fk,abs(X6k16),'.'); %绘制16点DFT地幅频特性图title('(6a) 16点DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');N=32;n=0:N-1; %FFT地变换区间N=32x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)32点采样X6k32=fft(x6nT); %计算x6nT地32点DFTTp=N*T;F=1/Tp; %频率分辨率Fk=0:N-1;fk=2*k/N; %产生32点DFT对应地采样点频率(以零频率为中心)subplot(3,1,2);stem(fk,abs(X6k32),'.');%绘制32点DFT地幅频特性图title('(6b) 32点DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');N=64;n=0:N-1; %FFT地变换区间N=64x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)64点采样X6k64=fft(x6nT); %计算x6nT地64点DFTTp=N*T;F=1/Tp; %频率分辨率Fk=0:N-1;fk=2*k/N; %产生64点DFT对应地采样点频率(以零频率为中心)subplot(3,1,3);stem(fk,abs(X6k64),'.'); %绘制64点DFT地幅频特性图title('(6c) 64点DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');五、思考题及实验体会4.思考题(1)对于周期序列,如果周期不知道,如何用FFT进行谱分析?(2)如何选择FFT地变换区间?(包括非周期信号和周期信号)(3)当N=8时,)(2n x 和)(3n x 地幅频特性会相同吗?为什么?N=16 呢?答:(1)、如果)(n x 地周期预先不知道,可截取M 点进行DFT ,即)]([)()()()(n x DFT n X n R n x n x M M M M == 0≤k ≤M-1再将截取长度扩大1倍,截取)]([)()()(2222n x DFT n X n R n x M M M M == 0≤k ≤2M-1比较)(k x M 和 )(2k X M ,如果两者地主谱差别满足分析误差要求,则以)(k x M 或 )(2k X M 近似表示)(n x 地频谱,否则,继续将截取长度加倍,直至前后两次分析所得主谱频率差别满足误差要求.设最后截取长度为,iM 则)(0k X iM 表示0)]/(2[k iM πω=点地谱线强度.(2)频谱分辨率直接D 和FFT 地变换区间N 有关,因为FFT 能够实现地频率分辨率是N /2π,因此要求D N ≤/2π.可以根据此式选择FFT 地变换区间N.(3)当N=8时,)(2n x 和)(3n x 地幅频特性会相同.当N=16时,)(2n x 和)(3n x 地幅频特性会不相同.通过实验,我知道了用FFT 对信号作频谱分析是学习数字信号处理地重要内容.经常需要进行谱分析地信号是模拟信号和时域离散信号.对信号进行谱分析地重要问题是频谱分辨率D 和分析误差.频谱分辨率直接和FFT 地变换区间N 有关,因为FFT 能够实现地频率分辨率是2л/N ≤D.可以根据此式选择FFT 地变换区间N.误差主要来自于用FFT 作频谱分析时,得到地是离散谱,而信号(周期信号除外)是连续谱,只有当N 较大时,离散谱地包络才能逼近于连续谱,因此N 要适当选择大一些.周期信号地频谱是离散谱,只有用整数倍周期地长度作FFT ,得到地离散谱才能代表周期信号地频谱.如果不知道信号周期,可以尽量选择信号地观察时间长一些.对模拟信号进行频谱分析时,首先要按照采样定理将其变成时域离散信号.如果是模拟周期信号,也应该选取整数倍周期地长度,经过采样后形成周期序列,按照周期序列地普分析进行.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.IAg9q。
∑-=--==101,....,0,)(1)(N k nk N N n W k X N n x (3.2) 离散傅立叶反变换与正变换的区别在于N W 变为1-N W ,并多了一个N 1的运算。
因为N W 和1-N W 对于推导按时间抽取的快速傅立叶变换算法并无实质性区别,因此可将FFT 和快速傅立叶反变换(IFFT )算法合并在同一个程序中。
2.利用FFT 进行频谱分析若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT 运算求得)(k X ,)(k X 就代表了序列在[]π2,0之间的频谱值。
幅度谱 )()()(22k X k X k X I R +=相位谱 )()(arctan )(k X k X k R I =ϕ 若信号是模拟信号,用FFT 进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可按照前面的方法用FFT 来对连续信号进行谱分析。
按采样定理,采样频率s f 应大于2倍信号的最高频率,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
用FFT 对模拟信号进行谱分析的方框图如下所示。
3.在运用DFT 进行频谱分析的过程中可能产生三种误差:(1)混叠序列的频谱是被采样信号频谱的周期延拓,当采样速率不满足Nyquist 定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。
避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解。
在一般情况下,为了保证不出现频谱混叠,在采样前,先进行抗混叠滤波。
(2)泄漏实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT 来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。
抗混叠低通滤波器 采样T=1/f s N 点FFT泄漏不能与混叠完全分开,因为泄漏导致频谱的扩展,从而造成混叠。
利用FFT进行信号频谱分析及MATLAB 实现作者:汪依帆王敏李海龙来源:《数码设计》2019年第07期摘要:用FFT对信号作频谱分析是学习数字信号处理的重要内容,频谱分析的主要目的是通过分析信号的频谱组成,实现对信号特性的分析,以便后续进行处理。
关键词:FFT;频谱分析;信号特性中图分类号: ;TN911.6; ;文献标识码: A ;文章编号: 1672-9129(2019)07-0015-01Abstract : Spectrum analysis of signals by FFT is an important part of learning digital signal processing. The main purpose of spectrum analysis is to analyze the signal composition by analyzing the spectrum composition of the signal for subsequent processing.Keywords: ;FFT; spectrum analysis; signal characteristics引言:FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。
有些信号在时域上很难看出特征,但是如果变换到频域,特征就显而易见。
时域信号一般分为连续信号和离散信号,但只有离散信号能够在计算机中进行处理,即对于实际系统输入的连续模拟信号,首先要进行模/数转换将其转变为数字信号,之后才能进行处理分析。
对于已经采集到计算机中的离散数字信号,有多种方法可以实现时域信号的频谱分析,这里主要介绍用快速傅里叶变换(FFT)实现原时域信号的频谱分析。
其中要考虑的问题包括对于采样频率的设定、采样长度的设定以及FFT的变换特性。
采样定理要遵循Nyquist采样定理设定的基本原则,连接连续和离散的桥梁,即具体设定时,采样频率要能够大于或等于信号中最高频率分量值的2倍,同时,否则将会出现频谱混叠现象,一般在工程上选择采样频率为信号最高频率的5~10倍。
Matlab编程实现FFT变换及频谱分析的程序代码内容1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图源程序%*************************************************************** **********%% FFT实践及频谱分析%%*************************************************************** **********%%*************************************************************** **********%%***************1.正弦波****************%fs=100;%设定采样频率N=128;n=0:N-1;t=n/fs;f0=10;%设定正弦信号频率%生成正弦信号x=sin(2*pi*f0*t);figure(1);subplot(231);plot(t,x);%作正弦信号的时域波形xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;%进行FFT变换并做频谱图y=fft(x,N);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(1);subplot(232);plot(f,mag);%做频谱图axis([0,100,0,80]);xlabel('频率(Hz)');ylabel('幅值');title('正弦信号y=2*pi*10t幅频谱图N=128');grid;%求均方根谱sq=abs(y);figure(1);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('正弦信号y=2*pi*10t均方根谱');grid;%求功率谱power=sq.^2;figure(1);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('正弦信号y=2*pi*10t功率谱');grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('正弦信号y=2*pi*10t对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的正弦信号波形');grid;%****************2.矩形波****************% fs=10;%设定采样频率t=-5:0.1:5;x=rectpuls(t,2);x=x(1:99);figure(2);subplot(231);plot(t(1:99),x);%作矩形波的时域波形xlabel('t');ylabel('y');title('矩形波时域波形');grid;%进行FFT变换并做频谱图y=fft(x);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(2);subplot(232);plot(f,mag);%做频谱图xlabel('频率(Hz)');ylabel('幅值');title('矩形波幅频谱图');grid;%求均方根谱sq=abs(y);figure(2);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('矩形波均方根谱');grid;%求功率谱power=sq.^2;figure(2);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('矩形波功率谱');grid;%求对数谱ln=log(sq);figure(2);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('矩形波对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(2);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的矩形波波形');grid;%****************3.白噪声****************% fs=10;%设定采样频率t=-5:0.1:5;x=zeros(1,100);x(50)=100000;figure(3);subplot(231);plot(t(1:100),x);%作白噪声的时域波形xlabel('t');ylabel('y');title('白噪声时域波形');grid;%进行FFT变换并做频谱图y=fft(x);%进行fft变换mag=abs(y);%求幅值f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换figure(3);subplot(232);plot(f,mag);%做频谱图xlabel('频率(Hz)');ylabel('幅值');title('白噪声幅频谱图');grid;%求均方根谱sq=abs(y);figure(3);subplot(233);plot(f,sq);xlabel('频率(Hz)');ylabel('均方根谱');title('白噪声均方根谱');grid;%求功率谱power=sq.^2;figure(3);subplot(234);plot(f,power);xlabel('频率(Hz)');ylabel('功率谱');title('白噪声功率谱');grid;%求对数谱ln=log(sq);figure(3);subplot(235);plot(f,ln);xlabel('频率(Hz)');ylabel('对数谱');title('白噪声对数谱');grid;%用IFFT恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(3);subplot(236);plot(ti,magx);xlabel('t');ylabel('y');title('通过IFFT转换的白噪声波形'); grid;。
实验三 用FFT 对信号进行频谱分析一 实验目的1 能够熟练掌握快速离散傅立叶变换的原理及应用FFT 进行频谱分析的基本方法; 2了解用FFT 进行频谱分析可能出现的分析误差及其原因;二 实验原理1.用DFT 对非周期序列进行谱分析单位圆上的Z 变换就是序列的傅里叶变换,即()()j j z e X e X z ωω== (3-1)()j X e ω是ω的连续周期函数。
对序列()x n 进行N 点DFT 得到()X k ,则()X k 是在区间[]0,2π上对()j X e ω的N 点等间隔采样,频谱分辨率就是采样间隔2Nπ。
因此序列的傅里叶变换可利用DFT (即FFT )来计算。
用FFT 对序列进行谱分析的误差主要来自于用FFT 作频谱分析时,得到的是离散谱,而非周期序列的频谱是连续谱,只有当N 较大时,离散谱的包络才能逼近连续谱,因此N 要适当选择大一些。
2.用DFT 对周期序列进行谱分析已知周期为N 的离散序列)(n x ,它的离散傅里叶级数DFS 分别由式(3-2)和(3-3) 给出:DFS : ∑-=-=12)(1N n kn Nj k e n x N a π, n =0,1,2,…,N -1 (3-2) IDFS : ∑-==102)(N k kn Njk ea n x π, n =0,1,2,…,N -1 (3-3)对于长度为N 的有限长序列x (n )的DFT 对表达式分别由式(3-4)和(3-5)给出: DFT : ∑-=-=102)()(N n kn Njen x k X π , n =0,1,2,…,N -1 (3-4)IDFT : ∑-==12)(1)(N k kn N j e k X N n x π, n =0,1,2,…,N -1 (3-5) FFT 为离散傅里叶变换DFT 的快速算法,对于周期为N 的离散序列x (n )的频谱分析便可由式(3-6)和(3-7)给出:DTFS : 1*(())k a fft x n N=(3-6) IDTFS : ()*()k x n N ifft a = (3-7) 周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT ,得到的离散谱才能代表周期信号的频谱。
3. 用DFT 对模拟周期信号进行谱分析对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。
对于模拟周期信号,也应该选取整数倍周期的长度,经采样后形成周期序列,按照周期序列的谱分析进行。
如果不知道信号的周期,可以尽量选择信号的观察时间长一些。
三 实验内容1. 对以下序列进行谱分析:14()()x n R n =2103()84700n n x n nn thers +≤≤⎧⎪=-≤≤⎨⎪⎩ 3403()34700n n x n n n thers-≤≤⎧⎪=-≤≤⎨⎪⎩选择FFT 的变换区间N 为8和16两种情况进行频谱分析。
分别打印其幅频特性曲线,并进行对比、分析和讨论。
2. 对以下周期序列进行谱分析:4()cos()4x n n π=5()cos()cos()48x n n n ππ=+选择FFT 的变换区间N 为8和16两种情况进行频谱分析。
分别打印其幅频特性曲线,并进行对比、分析和讨论。
3. 对模拟周期信号进行谱分析:6()cos(8)cos(16)cos(20)x t t t t πππ=++选择采样频率64s F Hz =,对变换区间N 分别取16、32、64三种情况进行谱分析。
分别打印其幅频特性曲线,并进行对比、分析和讨论。
四 思考题1. 对于周期序列,如果周期不知道,如何用FFT 进行谱分析?2. 如何选择FFT 的变换区间?(包括非周期信号和周期信号)3. 当N=8时,2()x n 和3()x n 的幅频特性会相同吗?为什么?N=16呢?五 实验报告及要求1. 完成各个实验任务和要求,附上程序清单和有关曲线。
2. 简要回答思考题。
程序代码:%用FFT对信号作频谱分析clear all;close all;%实验(1)x1n=[ones(1,4)]; %产生序列向量R4(n)M=8;xa=1:(M/2);xb=(M/2):-1:1;x2n=[xa,xb]; %产生长度为8的三角波序列x2(n)、x3(n)x3n=[xb,xa];X1k8=fft(x1n,8); %计算x1n的8点DFTX1k16=fft(x1n,16); %计算x1n的16点DFTX2k8=fft(x2n,8); %计算x2n的8点DFTX2k16=fft(x2n,16); %计算x2n的16点DFTX3k8=fft(x3n,8); %计算x3n的8点DFTX3k16=fft(x3n,16); %计算x3n的16点DFT%幅频特性曲线N=8;wk=2/N*(0:N-1);subplot(3,2,1);stem(wk,abs(X1k8),'.'); %绘制8点DFT的幅频特性图title('(1a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,3);stem(wk,abs(X2k8),'.');title('(2a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,5);stem(wk,abs(X3k8),'.');title('(3a) 8点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');N=16;wk=2/N*(0:N-1);subplot(3,2,2);stem(wk,abs(X1k16),'.'); %绘制16点DFT的幅频特性图title('(1b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,4);stem(wk,abs(X2k16),'.');title('(2b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');subplot(3,2,6);stem(wk,abs(X3k16),'.');title('(3b) 16点DFT[x_1(n)]');xlabel('ω/π');ylabel('幅度');%实验2对周期序列作频谱分析clear all;close all;N=8;n=0:N-1; %FFT的变换区间N=8x4n=cos(pi*n/4);x5n=cos(pi*n/4)+cos(pi*n/8);X4k8=fft(x4n); %计算x4n的8点DFTX5k8=fft(x5n); %计算x5n的8点DFTN=16;n=0:N-1; %FFT的变换区间N=16x4n=cos(pi*n/4);x5n=cos(pi*n/4)+cos(pi*n/8);X4k16=fft(x4n); %计算x4n的16点DFTX5k16=fft(x5n); %计算x5n的16点DFTN=8;w1k=2/N*(0:N-1);subplot(2,2,1);stem(w1k,abs(X4k8),'.'); %绘制8点DFT的幅频特性图title('(4a) 8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X4k8))]);subplot(2,2,3);stem(w1k,abs(X5k8),'.'); %绘制8点DFT的幅频特性图title('(5a)8点DFT[x_4(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X5k8))]);N=16;w2k=2/N*(0:N-1);subplot(2,2,2);stem(w2k,abs(X4k16),'.'); %绘制16点DFT的幅频特性图title('(4b) 16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X4k16))]);subplot(2,2,4);stem(w2k,abs(X5k16),'.'); %绘制16点DFT的幅频特性图title('(5b)16点DFT[x_5(n)]');xlabel('ω/π');ylabel('幅度');axis([0,2,0,1.2*max(abs(X5k16))]);%实验3对模拟周期信号作谱分析(归一化)Fs=64;T=1/Fs;N=16;n=0:N-1; %FFT的变换区间N=16x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)16点采样X6k16=fft(x6nT); %计算x6nT的16点DFTTp=N*T;F=1/Tp; %频率分辨率Fk=0:N-1;fk=2*k/N; %产生16点DFT对应的采样点频率(以零频率为中心)subplot(3,1,1);stem(fk,abs(X6k16),'.'); %绘制16点DFT的幅频特性图title('(6a) 16点DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');N=32;n=0:N-1; %FFT的变换区间N=32x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)32点采样X6k32=fft(x6nT); %计算x6nT的32点DFTTp=N*T;F=1/Tp; %频率分辨率Fk=0:N-1;fk=2*k/N; %产生32点DFT对应的采样点频率(以零频率为中心)subplot(3,1,2);stem(fk,abs(X6k32),'.');%绘制32点DFT的幅频特性图title('(6b) 32点DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');N=64;n=0:N-1; %FFT的变换区间N=64x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T); %对x6(t)64点采样X6k64=fft(x6nT); %计算x6nT的64点DFTTp=N*T;F=1/Tp; %频率分辨率Fk=0:N-1;fk=2*k/N; %产生64点DFT对应的采样点频率(以零频率为中心)subplot(3,1,3);stem(fk,abs(X6k64),'.'); %绘制64点DFT的幅频特性图title('(6c) 64点DFT[x_6(nT)]|');xlabel('\omega/\pi');ylabel('幅度');五、思考题及实验体会4.思考题(1)对于周期序列,如果周期不知道,如何用FFT 进行谱分析? (2)如何选择FFT 的变换区间?(包括非周期信号和周期信号)(3)当N=8时,)(2n x 和)(3n x 的幅频特性会相同吗?为什么?N=16 呢?答:(1)、如果)(n x 的周期预先不知道,可截取M 点进行DFT ,即)]([)()()()(n x DFT n X n R n x n x M M M M == 0≤k ≤M-1再将截取长度扩大1倍,截取)]([)()()(2222n x DFT n X n R n x M M M M == 0≤k ≤2M-1比较)(k x M 和 )(2k X M ,如果两者的主谱差别满足分析误差要求,则以)(k x M 或 )(2k X M 近似表示)(n x 的频谱,否则,继续将截取长度加倍,直至前后两次分析所得主谱频率差别满足误差要求。