DFT应用:频谱分辨率和频率估计

目录

一、什么是频谱分辨率

1. 关于矩形窗函数

2. 分析余弦信号频谱

3. 频谱分辨率的定义

4. 如何提高频谱分辨率

二、关于频率估计


一、什么是频谱分辨率

1. 关于矩形窗函数

当k=1时,主瓣宽度就是2x\frac{2\pi }{N},能量主要集中在主瓣部分,频谱泄露以及频谱分辨率等都与主瓣相关。

用 DFT 分析连续时间信号的频谱时,隐含对其采样后的序列利用矩形窗进行截断。比如余弦信号:频谱是两个冲激,时域上相乘,频域上就是频谱间的卷积运算(函数跟冲激做卷积,相当于是把函数直接移位到冲激上),那么就导致余弦信号的频谱在其数字角频率附近是具有一定宽度的主瓣,如下图,假设截取余弦信号的长度是M:

下面以分析一个余弦信号为例说明采样点数N(信号的采集时间)是如何影响频谱分析。

2. 分析余弦信号频谱

假设余弦信号中只有两个独立的频率分量,为f1和f1,序列长度N固定为100,FFT点数固定为1024,不断调整他们之间的距离,观察频谱。

(1) f1=10kHz,f2= 30kHz

samples=100;FFTN=1024;%信号持续点数及 FFT 点数
n=0:samples-1;
Fs=100;%采样频率(kHz)
f1=10;f2=30;%信号频率(kHz)
x=cos(2*pi*f1/Fs*n)+cos(2*pi*f2/Fs*n);
fx=fft(x,FFTN);%设定 FFT 点数为 FFTN
figure;
plot((0:FFTN/2-1)/FFTN*Fs,20*log10(abs((fx(1:FFTN/2)))),'LineWidth',2);%k换算成对应的模拟频率
grid on;
xlabel('kHz','fontsize',12);
ylabel('|X(e^j\omega)|','fontsize',12);
axis([0 50 -10 35]);

运行如下图:

可以发现,这时候,两个主瓣相隔比较远,不会相互影响(旁瓣部分有重叠,但是旁瓣部分能量少,暂时不分析,可忽略)。

(2) 保持 f1 不变,减小 f2到11KHz,使其靠近 f1

samples=100;FFTN=1024;%信号持续点数及 FFT 点数
n=0:samples-1;
Fs=100;%采样频率(kHz)
f1=10;f2=11;%信号频率(kHz)
x=cos(2*pi*f1/Fs*n)+cos(2*pi*f2/Fs*n);
fx=fft(x,FFTN);%设定 FFT 点数为 FFTN
figure;
plot((0:FFTN/2-1)/FFTN*Fs,20*log10(abs((fx(1:FFTN/2)))),'LineWidth',2);%k换算成对应的模拟频率
grid on;
xlabel('kHz','fontsize',12);
ylabel('|X(e^j\omega)|','fontsize',12);
axis([0 50 -10 35]);

可以发现,这时候两个主瓣还是没有重叠的,频谱图上还是有两个尖峰(互不干涉),如下图:

(3) 保持 f1 不变,减小 f2到10.8KHz,使其靠近 f1

samples=100;FFTN=1024;%信号持续点数及 FFT 点数
n=0:samples-1;
Fs=100;%采样频率(kHz)
f1=10;f2=10.8;%信号频率(kHz)
x=cos(2*pi*f1/Fs*n)+cos(2*pi*f2/Fs*n);
fx=fft(x,FFTN);%设定 FFT 点数为 FFTN
figure;
plot((0:FFTN/2-1)/FFTN*Fs,20*log10(abs((fx(1:FFTN/2)))),'LineWidth',2);%k换算成对应的模拟频率
grid on;
xlabel('kHz','fontsize',12);
ylabel('|X(e^j\omega)|','fontsize',12);
axis([0 50 -10 35]);

这时候,主瓣之间已经有部分重叠,如下图:

(4) 保持 f1 不变,减小 f2到10.5KHz,使其靠近 f1

samples=100;FFTN=1024;%信号持续点数及 FFT 点数
n=0:samples-1;
Fs=100;%采样频率(kHz)
f1=10;f2=10.5;%信号频率(kHz)
x=cos(2*pi*f1/Fs*n)+cos(2*pi*f2/Fs*n);
fx=fft(x,FFTN);%设定 FFT 点数为 FFTN
figure;
plot((0:FFTN/2-1)/FFTN*Fs,20*log10(abs((fx(1:FFTN/2)))),'LineWidth',2);%k换算成对应的模拟频率
grid on;
xlabel('kHz','fontsize',12);
ylabel('|X(e^j\omega)|','fontsize',12);
axis([0 50 -10 35]);

这时候已经没有两个独立的峰值了:

分析:

对单频正(余)弦信号而言,该主瓣的宽度B和序列的长度 N 满足以下关系式:

主瓣宽度是2x\frac{2\pi }{N},即B=2x\frac{Fs }{N},2pi对应的是Fs。其中 Fs 是采样频率。

当两个频率逐渐接近时,各自的主瓣对对方的影响增大。其中两个频率的间隔恰好是 B/2(比如f1 不变,减小 f2到11KHzSFT 谱中有两个峰,这时候,主瓣是互不影响的两个频率的间隔小于 B/2SFT 谱两个峰的区分逐渐模糊;直到最后,完全重合就只有一个峰了。

3. 频谱分辨率的定义

SFT 谱的频谱分辨率定义为F=\frac{Fs}{N},也是矩形窗主瓣宽度的一半。当两个频率的间隔 B/2 时,SFT 谱中两个频率才是可分的

4. 如何提高频谱分辨率

采样率固定的情况下,加大采样时间(N增加),F减小,频谱分辨率可以提高。

示例:

(5) 保持 f1 不变,减小 f2到10.5KHz,使其靠近 f1。如果保持f1和f2的值,将序列的长度N增加到150。

samples=150;FFTN=1024;%信号持续点数及 FFT 点数
n=0:samples-1;
Fs=100;%采样频率(kHz)
f1=10;f2=10.5;%信号频率(kHz)
x=cos(2*pi*f1/Fs*n)+cos(2*pi*f2/Fs*n);
fx=fft(x,FFTN);%设定 FFT 点数为 FFTN
figure;
plot((0:FFTN/2-1)/FFTN*Fs,20*log10(abs((fx(1:FFTN/2)))),'LineWidth',2);%k换算成对应的模拟频率
grid on;
xlabel('kHz','fontsize',12);
ylabel('|X(e^j\omega)|','fontsize',12);
axis([0 50 -10 40]);

谱图中,又开始分辨出两个波峰:

二、关于频率估计

计算是存在误差的,并且不同的DFT点数结果也是不同的,在频谱图上,波峰的位置并不是严格对应到单频的频率分量,而是在其附近波动。

例:假设余弦信号中有f1=20.1KHz;f2=21.5KHz;信号采样点是90,做2048个点的FFT。

samples=90;FFTN=2048;%信号持续点数及 FFT 点数
n=0:samples-1;
Fs=100;%采样频率(kHz)
f1=20.1;f2=21.5;%信号频率(kHz)
x=cos(2*pi*f1/Fs*n)+2*cos(2*pi*f2/Fs*n);
fx=fft(x,FFTN);%设定 FFT 点数为 FFTN
df=0.5;%频率搜索范围-df->df
dk=floor(df/Fs*FFTN);%与之对应的 k
k1=floor(f1/Fs*FFTN);
k2=floor(f2/Fs*FFTN);
[m,k]=max(abs(fx(k1-dk:k1+dk))); [k+k1-dk-2 (k+k1-dk-2)/FFTN*Fs]
[m,k]=max(abs(fx(k2-dk:k2+dk))); [k+k2-dk-2 (k+k2-dk-2)/FFTN*Fs]
figure;
plot((0:FFTN/2-1)/FFTN*Fs,20*log10((abs((fx(1:FFTN/2))))),'b','LineWidth',2);grid on;
xlabel('kHz','fontsize',12);ylabel('|X(e^j\omega)|','fontsize',12);axis([0 50 -10 40]);

频谱图如下:

局部搜索极值,求出其对应的k,并不是严格等于原来的k值,用求出的k再去计算对应的模拟频率,和原模拟频率是有偏差的。

结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE3状态管理库:Pinia的安装与使用

一、简介 Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。 二、安装 npm install pinia 在main.js中创建实例 import { createApp } from vue import { createPinia } from pinia import App from ./App.vueconst pinia createPinia() const a…

【C语言数据结构】排序

1.排序的概念 在深入研究各个排序算法之前,首先,我们要对排序有个大概的了解,即与排序相关的一些概念 Q:什么是排序? A:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小…

mybatis-插件使用手册

mybatis-插件详解 基本原理 使用了JDK动态代理&#xff0c;基于 interceptor 实现 public class Plugin implements InvocationHandler {private final Object target;private final Interceptor interceptor;private final Map<Class<?>, Set<Method>> …

如何实现跨标签页通讯

什么是跨标签页通讯 同一浏览器&#xff0c;可以打开多个标签页&#xff0c;跨标签页通讯就是&#xff0c;一个标签页能够发消息给另一标签页。 有哪些实现方案 localStorage &#xff08;window.onstorage事件监听&#xff09;BroadcastChannel&#xff08;广播&#xff09…

【积累】list

List 一个list转为二维数组&#xff0c;五个一组 List<List<String>> lists Lists.partition(list,5);删除list中的元素 删除下标以及定位到遍历的位置 for(int i 0, len list.size(); i < len; i){ if(list.get(i) 1){ list.remove(i); len--;i--;} …

C语言经典算法-9

文章目录 其他经典例题跳转链接46.稀疏矩阵47.多维矩阵转一维矩阵48.上三角、下三角、对称矩阵49.奇数魔方阵50.4N 魔方阵51.2(2N1) 魔方阵 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官&#xff08;一&#xff09;6.…

pytest框架的封装以及用例管理框架

pytest框架的封装以及用例管理框架 公共类统一封装requests_util02.pytest_api01.py 自动化测试的基础自动化测试的介入点自动化测试和手工测试占比自动化实施过程 pytest元素定位元素定位查找元素定位的方式通过 ID 定位通过 Name 定位通过 Class Name 定位通过 Tag Name 定位…

唯众物联网安装调试员实训平台物联网一体化教学实训室项目交付山东技师学院

近日&#xff0c;山东技师学院物联网安装调试员实训平台及物联网一体化教学实训室采购项目已顺利完成交付并投入使用&#xff0c;标志着学院在物联网技术教学与实践应用方面迈出了坚实的一步。 山东技师学院作为国内知名的技师培养摇篮&#xff0c;一直以来致力于为社会培养高…

windows11 openssh服务开启;第三方ping不通局域网windows电脑;ssh连接内部ubuntu系统

参考&#xff1a;https://blog.csdn.net/2301_77554343/article/details/134328867 1、windows11 openssh开启 1&#xff09;我这边可选功能在设置-系统里面&#xff1b;其他网上看在应用下&#xff1b;添加可选openssh服务器安装 2&#xff09;安装后打开&#xff0c;管理员…

光伏户用开发技巧

一、开发户用光伏的技巧有哪些&#xff1f; 1.项目可行性分析 电站开发前需要先进行可行性分析&#xff0c;从当地的气象条件、电网的接入能力、政策环境等方便分析。可以自行收集数据分析&#xff0c;也可以邀请专业机构进行评估。 2.选址和电站设计 光伏电站的选址&#…

agent利用知识来做规划:《KnowAgent: Knowledge-Augmented Planning for LLM-Based Agents》笔记

文章目录 简介KnowAgent思路准备知识Action Knowledge的定义Planning Path Generation with Action KnowledgePlanning Path Refinement via Knowledgeable Self-LearningKnowAgent的实验结果 总结参考资料 简介 《KnowAgent: Knowledge-Augmented Planning for LLM-Based Age…

Leetcode 3093. Longest Common Suffix Queries

Leetcode 3093. Longest Common Suffix Queries 1. 解题思路2. 代码实现 题目链接&#xff1a;3093. Longest Common Suffix Queries 1. 解题思路 这一题的话思路上其实就是一个Trie树的变体。 对于每一个wordsQuery当中的word&#xff0c;我们要在wordsContainer当中获取答…

Redis 教程系列之Redis 简介(一)

Redis&#xff1a; Remote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value…

Spring Cloud四:微服务治理与安全

Spring Cloud一&#xff1a;Spring Cloud 简介 Spring Cloud二&#xff1a;核心组件解析 Spring Cloud三&#xff1a;API网关深入探索与实战应用 文章目录 一、服务注册中心的选型与最佳实践1. 主流服务注册中心概述2. 最佳实践建议(1)、选型建议(2)、高可用性与稳定性1). 高可…

Linux安装iptables 防火墙

安装iptables Ubuntu&#xff1a; sudo apt-get update sudo apt-get install iptables Centos&#xff1a; sudo yum install iptables 开启&#xff1a;service iptables start 关闭&#xff1a;service iptables stop dpkg -l | grep iptables --查看iptables 是否安装

北京密云广电许可证办理要求与流程

北京密云广电许可证办理攻略&#xff1a;要求与流程全解析 一、引言 各位老板好&#xff0c;我是经典世纪胡云帅&#xff0c;随着广播电视行业的快速发展&#xff0c;越来越多的企业和个人希望进入这一领域&#xff0c;开展节目制作、传播等业务。而在北京密云&#xff0c;这一…

二进制王国(蓝桥杯备赛)【sort/cmp的灵活应用】

二进制王国 题目链接 https://www.lanqiao.cn/problems/17035/learning/?contest_id177 题目描述 思路 这里就要灵活理解字典序排列&#xff0c;虽然string内置可以直接比较字符串字典序&#xff0c;但是在拼接时比较特殊&#xff0c;比如 11的字典序小于110&#xff0c;但…

HTTP --- 下

目录 1. HTTP请求方式 1.1. HTML 表单 1.2. GET && POST方法 1.2.1. 用 GET 方法提交表单数据 1.2.2. 用 POST 方法提交表单数据 1.2.3. 总结 1.3. 其他方法 2. HTTP的状态码 2.1. 重定向 2.1.1. 临时重定向 && 永久重定向 2.1.2. 302 &&…

【Vue3笔记02】Vue3项目工程中使用axios网络请求库实现前后端数据通信

这篇文章,主要介绍Vue3项目工程中如何使用axios网络请求库实现前后端数据通信【知识星球】。 目录 一、axios依赖 1.1、下载axios依赖 1.2、创建axios工具类

【MySQL系列】Public Key Retrieval is not allowed

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…