FFT的Matlab仿真分析
- 格式:pdf
- 大小:745.26 KB
- 文档页数:22
基于Matlab的DFT及FFT频谱分析基于Matlab的DFT及FFT频谱分析一、引言频谱分析是信号处理中的重要任务之一,它可以揭示信号的频率特性和能量分布。
离散傅里叶变换(DFT)及快速傅里叶变换(FFT)是常用的频谱分析工具,广泛应用于许多领域。
本文将介绍通过Matlab进行DFT及FFT频谱分析的方法和步骤,并以实例详细说明。
二、DFT及FFT原理DFT是一种将时域信号转换为频域信号的离散变换方法。
它将信号分解成若干个正弦和余弦函数的叠加,得到频率和幅度信息。
FFT是一种高效的计算DFT的算法,它利用信号的对称性和周期性,将计算复杂度从O(N^2)降低到O(NlogN)。
FFT通过将信号分解成不同长度的子序列,递归地进行计算,最终得到频谱信息。
三、Matlab中的DFT及FFT函数在Matlab中,DFT及FFT可以通过内置函数进行计算。
其中,DFT使用函数fft,FFT使用函数fftshift。
fft函数可直接计算信号的频谱,fftshift函数对频谱进行频移操作,将低频移到频谱中心。
四、Matlab中DFT及FFT频谱分析步骤1. 读取信号数据首先,将待分析的信号数据读入到Matlab中。
可以使用内置函数load读取文本文件中的数据,或通过自定义函数生成模拟信号数据。
2. 时域分析通过plot函数将信号数据在时域进行绘制,以观察信号的波形。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
3. 信号预处理针对不同的信号特点,可以进行预处理操作,例如去除直流分量、滤波等。
这些操作可提高信号的频谱分析效果。
4. 计算DFT/FFT使用fft函数计算信号数据的DFT/FFT,并得到频谱。
将信号数据作为输入参数,设置采样频率和点数,计算得到频谱数据。
5. 频域分析通过plot函数将频谱数据在频域进行绘制,观察信号的频率特性。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
6. 结果解读根据频谱图像,分析信号的频率成分、幅度分布和峰值位置。
MATLAB信号处理仿真实验1. 引言信号处理是一种广泛应用于各个领域的技术,它涉及到对信号的获取、处理和分析。
MATLAB是一种强大的数学软件,提供了丰富的信号处理工具箱,可以用于信号处理的仿真实验。
本文将介绍如何使用MATLAB进行信号处理仿真实验,并提供详细的步骤和示例。
2. 实验目的本实验旨在通过MATLAB软件进行信号处理仿真,以加深对信号处理原理和算法的理解,并掌握使用MATLAB进行信号处理的基本方法和技巧。
3. 实验步骤3.1 生成信号首先,我们需要生成一个待处理的信号。
可以使用MATLAB提供的信号生成函数,如sine、square和sawtooth等。
以生成一个正弦信号为例,可以使用以下代码:```MATLABfs = 1000; % 采样频率t = 0:1/fs:1; % 时间向量f = 10; % 信号频率x = sin(2*pi*f*t); % 生成正弦信号```3.2 添加噪声为了更真实地摹拟实际信号处理场景,我们可以向生成的信号中添加噪声。
可以使用MATLAB提供的随机噪声生成函数,如randn和awgn等。
以向生成的信号中添加高斯白噪声为例,可以使用以下代码:```MATLABSNR = 10; % 信噪比y = awgn(x, SNR); % 向信号中添加高斯白噪声```3.3 进行滤波处理滤波是信号处理中常用的一种技术,用于去除信号中的噪声或者提取感兴趣的频率成份。
可以使用MATLAB提供的滤波函数,如fir1和butter等。
以设计并应用一个低通滤波器为例,可以使用以下代码:```MATLABorder = 10; % 滤波器阶数cutoff = 0.1; % 截止频率b = fir1(order, cutoff); % 设计低通滤波器filtered_y = filter(b, 1, y); % 应用滤波器```3.4 进行频谱分析频谱分析是信号处理中常用的一种技术,用于分析信号的频率成份。
说明:以下资源来源于《数字信号处理的MATLAB实现》万永革主编一.调用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)用MATLAB进行谱分析时注意:(1)函数FFT返回值的数据结构具有对称性。
例:N=8;n=0:N-1;xn=[4 3 2 6 7 8 9 0];Xk=fft(xn)→Xk =39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929iXk与xn的维数相同,共有8个元素。
Xk的第一个数对应于直流分量,即频率值为0。
(2)做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。
在IFFT时已经做了处理。
要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。
二.FFT应用举例例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。
采样频率fs=100Hz,分别绘制N=128、1024点幅频图。
clf;fs=100;N=128; %采样频率和数据点数n=0:N-1;t=n/fs; %时间序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求得Fourier变换后的振幅f=n*fs/N; %频率序列subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=128');grid on;%对信号采样数据为1024点的处理fs=100;N=1024;n=0:N-1;t=n/fs;x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier变换mag=abs(y); %求取Fourier变换的振幅f=n*fs/N;subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;subplot(2,2,4)plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('N=1024');grid on;运行结果:fs=100Hz,Nyquist频率为fs/2=50Hz。
matlab对时域数据进行fft运算MATLAB(Matrix Laboratory)是一种广泛使用的计算机编程语言和环境,专门用于数值计算、数据分析和可视化。
其中,FFT(快速傅里叶变换)是一种常用的数值算法,用于将时域信号转换为频域信号。
在本文中,我们将详细介绍如何使用MATLAB对时域数据进行FFT运算,并解释其中的每个步骤。
第一步:准备时域数据在进行FFT运算之前,首先需要准备一组时域数据。
时域数据通常是一个一维数组,其中包含了一段时间内的信号强度值。
例如,我们可以考虑一个声音信号的例子。
假设我们有一个.wav文件,其中包含了一段时间内的声音波形。
我们可以使用MATLAB的声音处理工具箱来读取.wav文件,并将波形数据存储在一个变量中。
matlab[y, fs] = audioread('sound.wav');在上述代码中,`y`是一个包含了声音波形数据的一维数组,`fs`是声音的采样率(每秒采样的样本数)。
请确保将.wav文件放置在MATLAB的当前工作目录下,或者提供完整的文件路径。
第二步:对时域数据应用窗函数在进行FFT之前,通常需要对时域数据应用窗函数。
窗函数可以减少频谱泄漏效应,并提高频谱分辨率。
在MATLAB中,有多种窗函数可供选择,如矩形窗、汉宁窗等。
以汉宁窗为例,我们可以使用以下代码将窗函数应用于时域数据。
matlabwindow = hann(length(y));y_windowed = y .* window;在上述代码中,`hann(length(y))`生成了一个与时域数据长度相同的汉宁窗。
`y .* window`将窗函数应用于时域数据,得到窗函数加权后的时域数据。
第三步:进行FFT运算在对时域数据应用窗函数之后,我们可以使用MATLAB中的`fft`函数执行FFT运算。
下面的代码演示了如何执行基础的FFT运算,并获取频域信号数据。
matlabY = fft(y_windowed);在上述代码中,`fft(y_windowed)`计算了窗函数加权的时域数据的FFT,并将结果存储在变量`Y`中。
FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。
有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。
这就是很多信号分析采用FFT变换的原因。
另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。
虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。
现在圈圈就根据实际经验来说说FFT结果的具体物理意义。
一个模拟信号,经过ADC采样之后,就变成了数字信号。
采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此罗嗦了。
采样得到的数字信号,就可以做FFT变换了。
N个采样点,经过FFT之后,就可以得到N个点的FFT结果。
为了方便进行FFT 运算,通常N取2的整数次方。
假设采样频率为Fs,信号频率F,采样点数为N。
那么FFT之后结果就是一个为N点的复数。
每一个点就对应着一个频率点。
这个点的模值,就是该频率值下的幅度特性。
具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。
而第一个点就是直流分量,它的模值就是直流分量的N倍。
而每个点的相位呢,就是在该频率下的信号的相位。
第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。
例如某点n所表示的频率为:Fn=(n-1)*Fs/N。
由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。
1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。
matlab simulink 傅里叶变换-概述说明以及解释1.引言1.1 概述概述:傅里叶变换是一种重要的信号处理工具,在数字信号处理领域有着广泛的应用。
通过将信号从时域转换到频域,可以方便地分析信号的频谱特性,从而实现信号滤波、频谱分析、频率识别等功能。
Matlab Simulink 是一款强大的仿真工具,提供了丰富的信号处理函数和模块,可以方便地进行傅里叶变换的仿真和分析。
本文将介绍Matlab Simulink中傅里叶变换的基本原理和应用方法,帮助读者更好地理解和使用这一信号处理工具。
1.2 文章结构文章结构部分:本文主要分为引言、正文和结论三部分。
在引言部分中,将对Matlab Simulink 傅里叶变换进行概述,介绍文章的结构和目的。
在正文部分中,将首先介绍Matlab Simulink的基本概念和简介,然后详细阐述傅里叶变换的原理,最后探讨在Matlab Simulink中如何应用傅里叶变换。
在结论部分中,将对整篇文章进行总结,并展望傅里叶变换在未来的应用前景,最后以一段结束语作为结尾。
整个文章结构严谨,内容完整,希望读者能够从中获得有益的启发和知识。
1.3 目的:本文旨在探讨Matlab Simulink中傅里叶变换的应用。
通过介绍Matlab Simulink简介和傅里叶变换原理,以及实际应用中的案例分析,旨在帮助读者深入了解傅里叶变换在信号处理领域的重要性和实际应用价值。
同时,通过本文的学习,读者可以掌握在Matlab Simulink中进行傅里叶变换的方法,提高信号处理的效率和准确性。
最终目的是让读者能够运用所学知识解决实际问题,拓展傅里叶变换在工程实践中的应用范围。
2.正文2.1 Matlab Simulink简介Matlab Simulink是MathWorks公司推出的一款专业的仿真和建模工具,它结合了Matlab编程语言和Simulink建模环境,提供了一种方便快捷的方式来进行系统建模、仿真和分析。
FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。
有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。
这就是很多信号分析采用FFT变换的原因。
另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。
虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。
现在就根据实际经验来说说FFT结果的具体物理意义。
一个模拟信号,经过ADC采样之后,就变成了数字信号。
采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此罗嗦了。
采样得到的数字信号,就可以做FFT变换了。
N个采样点,经过FFT之后,就可以得到N个点的FFT结果。
为了方便进行FFT运算,通常N取2的整数次方。
假设采样频率为Fs,信号频率F,采样点数为N。
那么FFT之后结果就是一个为N点的复数。
每一个点就对应着一个频率点。
这个点的模值,就是该频率值下的幅度特性。
具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。
而第一个点就是直流分量,它的模值就是直流分量的N倍。
而每个点的相位呢,就是在该频率下的信号的相位。
第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。
例如某点n所表示的频率为:Fn=(n-1)*Fs/N。
由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs 为1024Hz,采样点数为1024点,则可以分辨到1Hz。
1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。
FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。
有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。
这就是很多信号分析采用FFT变换的原因。
另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。
虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。
现在就根据实际经验来说说FFT结果的具体物理意义。
一个模拟信号,经过ADC采样之后,就变成了数字信号。
采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此罗嗦了。
采样得到的数字信号,就可以做FFT变换了。
N个采样点,经过FFT之后,就可以得到N个点的FFT结果。
为了方便进行FFT运算,通常N取2的整数次方。
假设采样频率为Fs,信号频率F,采样点数为N。
那么FFT之后结果就是一个为N点的复数。
每一个点就对应着一个频率点。
这个点的模值,就是该频率值下的幅度特性。
具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。
而第一个点就是直流分量,它的模值就是直流分量的N倍。
而每个点的相位呢,就是在该频率下的信号的相位。
第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。
例如某点n所表示的频率为:Fn=(n-1)*Fs/N。
由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。
1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。
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的一般分析栅栏效应和频谱泄露栅栏效应:离散采样,数字处理造成对频谱的观察只能在有限点上,好像透过栅栏观察景物一样;频谱泄露:对信号的截断加窗,有限时间的信号在频谱上造成一定宽度频谱,从而造成在频谱的其它频率点上出现不应有的谱峰。
采样加窗后实正弦信号的频谱:FFT得到的结果:注意信号的相位z FFT的结果是矢量,有相位信息,但是我们使用更多的是幅度信息,对相位信息容易忽略;z各个信号频率分量的相位决定着信号在时域的具体波形;z FFT频谱中相同频率点上的值是矢量叠加的整数频点采样问题FFT的物理分辨率是采样率 / 采样点数,如果所分析的信号频率为该值的整数倍,那么通过“栅栏”对频谱观察时可以正好看到信号频谱的实在位置,并且观察到sinc函数的过零点(如果补零,要求信号频率为名义分辨率倍数)。
看一下演示:左边各图:1000MHz采样,1000点数据,不同点FFT(末尾补零),10MHz 正弦信号分析右边各图:1000MHz采样,1000点数据,不同点FFT(末尾补零),10.5MHz正弦信号分析1000点FFT8000点FFT8192点FFT一个实例----我的本科毕业设计@2004.Spring功能:测量两路同频率正弦信号的相位差,频率。
原理:对信号采样,在FPGA中进行浮点FFT运算,分别求得两路信号在本次采样过程中的起始相位,再求两相位之差,即为两信号相位差,结果送PIC单片机整理,再显示在LCD上。
图示说明:系统带有幅度,相位差,频率可控的双路DDFS信号发生电路,可用于自闭环测试,评估对系统的性能。
图示为系统对两路486Hz,相位差90度的正弦模拟信号采样分析的结果(包括时域采样波形,频率,相位差),可见FFT对信号的相位分析具有相当高的精度。
分析sinc函数z连续Sinc函数的过零点位置是N/t, N=1,2,3…,或-1,-2,-3,t是矩形脉冲宽度;z离散sinc函数的过零点在k * N/n, k=1,2,3…, 其中N是数据总点数,n是数据不为0的点数,即过零点周期是占空比的倒数,但是极限是占空比50%的情况(占空比20%和80%的数据过零点周期相同,只是直流分量不同,对应频率分量的相位为相反数)。
如果不能整除,将采不到取0的位置例如:当占空比为20%,过零点周期为100/20=5小图中为占空比80%的情况当占空比为10%过零点周期为100/10=10在可整除的占空比情况下,可取到过零点当占空比为15% 不可整除取不到过零点各次谐波的相位呈现线形关系:(图为占空比10%的矩形波)频率分辨率问题CASE1 :通过增长采样时间来提高实际分辨率,即增加物理分辨率,物理分辨率的意义在于衡量FFT 可以区分的频率分量的间隔。
采样率: 1000 MHz采样点数:1000 点FFT点数: 10000 点蓝色: 5MHz 正弦(时域中为1MHz)红色: 6MHz 正弦(时域中为2MHz)黑色:两信号叠加合成效果注意,矩形窗的较大的旁瓣泄露造成叠加合成后两个频率分量的较大落差!并且主瓣峰顶偏离应在位置!-------------------------------通过加窗,压低旁瓣,可以改善。
采样率: 1000 MHz采样点数:2000 点(占空比20%)右图为 8000 点(占空比80%)FFT点数: 10000 点蓝色: 5MHz 正弦(时域中为1MHz)单峰幅度值 10红色: 6MHz 正弦(时域中为2MHz)单峰幅度值 10黑色:两信号叠加合成效果对20%和80%占空比信号分析得到相同“主旁瓣”宽度的理解:理解1: 如前所述,具有互补占空比的数字方波具有相同的过零点周期,只是直流分量不同,相位不同;理解2:数字的sinc是对模拟sinc采样的得到的,如上20%占空比的情况下的数字瓣反映的是真正的模拟瓣,80%情况下的数字瓣是“假的”,它的一个瓣是对多个模拟瓣采样的综合结果。
对从增加采样数据量提高物理分辨率的理解:从本质上讲,增长观察时间相当于在模拟时域增长矩形窗宽度,从而在模拟频率域减小了sinc主旁瓣宽度,减小了相邻频率分量的混叠;CASE2 :如果数据采样点数一定,通过补零,相当于减小了矩形窗的占空比,过零点周期变长,频谱可以看得更加精细,但是并不能减小两个sinc的混叠程度,即不能增加分辨率,增加的是名义分辨率。
名义分辨率是衡量的是FFT对频谱观察的细微程度。
名义分辨率= 采样率 / 分析点数下面四幅图是在相同采样点数下,通过补零作不同点数FFT的结果,参数如上所述的前者(1000采样点)5000点FFT 10000点FFT20000点FFT 40000点FFT结论:补零不能减轻频谱混叠的程度,但是能减轻栅栏效应的影响,把频谱看得更细,对于非整数频点(一般情况)下观察频谱,这是有效的。
如下所示:左图频谱:1000M采样,单峰幅度10,5M正弦,1000点采样(整数频点),2000点FFT,峰值出现在5MHz 右图频谱:5.2M正弦,其他参数不变,峰值出现在 10*1000MHz/2000=5MHz, 误差左图:4K点FFT,峰值位置=21*1000MHz/4000=5.25MHz,误差, 但是减小了。
右图:5K点FFT, 峰值位置=26*1000MHz/5000=5.2MHz, 1000MHz/5000=0.2MHz, 符合!左图:50K点FFT, 右图100K点FFT,峰值均出现在5.2MHz, 5M/5.2M信号频谱峰值有区别,采样造成。
思考分辨率问题一般认为:分辨率 = 采样率 / 数据采样点数数据参数:采样率: 1000 MHz采样点数: 1000 点FFT点数: 10000 点蓝色: 5 MHz, 初始相位 0红色:5.5 MHz, 初始相位 0黑色:两个信号叠加效果结论:频谱混叠,两个信号频率不可分真的分不开吗?不见得!把5.5 MHz信号的初始相位调整为100度,出现两个峰,但是峰顶并不在应在位置。
结论:相同频率上的频谱是矢量合成的!结论:对频率分辨率的理解理解1:当信号频率差小于采样率/采样点数,在频域上,频谱靠得太近,造成混叠,难以分辨。
理解2:在时域上,多个频率合成造成信号周期变长,采样点至少应该保证采完一个新周期。
(对于频谱观察,这是充分的,但并一定必要)数据采样率:1000MHz左图:5MHz 和 5.5MHz 信号叠加,周期变成1000MHz / (5.5MHz – 5MHz) = 2000 右图:1MHz 和 1.2MHz 信号叠加,周期变成1000MHz / (1.2MHz – 1MHz) = 5000加窗问题窗函数特性概览三角窗表达式:波形及其频谱:(取1000点窗函数,作16384点FFT,频谱取10倍常对数幅度值)波形:频谱:前3%频谱:Hanning窗函数表达式:Hamming 窗函数表达式:Blackman 窗函数表达式:Bartlett 窗函数表达式:Kaiser 窗函数表达式:几种常用窗函数的感性比较窗函数1000点,观察频谱的前 1%结论:不同的窗函数,主瓣宽度,旁瓣衰减,过零点周期是不同的,一般来讲,主瓣宽度和旁瓣泄露呈矛盾关系,主瓣宽则旁瓣泄露少。
比较理想的窗函数频谱为矩形,矩形宽度为物理分辨间隔。
但是不能实现时域的无限sinc加窗主瓣:主瓣窄而平坦,有利于克服栅栏效应,有利于计算频率中心旁瓣:没有用处,没有最好尝试“sinc 窗”:上图为窗函数时域图,下图为10MHz正弦(1000M采样,50K点FFT)加“sinc窗”频谱图。
可见,它主瓣太宽,并不太实用,但是频率可以利用计算几何中心得到。
使用窗函数5M/6M 同幅度正弦在1000M 采样,1000点数据,100K 点FFT ,加不同窗函数的效果:矩形窗 三角窗(偏移存在,落差减小)汉宁窗 海明窗矩形窗旁瓣泄露加大,造成两个频率分量难以分辨汉宁窗 海明窗注意:虽然压低了旁瓣,但是同时展宽了主瓣,因此加窗是有代价的,如下图:三角窗 海明窗矩形窗 汉宁窗 布莱克曼窗因此,增加采样点数,增加物理频率分辨率,同时加窗效果才会更好,例如将采样点数增加为4000点。
三角窗 海明窗矩形窗 汉宁窗 布莱克曼窗FFT 改善信噪比下列图示均为100K 点FFT 时,相同正弦和噪声叠加,在不同采样点数对信噪比造成的影响:200点采样 2000点采样20K 点采样 50K 点结论: 增加采样点数时,由于信号的相关性和噪声的不相关性,或者认为,信号样值在频谱中集中,噪声样值在频谱中分散,造成信号频谱增加的能量大于噪声频谱增加的能量,从而信噪比增加,并且增加的信噪比与采样点数成正比,采样点加一倍,信噪比也约增加一倍。
理论上,实正弦N 个采样点在频谱上集中到2点,N 个噪声采样在频谱上散布在N 点,因此信噪比提高N/2倍。
我的学识如此有限,对问题的分析必然存在不足,热切地企盼着你的质疑与指教!自然界的规律如此微妙而优雅,深邃而广袤;今天我只是在沙滩上拾得几枚好看的贝壳,在前方的海底必定还有更多更美的东西沉睡着,等待着我们携手将她发现,为她陶醉。