- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线版
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据导出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策语句
- MATLAB - if 语句
- MATLAB - if-else 语句
- MATLAB - if-elseif-else 语句
- MATLAB - 嵌套 if 语句
- MATLAB - switch 语句
- MATLAB - 嵌套 switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - for 循环
- MATLAB - while 循环
- MATLAB - 嵌套循环
- MATLAB - break 语句
- MATLAB - continue 语句
- MATLAB - end 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - 返回语句
- MATLAB - 空函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波器函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - map 函数
- MATLAB - mean 函数
- MATLAB - end 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - try...catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 二维线图
- MATLAB - 三维图
- MATLAB - 格式化绘图
- MATLAB - 对数坐标轴绘图
- MATLAB - 绘制误差条
- MATLAB - 绘制三维等高线
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 二维数组插值
- MATLAB - 三维数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换函数
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 二维逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约旦消元法
- MATLAB - 简化行阶梯形
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 其他
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 逆傅里叶变换
MATLAB 中的逆傅里叶变换是一个函数,它接收信号的频域表示,并将其转换回时域表示。它是傅里叶变换的反向过程,傅里叶变换将时域信号转换为其频域表示。
在 MATLAB 中,逆傅里叶变换使用 `ifft` 函数(对于一维信号)和 `ifft2` 函数(对于二维信号)计算。逆傅里叶变换的结果是代表原始时域信号的信号。
逆傅里叶变换在信号处理、图像处理和通信中非常有用,它用于分析和处理频域中的信号。它允许对频域中表示的信号执行诸如滤波、压缩和调制之类的操作。
使用 `ifft()` 进行逆傅里叶变换
MATLAB 中的 `ifft()` 函数计算序列的逆离散傅里叶变换 (IDFT)。它接收表示频域信号的一维或二维数组(例如,使用 `fft()` 函数获得),并返回相应的时域信号。
逆离散傅里叶变换是离散傅里叶变换 (DFT) 的逆过程。它将信号的频域表示转换回时域表示。这在需要在频域中分析或处理信号,然后将其转换回时域以进行进一步处理或解释的应用中非常有用。
语法
X = ifft(Y) X = ifft(Y,n) X = ifft(Y,n,dim) X = ifft(___,symflag)
语法解释
X = ifft(Y) 使用快速算法计算 Y 的逆傅里叶变换。结果 X 与 Y 大小相同。
- 如果 Y 是向量,`ifft(Y)` 返回向量的逆变换。
- 如果 Y 是矩阵,`ifft(Y)` 返回矩阵每一列的逆变换。
- 如果 Y 是多维数组,`ifft(Y)` 将沿第一个非单一维度上的值视为向量,并返回每个向量的逆变换。
X = ifft(Y,n) - 计算 Y 的逆傅里叶变换,但在执行变换之前,用零填充 Y 以使其长度为 n。
X = ifft(Y,n,dim) - 沿指定的维度 dim 计算 Y 的逆傅里叶变换,用零填充以沿该维度使长度为 n。例如,如果 Y 是矩阵,`ifft(Y,n,2)` 计算每一行的 n 点逆变换。
X = ifft(___,symflag) - 允许您指定 Y 的对称性以及任何之前的输入参数组合。例如,`ifft(Y,'symmetric')` 将 Y 视为共轭对称。
MATLAB 中逆傅里叶变换的示例
让我们看看上面提到的每种语法的示例。
示例 1:使用 `ifft(Y)` 计算逆傅里叶变换
我们的代码如下:
% Generate a signal t = linspace(0, 1, 1000); % Time vector f = 5; % Frequency of the signal signal = sin(2*pi*f*t); % Compute the Fourier Transform Y = fft(signal); % Compute the Inverse Fourier Transform X = ifft(Y); % Plot the original and reconstructed signals subplot(2,1,1); plot(t, signal); title('Original Signal'); xlabel('Time'); ylabel('Amplitude'); subplot(2,1,2); plot(t, real(X)); % Display real part of X title('Reconstructed Signal'); xlabel('Time'); ylabel('Amplitude');
在这个例子中:
- 我们首先生成一个正弦信号 signal。
- 然后我们使用 `fft()` 计算信号的傅里叶变换,结果为 Y。
- 接下来,我们使用 `ifft(Y)` 计算逆傅里叶变换,理想情况下应该重建原始信号。
- 最后,我们绘制原始信号和重建信号以进行比较。
代码执行后,我们得到以下输出:
示例 2:计算具有零填充的逆傅里叶变换
我们的代码如下:
% Generate a signal t = linspace(0, 1, 1000); % Time vector f = 5; % Frequency of the signal signal = sin(2*pi*f*t); % Compute the Fourier Transform Y = fft(signal); % Compute the Inverse Fourier Transform with zero padding n = 2000; % Length to pad X = ifft(Y, n); % Plot the original and padded signals subplot(2,1,1); plot(t, signal); title('Original Signal'); xlabel('Time'); ylabel('Amplitude'); subplot(2,1,2); t_padded = linspace(0, 1, n); % Time vector for padded signal plot(t_padded, real(X)); % Display real part of X title('Padded Signal'); xlabel('Time'); ylabel('Amplitude');
此示例类似于前一个示例,但增加了零填充。
- 在计算信号的傅里叶变换之后,我们使用 `ifft(Y, n)` 计算具有零填充到长度 n 的逆傅里叶变换。
- 零填充可用于提高信号频域表示的分辨率。
执行后的输出为:
示例 3
沿特定维度计算具有零填充的逆傅里叶变换
我们的代码是:
% Create a 2D matrix A = magic(4); % Magic square matrix disp('Original Matrix:'); disp(A); % Compute the Fourier Transform along the columns Y = fft(A, [], 2); % Compute the Inverse Fourier Transform along the columns with zero padding n = 8; % Length to pad X = ifft(Y, n, 2); % Display the original and padded matrices disp('Original Matrix after IFFT along columns with zero padding:'); disp(X);
在这个例子中:
- 我们从一个 4x4 的幻方矩阵 A 开始。
- 然后我们使用 `fft(A, [], 2)` 计算 A 沿列的傅里叶变换,结果为 Y。
- 接下来,我们使用 `ifft(Y, n, 2)` 计算沿列具有零填充到长度 n 的逆傅里叶变换。
- 结果 X 是一个 4x8 的矩阵,其中每一行都是原始矩阵 A 中对应行的 n 点逆变换。
执行后的输出如下:
>> % Create a 2D matrix A = magic(4); % Magic square matrix disp('Original Matrix:'); disp(A); % Compute the Fourier Transform along the columns Y = fft(A, [], 2); % Compute the Inverse Fourier Transform along the columns with zero padding n = 8; % Length to pad X = ifft(Y, n, 2); % Display the original and padded matrices disp('Original Matrix after IFFT along columns with zero padding:'); disp(X); Original Matrix: 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Original Matrix after IFFT along columns with zero padding: Columns 1 through 4: 8.0000 + 0i 4.2500 + 4.7426i 1.0000 + 0i 4.2500 - 0.1464i 2.5000 + 0i 4.2500 - 1.9142i 5.5000 + 0i 4.2500 + 0.1464i 4.5000 + 0i 4.2500 + 0.9142i 3.5000 + 0i 4.2500 + 0.1464i 2.0000 + 0i 4.2500 - 3.7426i 7.0000 + 0i 4.2500 - 0.1464i Columns 5 through 8: 1.5000 + 0i 4.2500 - 3.7426i 6.5000 + 0i 4.2500 - 0.8536i 5.0000 + 0i 4.2500 + 0.9142i 4.0000 + 0i 4.2500 + 0.8536i 3.0000 + 0i 4.2500 - 1.9142i 6.0000 + 0i 4.2500 + 0.8536i 7.5000 + 0i 4.2500 + 4.7426i 0.5000 + 0i 4.2500 - 0.8536i >>
示例 4:计算具有指定对称性的逆傅里叶变换
我们的代码如下:
% Create a complex signal t = linspace(0, 1, 1000); % Time vector f = 5; % Frequency of the signal signal = exp(1i*2*pi*f*t); % Complex exponential signal % Compute the Fourier Transform Y = fft(signal); % Compute the Inverse Fourier Transform with symmetric treatment X = ifft(Y, 'symmetric'); % Plot the real part of the original and reconstructed signals subplot(2,1,1); plot(t, real(signal)); title('Original Signal (Real Part)'); xlabel('Time'); ylabel('Amplitude'); subplot(2,1,2); plot(t, real(X)); % Display real part of X title('Reconstructed Signal (Real Part)'); xlabel('Time'); ylabel('Amplitude');
- 在这个例子中,我们使用带有 'symmetric' 标志的 `ifft` 函数来指定输入信号的对称性。
- 我们首先创建一个复指数信号 signal 并计算其傅里叶变换。
- 通过使用 `ifft(Y, 'symmetric')`,我们计算具有对称处理的逆傅里叶变换,这假设输入信号是共轭对称的。
- 绘制原始信号和重建信号的实部以进行比较。
执行后我们得到的输出如下:
使用 `ifft2()` 进行二维逆傅里叶变换
使用 `ifft2()` 进行二维逆傅里叶变换是一个 MATLAB 函数,它计算二维矩阵的逆傅里叶变换。它是二维傅里叶变换的逆运算,将图像的频域表示转换回空间域。
此函数在图像处理中特别有用,用于图像重建、滤波和恢复等任务。它接收表示频域图像的二维矩阵,并返回相应的空间域图像。
语法
X = ifft2(Y) X = ifft2(Y,m,n) X = ifft2(___,symflag)
语法解释
X = ifft2(Y) - 使用快速算法计算矩阵 Y 的二维逆傅里叶变换。如果 Y 是多维数组,`ifft2` 将计算高于 2 的每个维度的二维逆变换。输出 X 与 Y 大小相同。
X = ifft2(Y,m,n) − 通过截断或用零填充 Y 来将其大小调整为 m×n 矩阵,然后再计算逆变换。输出 X 也是 m×n 的。如果 Y 是多维数组,则 ifft2 会重塑 Y 的前两个维度以匹配 m 和 n。
X = ifft2(___,symflag) − 除了任何之前的输入参数组合之外,还可以指定 Y 的对称性。例如,ifft2(Y,'symmetric') 将 Y 视为共轭对称。
让我们根据上面提到的语法,来看几个例子。
示例 1:计算二维逆傅里叶变换
我们的代码如下:
% Compute the 2D Fourier Transform Y = fft2(A); % Compute the Inverse Fourier Transform X = ifft2(Y); % Display the original and reconstructed matrices disp('Original Matrix:'); disp(A); disp('Reconstructed Matrix:'); disp(X);
- 此示例演示如何使用 ifft2() 计算矩阵 Y 的二维逆傅里叶变换。
- 我们从一个简单的 3×3 矩阵 A 开始。
- 然后,我们使用 fft2() 计算 A 的二维傅里叶变换,结果为 Y。
- 最后,我们使用 ifft2(Y) 计算逆傅里叶变换,理想情况下应该重建原始矩阵 A。
- 显示原始矩阵和重建矩阵以进行比较。
执行后,我们得到:
Original Matrix: 1 2 3 4 5 6 7 8 9 Reconstructed Matrix: 1 2 3 4 5 6 7 8 9
示例 2:调整二维逆傅里叶变换的大小
我们的代码如下:
% Create a simple 3x3 matrix A = [1 2 3; 4 5 6; 7 8 9]; % Compute the 2D Fourier Transform Y = fft2(A); % Adjust the size and compute the Inverse Fourier Transform m = 4; % Desired number of rows n = 5; % Desired number of columns X = ifft2(Y, m, n); % Display the original and adjusted-size matrices disp('Original Matrix:'); disp(A); disp('Adjusted-size Matrix:'); disp(X);
- 此示例说明如何使用 ifft2(Y,m,n) 在计算逆变换之前调整二维矩阵 Y 的大小。
- 我们从一个简单的 3×3 矩阵 A 开始。
- 我们使用 fft2() 计算 A 的二维傅里叶变换,结果为 Y。
- 然后,我们使用 ifft2(Y, m, n) 将 Y 的大小调整为 4×5 矩阵(通过用零填充),并计算逆傅里叶变换,结果为 X。
- 显示原始矩阵和调整大小后的矩阵以进行比较。
执行后,我们得到以下输出:
Original Matrix: 1 2 3 4 5 6 7 8 9 Adjusted-size Matrix: Columns 1 through 4: 0.4500 + 0i 0.9653 - 0.2010i 0.8126 - 0.0635i 1.2124 - 0.2270i 2.0853 - 0.2853i 2.6006 - 0.4863i 2.4479 - 0.3488i 2.8477 - 0.5123i 1.8000 - 0.7794i 2.3153 - 0.9804i 2.1626 - 0.8429i 2.5624 - 1.0064i 2.8647 + 1.0647i 3.3800 + 0.8637i 3.2273 + 1.0012i 3.6271 + 0.8377i Column 5: 1.0597 + 0.4915i 2.6950 + 0.2062i 2.4097 - 0.2879i 3.4744 + 1.5562i
示例 3:指定二维逆傅里叶变换的对称性
我们的代码如下:
% Create a 2D matrix with complex values A = [1+2i, 3-1i, 5+4i; -2+1i, 6-3i, 8+7i; 9-2i, 4+5i, -1-6i]; % Compute the 2D Fourier Transform Y = fft2(A); % Compute the Inverse Fourier Transform with symmetric treatment X = ifft2(Y, 'symmetric'); % Display the original and reconstructed matrices disp('Original Matrix:'); disp(A); disp('Reconstructed Matrix:'); disp(X);
- 此示例演示如何使用 ifft2(___,symflag) 在计算逆变换之前指定输入矩阵 Y 的对称性。
- 我们从一个包含复数值的 3×3 矩阵 A 开始。
- 我们使用 fft2() 计算 A 的二维傅里叶变换,结果为 Y。
- 通过使用 ifft2(Y, 'symmetric'),我们计算 Y 的逆傅里叶变换,并进行对称处理,假设 Y 是共轭对称的。
- 显示原始矩阵和重建矩阵以进行比较。
执行后,我们得到的输出是:
Original Matrix: 1.0000 + 2.0000i 3.0000 - 1.0000i 5.0000 + 4.0000i -2.0000 + 1.0000i 6.0000 - 3.0000i 8.0000 + 7.0000i 9.0000 - 2.0000i 4.0000 + 5.0000i -1.0000 - 6.0000i Reconstructed Matrix: -0.3472 5.6943 8.2717 -9.3131 7.9245 8.7698 15.3509 1.6906 -5.0415