[转载]Matlab中fft与fftshift命令的小结与分析

http://blog.sina.com.cn/s/blog_68f3a4510100qvp1.html

注:转载请注明出处——by author.

我们知道Fourier分析是信号处理里很重要的技术,matlab提供了强大的信号处理能力,但是有一些细节部分需要我们注意。

记信号f(t)的起始时间为t_start, 终止时间为t_end, 采样周期为t_s, 可以计算信号的持续时间Duration为 t_end – t_start, 信号离散化造成的采样点数 N = Duration/t_s + 1;

根据Fourier分析的相关结论,我们知道时域的采样将会造成频域的周期化,该周期为采样频率f_s(著名的香农采样定理基于此).

于是, 经过matlab的fft函数处理后,得到数据的横坐标为0:f_s/(N-1):f_s。相关代码如下所示:

%matlab fft 测试代码

t_s = 0.01;
t_start = 0.5; t_end = 5;
t = t_start:t_s:t_end;
y = 0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y_f = fft(y);

subplot(3,1,1);
plot(t,y); title(‘original signal‘);

Duration = t_end - t_start;
Sampling_points = Duration/t_s + 1;

f_s = 1/t_s;
f_x = 0:f_s/(Sampling_points-1):f_s;

subplot(3,1,2);
plot(f_x,abs(y_f)); title(‘fft transform‘);

subplot(3,1,3);
plot(f_x-f_s/2,abs(fftshift(y_f))); title(‘shift fft transform‘);

也就是说,如果我们不使用fftshift,其变换后的横坐标为0:f_s/(N-1):f_s, 如果使用fftshift命令,0频率分量将会移到坐标中心,这也正是matlab中帮助中心给出的意思:对fft的坐标进行了处理。实际上由于频谱的周期性,我们这样做是合理的,可以接受的。

请读者特别要注意横坐标的差别。另外,根据函数的特性,频谱应当只有在15Hz,40Hz出现峰值,但是fft变换后在60Hz,及85Hz处同样出现了峰值,应当可以从fft的计算过程中得到相应的解释。

事实上,如果我们用15Hz,60Hz来测试fft变换,也即是 y = 0.5*sin(2*pi*15*t)+2*sin(2*pi*60*t);图像如下所示,没有任何变化。

这种现象提醒我们,频率在f_s以内,即 0<f<f_s,f 以及 f_s – f 都有可能是测试信号的频率谱,这就给我们带来了歧义。并且从第三个子图也可以看出,这时候的fftshift会给我们带来错误的引导,也就是说,如果我们试图采样fft或者fftshift来分析信号的频率谱显得不那么靠谱了,matlab的fft谱线与信号的实际频率并不是一一对应的映射关系。这当然不是我们所期望看到的结果,所以实际分析信号时,有关这个问题需要额外的注意。

实际上,这也就间接地证明了Nyquist采样定理的合理性:采样频率要高于截止频率的两倍,上面的处理中我们所使用的采样频率为100Hz,于是当截止频率超过50Hz时,就会出现混叠效应,特殊情况就如上图所示:完全一样。于是,这也就告诉我们若要正确的显示频谱,需要仔细地考量采样频率与截止频率的关系,若太小,则有可能出现混叠,若太大,则计算代价过高。

时间: 2024-10-12 08:54:32

[转载]Matlab中fft与fftshift命令的小结与分析的相关文章

Matlab中fft与fftshift命令的小结与分析

转载自:http://wang-yg.diandian.com/post/2011-03-12/40028916801 我们知道Fourier分析是信号处理里很重要的技术,matlab提供了强大的信号处理能力,但是有一些细节部分需要我们注意. 记信号f(t)的起始时间为t_start, 终止时间为t_end, 采样周期为t_s, 可以计算信号的持续时间Duration为 t_end – t_start, 信号离散化造成的采样点数 N = Duration/t_s + 1; 根据Fourier分析

[转载]MATLAB中FFT的使用方法

http://blog.163.com/fei_lai_feng/blog/static/9289962200971751114547/ 说明:以下资源来源于<数字信号处理的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

MATLAB中fft

一般的fft需要将点数补成2的整数次幂,MATLAB中有fft函数,输入N点序列则输出也是N点序列,其中N不一定为2的整数次幂.所以会疑惑MATLAB做的fft和N点序列对应的dft是否一样.经过验证,MATLAB中对N点序列做fft的结果与N点dft的结果是完全一样的,没有对N点序列进行补0后再做操作. 下面是MATLAB代码和结果. n = 0: 49; A = 444.128; a = 50 * sqrt(2.0) * pi; w0 = 50 * sqrt(2.0) * pi; T = 0

[转载]Matlab中插值函数汇总和使用说明

http://blog.sciencenet.cn/blog-457143-679275.html MATLAB中的插值函数为interp1,其调用格式为:  yi= interp1(x,y,xi,'method') 其中x,y为插值点,yi为在被插值点xi处的插值结果:x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值: 'spline'三次样条插值: 'cubic'立方插值.缺省时表示线性插值 注意

MATLAB中FFT的使用方法

一.调用方法 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

matlab中uigetfile命令的应用

matlab中uigetfile命令的应用 uigetfile命令的应用 此函数的用法为 [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName) FileName:返回的文件名 PathName:返回的文件的路径名 FilterIndex:选择的文件类型 FilterSpec:文件类型设置 DialogTitle:打开对话框的标题 DefaultName:默认指向的文件名 例子:(接来自mat

matlab中图像处理常见用法

一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:/w01.tif') 注:计算机E盘上要有w01相应的.tif文件. 2. imwrite imwrite函数用于写入图像文件,如:imwrite(a,'e:/w02.tif',’tif’) 3. imfinfo imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:/w01.tif') 二. 图像的显示 1. image image函数是MATLAB提供的最原始的图像显示

MATLAB中的常用函数

MATLAB中的常用函数 1. 特殊变量与常数 主题词 意义 主题词 意义 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 inputname 输入参数名 NaN 非数 nargin 输入参数个数 nargout 输出参数的数目 pi 圆周率 nargoutchk 有效的输出参数数目 realmax 最大正浮点数 realmin 最小正浮点数 varargin   实际输入的参量 varargout 实际返回的参量     2.

[转载]Matlab实用小技巧——Matlab学习笔记

1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断.MATLAB这时可能正疲于应付,响应会有些滞后. 2. figure命令新建一个绘图窗口 figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口.当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象.所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到). figu