傅立叶变换
傅立叶变换是一种常见的分析方法,傅立叶变换将满足一定条件的函数表示为一些函数的加权和(或者积分)。可以分为四个类别:
1. 非周期连续性信号
对应于傅里叶变换,频域连续非周期
2. 周期性连续性信号
对应于傅立叶级数,频域离散非周期
3. 非周期离散信号
对应于DTFT(离散时间傅立叶变换),频域连续周期
4. 周期性离散信号
对应于DFT(离散时间傅立叶变换),频域离散周期
傅立叶级数
首先从傅立叶级数开始分析,傅立叶级数是将一个信号在一组正交基上进行分解的体现。
连续时间傅立叶变换
离散时间傅立叶变换
离散时间傅立叶变换在频域上是连续的,但由于计算机无法表示无限长的时间片段,已经无法表示全部频率,一般取一定频域的分量。
二维傅立叶变换
傅立叶变换实现
只有离散傅里叶变换才可以实现,在MATLAB中实现有fft
,fft2
进行傅里叶变换,同样可以手动进行变换。
一维傅立叶变换
% xn是信号,n是坐标,N是点数% N =8;% n = [0:1:N-1];% xn = 0.5.^n; % 指数信号function [] = DFTusefft(xn,n,N) figure(1); Xk=fft(xn,N); % 傅立叶变换 subplot(211); stem(n,xn); title('原信号'); subplot(212); stem(n,abs(Xk)); title('FFT变换')end
DTFT 由于DTFT的频域是连续的而且是无穷的,当我们选择的最高频域足够高时,可以基本代表信号特征,可以进行编程。
function [] = DFT(xn,n,N) Xk = zeros(1,N); for k=1:N sn =0.0; for i=1:N sn = sn+xn(i)*exp(-j*2*pi*i*k/N); end Xk(k) = sn; end figure(2); subplot(211); stem(n,xn); title('原信号'); subplot(212); stem(n,abs(Xk)); title('DFT')end
二维傅立叶变换
function [] = imageDFT2fft() I=imread('rice.png'); I=im2double(I); [x,y] = size(I); Ax = ones(x,y); ans = ones(x,y); com = 0+1i; % 对每一列进行DFT for m=1:y Ax(:,m) = fft(I(:,m)); end % 对每一行进行DFT for k=1:x ans(k,:) = fft(Ax(k,:)); end F=fftshift(ans); F= abs(F); F=log(F+1); figure(7); imshow(F,[]);end