傅立叶变换在信号和图像处理、滤波、卷积、频率分析,以及功率谱分析中有着广泛的应用。关于傅立叶变换在经济学中的应用范围是宏观经济学,例如DSGE模型和商业周期分析中。
傅立叶分析被用来处理存在周期性的数据,可以将数据(或信号)表示为不同频率的正弦函数的线性组合。将原始信号进行分解的目的是为了更加简单的处理原来的信号。分解出的每一个正弦函数的幅度和相位决定了每个正弦函数波动的频率对原始信号波动的贡献。
傅立叶变换分为四类:
1. 对于非周期性连续信号,用傅立叶变换进行展开;
2. 对于周期性连续信号,用傅立叶技术展开;
3. 对于非周期性离散信号,用离散时域傅立叶变换(discrete time fourier transform)展开;
4. 对于周期性离散信号,用离散傅立叶变换(discrete fourier transform)展开。
但是对于应用来说,不用对以上四种类型的傅立叶变换全部掌握。计算机的能力是有限的,只能处理离散的和有限长度的信号,对于其他的变换类型只有在数学演绎中使用。也就是说,我们只需要了解对于周期性离散信号的傅立叶变换(DFT)就可以了。
傅立叶变换表面看起来似乎很难,但是那只是表象。任何数学公式都不仅仅是符号、字母和数字的随意组合,它表达的是一个思想。傅立叶变换也是一样的。傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法,利用直接测量到的原始信号,以累加的方式来计算该信号中不同正弦波信号的频率、振幅和相位。
从数学的角度来看,傅立叶变换是一种特殊的积分变换。它能将满足一定条件的某个函数表示成基于正弦函数的线性组合或者积分。
Matlab中进行傅立叶变换是针对离散傅立叶变换,采用的算法是快速傅立叶变换算法(fast Fourier transform algorithms,FFT)。
Matlab中快速傅立叶变换的方程是:
Y=fft(x)
其中x是一个长度为N向量,这个向量可以是一个时序,方程返回的是对于x的傅立叶变换Y,Y的长度也是为N。
对于一个离散的输入信号,其有意义的周期性频率有一个上界,这个上界被称为Nyquist frequency,等于对输入信号每两个相邻的测量之间的1个循环的长度。例如,原始的信号是关于每天温度的数据,这样1个循环就等于1天,在一个循环之中有两个观测值,每一天只有一个观察值,所以频率就是0.5,也就是Nyquist frequency=0.5。原始输入信号的最低频率就是一个循环包括所有的数据,被称作fundamental frequency。
例子1:
>>x=[4 3 7 -9 1 0 0 0]’;
>>y=fft(x)
Matlab的输出结果为:
y=
6.0000
11.4853 - 2.7574i
-2.0000 -12.0000i
-5.4853 +11.2426i
18.0000
-5.4853 -11.2426i
-2.0000 +12.0000i
11.4853 + 2.7574i
y中的第一个元素是原始输入数据的加总,第五项表示的是Nyquist frequency对原始输入信号波动的贡献。
例子2:
利用FFT计算太阳黑子的周期性。
>>load sunspot.dat
>>year=sunspot(:,1); %数据的第一列记录的是太阳黑子的观测年份。
>>wolfer=sunspot(:,2); %数据的第二列记录的是黑子相对数,是表示太阳黑子多寡的一种指数
>>plot(year,wolfer)
>>title(‘Sunspot Data’)
>>Y=fft(wolfer); %利用FFT对黑子相对数进行傅立叶变换,所得到的结果是一个复数向量Y。Y的平方被称作功率
%谱(powerspectrum)。将功率谱对频率作图可以得到周期图(periodogram)。
因为Y的第一个元素是数据的观察值的加总,是一个非常大的值,因此在画图之前通常将Y中的第一个元素去掉。
>>N=length(Y);
>>Y(1)=[];
>>power=abs(Y(1:N/2)).^2; %abs可以计算复数向量的长度
>>nyquist=1/2;
>>freq=(1:N/2)/(N/2)*nyquist;
>>plot(freq,power),grid on
>>xlabel(‘cycles/year’)
>>title(‘Periodogram’)
图中所显示的频率单位是cycles/year(周期/年),但是我们想知道的是year/cycles(年/周期),即每个周期多少年。可以定义
>>period=1./freq; %将cycles/year转换为year/cycles
>>plot(period, power), axis([0 40 0 2e7]), grid on
>>ylabel(‘power’)
>>xalbel(‘Period(Years/Cycle)’)
从图中可以观察到功率谱最大的周期在10附近,为更加精确的确定太阳黑子变化的周期,可以用下面的命令:
>>[mp, index]=max(power);
>>Period(index)
>>ans =
>> 11.0769
也就是说太阳黑子活动的峰值以大约11年为一个周期。


雷达卡




京公网安备 11010802022788号







