傅立叶变换

傅立叶变换是一种常见的分析方法,傅立叶变换将满足一定条件的函数表示为一些函数的加权和(或者积分)。可以分为四个类别:
1. 非周期连续性信号
对应于傅里叶变换,频域连续非周期
2. 周期性连续性信号
对应于傅立叶级数,频域离散非周期
3. 非周期离散信号
对应于DTFT(离散时间傅立叶变换),频域连续周期
4. 周期性离散信号
对应于DFT(离散时间傅立叶变换),频域离散周期

傅立叶级数

首先从傅立叶级数开始分析,傅立叶级数是将一个信号在一组正交基上进行分解的体现。

x(t)=∑k=−∞+∞akejkω0tx(t)=∑k=−∞+∞akejkω0t

x(t) = \sum_{k=-\infty}^{+\infty}a_{k}e^{jk\omega_{0}t}

ak=1T∫T/2−T/2x(t)e−jkω0tdtak=1T∫−T/2T/2x(t)e−jkω0tdt

a_{k} = \frac{1}{T} \int_{-T/2}^{T/2}x(t)e^{-jk\omega_{0}t}dt

连续时间傅立叶变换

ω0=2πTω0=2πT\omega_{0} = \frac{2\pi}{T},当T→∞T→∞T\to\infty时,ω0→0ω0→0\omega_{0}\to 0;
令X(jω)X(jω)X(j\omega)是TakTakTa_{k}的包络,用kω0→ωkω0→ωk\omega_{0}\to\omega,推出:
正变换

X(jω)=∫+∞−∞x(t)e−jkω0tdtX(jω)=∫−∞+∞x(t)e−jkω0tdt

X(j\omega) = \int_{-\infty}^{+\infty}x(t)e^{-jk\omega_{0}t}dt
其中 akaka_{k}是 X(jω)X(jω)X(j\omega)的等距离采样, ak=1TX(jkω0)ak=1TX(jkω0)a_{k} = \frac{1}{T}X(jk\omega_{0})
所以当 T→∞T→∞T\to\infty时, ω0→0ω0→0\omega_{0}\to 0,可以推出:
x(t)=∑akejkω0t=∑1TX(jkω0)ejkω0t=∑12πX(jkω0)ejkω0tω0x(t)=∑akejkω0t=∑1TX(jkω0)ejkω0t=∑12πX(jkω0)ejkω0tω0x(t) = \sum a_{k}e^{jk\omega_{0}t} = \sum \frac{1}{T}X(jk\omega_{0})e^{jk\omega_{0}t} = \sum \frac{1}{2\pi}X(jk\omega_{0})e^{jk\omega_{0}t}\omega_{0}
极限时转变为积分:
逆变换

x(t)=12π∫+∞−∞X(jω)ejωtdωx(t)=12π∫−∞+∞X(jω)ejωtdω

x(t) = \frac{1}{2\pi}\int_{-\infty}^{+\infty} X(j\omega)e^{j\omega t}d\omega

离散时间傅立叶变换

离散时间傅立叶变换在频域上是连续的,但由于计算机无法表示无限长的时间片段,已经无法表示全部频率,一般取一定频域的分量。
正变换

X(ejω)=∑n=−∞+∞x[n]e−jωnX(ejω)=∑n=−∞+∞x[n]e−jωn

X(e^{j\omega}) = \sum_{n=-\infty}^{+\infty}x[n]e^{-j\omega n}
逆变换

x[n]=12π∫2πX(ejω)ejωndωx[n]=12π∫2πX(ejω)ejωndω

x[n] = \frac{1}{2\pi} \int_{2\pi}^{}X(e^{j\omega})e^{j\omega n}d\omega

离散傅立叶变换

只有离散傅立叶变换在频域和时域都是离散的,即计算机可以处理的,因此DFT是可以实际进行编程并实用的。DFT的信号首先要进行截断,因为能处理的信号必须是有限的;然后对信号进行采样,对频谱进行离散化。
正变换

X(k)=∑n=0N−1x(n)e−j2πNnkX(k)=∑n=0N−1x(n)e−j2πNnk

X(k) = \sum_{n=0}^{N-1}x(n)e^{-j\frac{2\pi}{N}nk}
逆变换

x(n)=1N∑k=0N−1X(k)ej2πNnkx(n)=1N∑k=0N−1X(k)ej2πNnk

x(n) = \frac{1}{N}\sum_{k=0}^{N-1}X(k)e^{j\frac{2\pi}{N}nk}

二维傅立叶变换

F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−j2π(ux/M+vy/N)F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−j2π(ux/M+vy/N)

F(u,v) = \sum_{x=0}^{M-1} \sum_{y=0}^{N-1}f(x,y)e^{-j2\pi(ux/M+vy/N)}

f(x,y)=1MN∑x=0M−1∑y=0N−1F(u,v)ej2π(ux/M+vy/N)f(x,y)=1MN∑x=0M−1∑y=0N−1F(u,v)ej2π(ux/M+vy/N)

f(x,y) = \frac{1}{MN}\sum_{x=0}^{M-1} \sum_{y=0}^{N-1}F(u,v)e^{j2\pi(ux/M+vy/N)}

傅立叶变换实现

只有离散傅里叶变换才可以实现,在MATLAB中实现有fftfft2进行傅里叶变换,同样可以手动进行变换。

一维傅立叶变换

基于FFT

%  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

DFT公式

function [] = DFT(xn,n,N)Xk = zeros(1,N);    for k=1:Nsn =0.0;for i=1:Nsn = sn+xn(i)*exp(-j*2*pi*i*k/N);endXk(k) = sn;endfigure(2);subplot(211);stem(n,xn);title('原信号');subplot(212);stem(n,abs(Xk));title('DFT')
end

DTFT
由于DTFT的频域是连续的而且是无穷的,当我们选择的最高频域足够高时,可以基本代表信号特征,可以进行编程。

function [] = testDTFT(xn,n,N)figure(3);w=[-800:1:800]*4*pi/800;     %频域共-800----+800 的长度(本应是无穷,高频分量很少,故省去)    w = [-N/2:1:N/2]*4*pi*2/N;X=xn*exp(-j*(n'*w));         %求dtft变换,采用原始定义的方法,对复指数分量求和而得subplot(211)stem(n,xn);title('原始信号(指数信号)');subplot(212);plot(w/pi,abs(X));title('DTFT变换')
end

二维傅立叶变换

原始图像

使用fft2

function [] = imagefft()I=imread('lenna.jpg');I=rgb2gray(I);I=im2double(I);F=fft2(I);F=fftshift(F);F=abs(F);T=log(F+1);figure(4);imshow(T,[]);
end

使用二维傅立叶变换公式
速度很慢

function [] = imageDFT()I=imread('lenna_s.jpg');I=rgb2gray(I);I=im2double(I);[x,y] = size(I);ans = ones(x,y);com = 0+1i;for u =1:xfor v= 1:ysn =0;for i=1:x                for j=1:ysn = sn+I(i,j)*exp(-com*2*pi*(u*i/x+v*j/y));endendans(u,v) = sn;endendF=fftshift(ans);F= abs(F);F=log(F+1);figure(5);imshow(F,[]);
end

优化二维傅立叶变换
先按列进行傅里叶变换,再对行进行傅立叶变换,简化计算。

function [] = imageDFT2()I=imread('lenna.jpg');I=rgb2gray(I);I=im2double(I);[x,y] = size(I);Ax = ones(x,y);ans = ones(x,y);com = 0+1i;% 对每一列进行DFTfor k =1:x        for m=1:ysn =0;for n =1:xsn =sn + I(n,m)*exp(-com*2*pi*k*n/x);endAx(k,m) = sn;endend% 对每一行进行DFTfor l =1:yfor k =1:xsn =0;for m=1:ysn = sn+Ax(k,m)*exp(-com*2*pi*l*m/y);endans(k,l) = sn;endend    F=fftshift(ans);F= abs(F);F=log(F+1);figure(6);imshow(F,[]);
end

优化二维傅立叶变换
将按列进行傅里叶变换中使用DFT改为使用fft,速度提升很快。

function [] = imageDFT2fft()I=imread('lenna.jpg');I=rgb2gray(I);I=im2double(I);[x,y] = size(I);Ax = ones(x,y);ans = ones(x,y);com = 0+1i;% 对每一列进行DFT  for m=1:yAx(:,m) = fft(I(:,m));end% 对每一行进行DFT    for k=1:xans(k,:) = fft(Ax(k,:));endF=fftshift(ans);F= abs(F);F=log(F+1);figure(7);imshow(F,[]);
end

github地址

如有错误,欢迎指出~

傅里叶变换及其实现(MATLAB)相关推荐

  1. 短时傅里叶变换原理及其MATLAB实现(Short Time Fourier Transform,STFT)

    短时傅里叶变换原理及其MATLAB实现(Short Time Fourier Transform,STFT) 1.短时Fourier变换原理(STFT原理) 信号x(t)短时Fourier变换定义为: ...

  2. MATLAB离散傅里叶变换实验结果分析,Matlab离散傅里叶变换实验报告

    Matlab离散傅里叶变换实验报告 班级 信工082 学号 16 姓名 刘刚 实验组别 实验日期 室温 报告日期 成绩 报告内容:(目的和要求,原理,步骤,数据,计算,小结等) 实验三 离散傅立叶变换 ...

  3. 短时傅里叶变换(STFT)及matlab

    笔记~自用版~ 短时傅里叶变换的基础理论 短时傅里叶变换(Short-Time Fourier Transform, STFT)是一种时频分析方法,它将信号在时间域上分成若干个短时段,对每个短时段进行 ...

  4. 傅里叶变换对称性质MATLAB,实数序列离散傅里叶变换(DFT)的共轭对称性质

    先在matlab中运行以一命令,观察一下结果: >> b=[1 2 3 4 5 6 7 8] b = 1     2     3     4     5     6     7     8 ...

  5. MATLAB离散傅里叶变换实验结果分析,Matlab离散傅里叶变换实验报告.doc

    班级 信工082 学号 16 姓名 刘刚 实验组别 实验日期 室温 报告日期 成绩 报告内容:(目的和要求,原理,步骤,数据,计算,小结等) 实验三 离散傅立叶变换(DFT) 1.离散傅立叶级数 给定 ...

  6. 傅里叶变换对称性质MATLAB,利用共轭对称和反对称性质做离散傅里叶变换求相关性问题...

    LZ的数据不是128,补零成256:而本身数据长256,补零成512. 又从2个实数序列构成1个复数序列,FFT后恢复出各自的DFT时,求出的F_x和F_y不正确,所以进一步计算也都错误的.给出程序如 ...

  7. 【 MATLAB 】用 MATLAB 实现离散时间傅里叶变换(DTFT)的两个案例分析

    先给出离散时间傅里叶变换的简单介绍: 如果 x(n) 是绝对可加的,即 那么它的离散时间傅里叶变换给出为: w 称为数字频率,单位是每样本 rad(弧度)或 (弧度/样本)(rad/sample) 案 ...

  8. matlab的傅里叶变换

    更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013 图像变换: 更多MATLAB图像处理 ...

  9. 一文教你理解傅里叶变换及MATLAB在求傅里叶变换中的应用

    大纲 从积分变换谈起 积分变换的基本概念 积分变换的来源 傅里叶级数 傅里叶级数的相关基础概念 傅里叶级数的基石--三角函数系及其正交性 三角函数系 三角函数系的正交性 傅里叶级数的含义 傅里叶系数的 ...

  10. 【数字信号处理】序列傅里叶变换 ( 傅里叶变换实例 | 矩形窗函数 | 傅里叶变换 | 傅里叶变换幅频特性 | 傅里叶变换相频特性 )

    文章目录 一.序列傅里叶变换实例 1.傅里叶变换 2.傅里叶变换幅频特性 3.傅里叶变换相频特性 一.序列傅里叶变换实例 求序列 x(n)=RN(n)①x(n) = R_N(n) \ \ \ \ ①x ...

最新文章

  1. 8.Deep Interest Evolution Network for Click-Through Rate Prediction论文详解
  2. Sql Injection脚本注入终极利用方法
  3. Linux后台进程管理以及ctrl+z(挂起)、ctrl+c(中断)、ctrl+\(退出)和ctrl+d(EOF)的区别
  4. 有人说Julia比Python好,还给出了5个理由
  5. mysql 表中添加唯一约束
  6. ubuntu mysql 更新_数据库应用(三): Ubuntu 下 MySQL添加、更新与删除数据
  7. SAP UI5 应用开发教程之八 - 多语言的支持
  8. 企业网站6个常见的优化漏洞
  9. mac在命令行里获取root权限
  10. 教你怎么蹭网实现和dualwan双倍网速上网
  11. 这个寒假要大更新了!
  12. Trick(九)—— ++i 与 i++ 的本质区别
  13. 电脑里的所有播放器只能播放声音没有画面
  14. 操作系统:作业调度算法--短作业优先
  15. C#网络编程 (二) 数据流的类型和应用
  16. Python从zip文件里导入包
  17. beacon设备使用记录
  18. dvwa brute force(暴力破解)
  19. Visual Studio调试方式详解
  20. 真机模拟‘错误码:80058,desc of scope.userLocation is empty’的解决方案

热门文章

  1. qcc512x_qcc302x开发调试笔记
  2. 跑腿源码之外卖人v9.1_9.2的升级过程For 9.0及小程序及(客户端,配送端,商户端)的二次编译方法
  3. 计算平均指令时间_欧姆龙PLC指令应用案例(问答解析)
  4. 搜狗输入法纯净_最新PC端搜狗输入法,无广告弹窗纯净版
  5. 尼日利亚4g频段_4G全球频段划分及主要运营商对应表2015版
  6. seetaface6教程:封装人脸识别,人脸检测,,眼睛检测,状态,特征.....
  7. 购买周期 python-用Python实现一个基于EG协整法的跨周期套利策略
  8. 身份证号码中间显示*星号
  9. CCPC-wannafly Camp Day2 讲课内容总结(杜瑜皓-数据结构)
  10. html短竖线符号,word竖线符号