离散傅里叶变换MATLAB实现

2023-11-11


要求

有一单频信号y(t)=sin(2πft),其中f=100Hz,和f=500Hz,分别用DFT求y(t)的谱。
 抽样频率fs以不发生混叠
 记录长度T0取整数周期
 用stem语句绘出幅度谱,横坐标为模拟频率f,用plot画出时域波形


一、连续函数抽样

f=100
fs=1000;                
dt=1/fs;               
T=0:dt:0.05-dt;            
xn=sin(2*pi*f*T);
f=500
fs=8000;                
dt=1/fs;               
T=0:dt:0.01-dt;            
xn=sin(2*pi*f*T);

二、抽样长度确定

由奈奎斯特抽样定理,fs≥2f,
即f=100时,fs≥200,取fs=400;
f=500时,fs≥1000,取fs=2000

三、DFT

1、使用一次循环实现DFT

clear
f=100;                
t=(0:0.001:0.1);      
x=sin(2*pi*f*t);  

t1=clock;
fs=1000;                
dt=1/fs;               
T=0:dt:0.1-dt;            
xn=sin(2*pi*f*T);
N=length(xn);
WN=exp(-1i.*2.*pi./N);    
xk=zeros(1,N);
xk1=zeros(1,N);
k=[0:N-1];
 for n=0:1:N-1
   xk(n+1)=xn*WN.^(n.*k');  %此处下标一定得从1开始,因为matlab的下标是从1开始的
 end    
t2=clock;
etime(t2,t1)

subplot(2,1,1)
plot(T,xn)
subplot(2,1,2)
stem(k,abs(xk))

运行结果f=500

2、使用矩阵实现DFT

function xk=dt_2(xn);
N=length(xn);

WN=exp(-j*2*pi/N);   
n=0:1:N-1;     %定义一个一维矩阵,即行向量,从0到N-1
k=0:1:N-1;
nk=k'*n;      %行向量k变换为列向量 乘上 行向量n ,得到一个N x N的矩阵
WNnk=WN.^(nk);      %做幂运算后的参数仍为一个 N x N的系数矩阵
xk=xn*WNnk;       %行向量 乘以  N x N的系数矩阵 即为DFT变换后的矩阵

总结

1、n的取值范围是[0,N-1],有0时不应该包括N,否则会得到不一样的结果(如图)。可以看到因为取点不准确造成频谱泄露。
错误示例
2、在连续信号进行傅里叶频域变换后,正弦信号的频域只有一个冲击,为w。
对离散信号而言,进行离散傅里叶变换以后,由离散傅里叶变换的共轭对称性可以推出时域实序列在频域为共轭对称序列,幅频函数为偶对称。同时可以将傅里叶频域转换到z域后用z反变换快速求出两个冲击信号和。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

离散傅里叶变换MATLAB实现 的相关文章

  • 继续在 Matlab 中一遍又一遍地播放声音?

    我正在尝试创建一个 MATLAB 程序来每隔几分钟一遍又一遍地播放声音 现在我将其设置为每隔几秒播放一次 只是为了消除系统中的一些错误 但是 当我的程序尝试重播声音时 我收到此错误 Error using gt audioplayer au
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • 不等间隔时间序列的移动平均线

    我有一个证券交易所股票价格的数据集 时间 价格 但数据点之间的间隔并不相等 从 1 到 2 分钟不等 在这种情况下计算移动平均值的最佳实践是什么 如何在Matlab中实现呢 我倾向于认为 点的权重应该取决于自上一个点以来的最后时间间隔 Ma
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • MATLAB:具有复数的 printmat

    我想使用 MATLAB 的printmat显示带有标签的矩阵 但这不适用于复数 N 5 x rand N 1 y rand N 1 z x 1i y printmat x y z fftdemo N 1 2 3 4 5 x y x iy O
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL

随机推荐

  • 求出1~N范围中所有的素数

    判断是否为素数 public static boolean isPrime int n int sqrt int Math sqrt n int i for i 2 i lt sqrt i if n i 0 break if i gt sq
  • 小程序瀑布流布局

    list wxml列表
  • Java的深浅拷贝机制

    Java的深浅拷贝机制 我们先理解一下深浅拷贝的概念 1 浅拷贝 Java在进行对象拷贝的过程中 对于他的成员变量进行拷贝 如果是基本数据类型 就会直接拷贝他的值 如果是引用类型 则会拷贝他的引用地址 而不会拷贝对象本身 2 深拷贝 Jav
  • Windows 10 和 Windows 11 有什么区别?

    Windows 10 和 Windows 11 有什么区别 Windows 11 具有 Windows 10 的全部功能和安全性 同时具有经重新设计而焕然一新的外观 它还自带一些新的工具 声音和应用 所有细节面面俱到 颜值 功能与安全性集于
  • Python字符串转为字典方法大全

    方法一 通过内置函数eval 1 2 3 4 5 6 7 8 9 10 11 12 13 str info name test age 18 dict info eval str info print string info type is
  • 【MYSQL】第一篇 Mysql如何处理百万级别的数据

    1 应尽量避免在 where子句中使用 或 lt gt 操作符 否则将引擎放弃使用索引而进行全表扫描 2 应尽量避免在 where子句中对字段进行 null值判断 否则将导致引擎放弃使用索引而进行全表扫描 3 尽量避免在 where子句中使
  • Jmeter性能测试 —— TPS拐点寻找

    寻找TPS性能拐点1 准备脚本 在本地电脑调试Jmeter压测脚本 上传到压测机Jmeter所在的服务器 2 执行压力测试 执行压测脚本 jmeter n t xianchengzuse jmx 记录业务压测数据 3 监控服务器性能指标 监
  • MySQL____高级查询、联合查询

    文章目录 一 聚合查询 1 count查询 总数统计 1 1count 用法1 1 2 count 用法2 1 3count 用法3 1 4 注意事项 2 SUM函数 总和统计 3 AVG函数 4 MAX函数 5 MIN函数 二 ifnul
  • 如何统计iOS产品不同渠道的下载量?

    一 前言 在开发过程中 Android可能会打出来很多的包 用于标识不同的商店下载量 原来觉得苹果只有一个商店 AppStore 如何做出不同来源的统计呢 本篇文章就是告诉大家如何做不同渠道来源统计 二 正文 先看一下苹果自家统计到的数据
  • unity局域网开关机步骤一-网络唤醒-设置电脑使允许局域网内其他电脑控制

    被控制端主机的设置 一 Bois界面网络唤醒的设置 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img TR2xwyAx 1593577482582 htts img blog csdnimg cn 20200701
  • 详细及易读懂的 大津法(OTSU)原理 和 比opencv自带更快的算法实现

    OTSU算法原理简述 最大类间方差是由日本学者大津 Nobuyuki Otsu 于1979年提出 是一种自适应的阈值确定方法 算法假设图像像素能够根据阈值 被分成背景 background 和目标 objects 两部分 然后 计算该最佳阈
  • C++之拷贝构造、拷贝赋值

    拷贝构造 class Stu public int no string name int age public Stu int no 10086 string name jin int age 18 no no name name age
  • springboot+mybatis-plus+双数据源

    springboot mybaits plus mybatis plus的双数据源和逆向工程的配置整合 废话不多说直接开始干 mybatis plus逆向工程的配置 public class CodeGenerator Project pa
  • JVM、GC和常用命令

    这是11月份的一个分享 借着组内分享的机会 重新梳理了一遍JVM的一些基本概念和学习资料 在这个PPT中 关于G1的部分比较粗略 最近正在恶补G1的知识 后面可能会单独整理一篇分享出来 需要原件的 可以在我的公众号 duqi Voice 后
  • 【头歌】Linux Linux从入门到精通

    https www educoder net paths 43 第1关 Linux初体验 bin bash 在以下部分写出完成任务的命令 begin cd ls a end 第2关 Linux常用命令 bin bash 在以下部分写出完成任
  • linux ping命令参数说明及使用

    一 参数说明 在控制台输入ping会有参数说明 BusyBox v1 22 1 2019 07 23 15 07 27 CST multi call binary Usage ping OPTIONS HOST Send ICMP ECHO
  • 2018 年,关于深度学习的 10 个预测

    我有一种预感 2018年 所有的事情都会发生巨变 我们在2017年看到的深度学习取得的惊人突破将会以一种强大的方式延续到2018年 2017年在深度学习领域的研究成果将会应用于日常的软件应用中 下面是我对2018年深度学习的10个预测 1
  • 抓取chrome所有版本密码

    文章首发先知社区 https xz aliyun com t 9752 工具已上传到github https github com SD XD Catch Browser 谷歌浏览器存储密码的方式 在使用谷歌浏览器时 如果我们输入某个网站的
  • python 无头模式 绕过检测_python爬虫反反爬虫有绝技,轻松绕开百度人机验证!...

    你可能已经了解到了无头浏览器的作用以及使用的方法 那么本篇文章就让我们一起用无头浏览器做点事情 是的你没有看错 我们要 搞 的对象就是百度指数这个网站 不知道你平时是否会应用到这里面的数据呢 今天的主要目标就是使用无头浏览器登录百度指数网站
  • 离散傅里叶变换MATLAB实现

    文章目录 要求 一 连续函数抽样 二 抽样长度确定 三 DFT 1 使用一次循环实现DFT 2 使用矩阵实现DFT 总结 要求 有一单频信号y t sin 2 ft 其中f 100Hz 和f 500Hz 分别用DFT求y t 的谱 抽样频率