Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号
文章目录
- 1. 定义
- 2. 变换和处理
- 3. 函数
- 4. 实例演示
- 例1:单频正弦信号(整数周期采样)
- 例2:含有直流分量的单频正弦信号
- 例3:正弦复合信号
- 例4:含有随机干扰的正弦信号
- 例5:实际案例
- 5. 联系作者
1. 定义
上一篇研究了Matlab如何进行离散傅里叶变换DFT(快速傅里叶变换FFT)进行频谱分析。工程上我们还会遇到这样的问题:获取了信号的频谱,希望从信号的频谱来恢复时域信号。这一篇来研究如何进行利用离散傅里叶逆变换(iDFT)从频谱中恢复时域信号。
离散傅里叶逆变换 (iDFT)的定义为:
x(n)=iDFT[X(k)]=1N∑k=0N−1X(k)ej2πNnkx(n) = {\rm{iDFT}}[X(k)] = \frac{1}{N}\sum\limits_{k = 0}^{N - 1} {X(k){e^{j\frac{{2\pi }}{N}nk}}}x(n)=iDFT[X(k)]=N1k=0∑N−1X(k)ejN2πnk, 0≤n≤N−10 \le n \le N-10≤n≤N−1
式中,x(n)x(n)x(n)为时域离散采样序列(通常为实数序列),NNN为时域离散采样序列x(n)x(n)x(n)的长度,X(k)X(k)X(k)为频域离散采样序列(通常为复数序列)。
也存在快速傅里叶逆变换(iFFT)来实现iDFT的快速算法,其主要作用也是减小计算量、节约计算资源、便于在线计算。
2. 变换和处理
Matlab软件自带ifft函数实现快速傅里叶逆变换算法,与上一篇DFT变换一样,要想从频谱恢复时域信号,也需要解决以下问题(建议与上一篇对应起来看):
a) 幅值变换:真实频谱幅值乘以N/2N/2N/2得到频谱序列X(k)X(k)X(k)的幅值∣X(k)∣|X(k)|∣X(k)∣;
b) 频谱延拓:真实频谱的频率范围为0−fs/20-f_s/20−fs/2,而参与iDFT变换的频谱序列X(k)X(k)X(k)为两部分共轭复数序列组成,因此需要对物理频谱进行延拓得到X(k)X(k)X(k)。频谱延拓的方案上图所示。
c) 直流信号的处理:直流信号幅值乘以2,再进行幅值变换乘以N/2N/2N/2,得到频谱序列X(k)X(k)X(k)的直流分量∣X(0)∣|X(0)|∣X(0)∣。
3. 函数
作者在Matlab软件自带ifft函数的基础上,使用Matlab开发了函数iDFT.m,通过函数来实现上述幅值变换、频谱延拓和直流信号的处理,能够直接从从频谱恢复时域信号,函数简单、易用、通用性好。
function [xn,t] = iDFT(X_m,X_phi,ts,drawflag)
% [xn,t] = iDFT(X_m,X_phi,ts) 离散序列的快速傅里叶逆变换,频域转换为时域信号
% 输入 X_m为幅值向量
% X_phi为相位向量,单位为°
% ts为序列的采样时间/s
% drawflag为绘图标识位,取0时不绘图,其余非0值时绘图,默认为绘图
% 输出 xn为离散序列向量
% t为与xn对应的时间向量
% 注意计算出来的0频分量在进行ifft计算时,幅值应乘以2
% By ZFS@wust 2020
% 获取更多Matlab/Simulink原创资料和程序,清关注微信公众号:Matlab Fans
4. 实例演示
下面结合实例进行演示和分析。
例1:单频正弦信号(整数周期采样)
%% Eg 1 单频正弦信号
ts = 0.01;
t = 0:ts:1;
A = 1.5; % 幅值
f = 2; % 频率
w = 2*pi*f; % 角频率
phi = pi/3; % 初始相位
x = A*cos(w*t+phi); % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')
结果:
例2:含有直流分量的单频正弦信号
%% Eg 2 含有直流分量的单频正弦信号
ts = 0.01;
t = 0:ts:1;
A = 1.5; % 幅值
f = 5; % 频率
w = 2*pi*f; % 角频率
phi = pi/6; % 初始相位
x = 0.5 + A*cos(w*t+phi); % 时域信号,带有直流偏移0.5
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')
结果:
例3:正弦复合信号
%% Eg 3 正弦复合信号
ts = 0.01;
t = 0:ts:2;
A = [1.5 1 0.5 0.2]; % 幅值
f = [3 6 9 15]; % 频率
w = 2*pi*f; % 角频率
phi = (1:4)*pi/4; % 初始相位
x = -0.5 + A(1)*cos(w(1)*t+phi(1)) + A(2)*cos(w(2)*t+phi(2)) + A(3)*cos(w(3)*t+phi(3)) + A(4)*cos(w(4)*t+phi(4)); % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')
结果:
例4:含有随机干扰的正弦信号
%% Eg 4 含有随机干扰的正弦信号
ts = 0.01;
t = 0:ts:2;
A = [1 0.5]; % 幅值
f = [3 10]; % 频率
w = 2*pi*f; % 角频率
phi = (1:2)*pi/3; % 初始相位
x = A(1)*cos(w(1)*t+phi(1)) + A(2)*cos(w(2)*t+phi(2)) + 0.8*(rand(size(t))-0.5); % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')
结果:
例5:实际案例
%% Eg 5 实际案例
load data
ts = 0.001;
x = Jsd;
t = [0:length(x)-1]*ts;
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);
% iDFT逆变换将频域转换到时域,并绘制时域图
[xn,t2] = iDFT(X_m,X_phi,ts);
hold on
plot(t,x,'r--')
legend('恢复的时域信号','原始时域信号')
结果:
上述各例中,通过iDFT恢复的时域信号与原始信号完全重合,说明利用离散傅里叶逆变换(iDFT)可以从频谱恢复时域信号。
5. 联系作者
有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。
更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans
源程序下载:
1. csdn资源: Matlab如何进行离散傅里叶变换DFT(快速傅里叶变换FFT)进行频谱分析
2. 扫码关注微信公众号Matlab Fans,回复BK07获取百度网盘下载链接。
Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号相关推荐
- Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析
文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...
- matlab离散傅里叶逆变换,手动实现离散傅里叶正变换与逆变换(程序+例子)
前言 实际野外采集到的信号都是有一定时间间隔的,因为本文主要关注于"离散傅里叶变换(DFT)".另外,本文主要关注的是"如何使用"DFT这样一个工具(公式的使用 ...
- [EE261学习笔记] 13.离散傅里叶逆变换及离散傅里叶变换的一些性质
我们先回忆一下DFT F‾[m]=Ff‾[m]=∑k=0N−1f‾[k]e−2πimkN(1)\underline{F}[m] = \underline{\mathscr{F}f}[m] = \sum ...
- Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)
Matlab绘图基础--利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴) - 司徒鲜生 - 博客园 Matlab中axes函数解析_ljh0302的博客-CSDN博客_ ...
- 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...
- 基于matlab的绘图设计,matlab课程设计---利用MATLAB仿真软件进行绘图
matlab课程设计---利用MATLAB仿真软件进行绘图 课程设计任务书课程设计任务书 题题 目目 利用利用 MATLABMATLAB 仿真软件进行绘图仿真软件进行绘图 初始条件初始条件 仿真软件 ...
- 六、C++离散傅里叶逆变换
C++离散傅里叶逆变换 一.序言: 该教程承接上文的离散傅里叶变换,用于进行离散傅里叶逆变换. 二.设计目标 对复数数组进行离散傅里叶逆变换,并生成可供使用的图像类. 三.详细步骤 输入:经傅里叶变换 ...
- OPENCV计算机视觉图像处理频域傅里叶 DFT 变换低通滤波逆变换IDFT
OpenCV计算机视觉图像频域傅里叶 DFT 变换低通滤波逆变换IDFT 实验室做图像的,经常用到这部分,为了检测屏幕,看过好多博客,试用过许多代码,这个算是我找到的比较好用的,也容易改. 傅里叶变换 ...
- 【傅里叶变换】离散傅里叶正变换和离散傅里叶逆变换
离散傅里叶正变换: 表面上看是对时域采样数据进行 N点离散傅里叶正变换, 实质上求的是被采样信号周期性拓展得到的周期信号的傅里叶系数再乘以点数 N. 离散傅里叶逆变换: 表面上看是对频域采样数据 X( ...
最新文章
- shell基础:环境变量
- textarea标签中的换行与空格问题
- wp网站链接不带html,解决WordPress网站带与不带WWW网址跳转问题
- python发邮件给女朋友代码_python实现邮件发送完整代码(带附件发送方式)
- 单选按钮:after_选择的按钮:将ToggleButtons用作单选按钮
- vector 、map 、iterator 之学习笔记
- 蚂蚁金服王旭:开源的意义是把社区往前推进一步
- android api接口文档,API 接口文档
- 32 位的有符号整数_leetcode 7 整数反转
- 天齐锂业高管减持后定增160亿 收到深交所关注函
- 试点高校网络教育部分公共基础课统一考试计算机应用基础答案,2019年6月试点高校网络教育部分公共基础课统一考试顺利结束...
- Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。
- 文本分类-TextCNN
- HDOJ 2084 数塔 简单解题报告
- C语言课程设计学生考勤管理系统
- 简单快速获取思维导图
- FW150U构建无线局域网【模拟AP功能设置指南】
- Spring Boot(八)——Shiro+FreeMarker
- i78700k配什么显卡好_最新适合搭配i7-8700的显卡推荐 i7 8700配什么显卡好
- RK3399 hi3559A 平台离线语音识别、合成、翻译、声纹