dft频谱泄漏matlab,对于DFT频谱泄漏问题的研究
问题简介:
对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱。但是,在实际利用DFT求它的频谱时,对时域做了截断,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱线出现,它们可以理解为是从fs频率上“泄漏”出去的,这种现象称 为频谱“泄漏”。
不发生泄露的条件:F_c=(mF_s)/N (m为整数,F_c为信号频率,F_s为采样频率)
现象分析:
以7K采样为例:
DFT本质是以一个离散的窗函数对信号进行取样,也就是在时域相乘的过程。时域相乘又等价于频域的卷积,并对频域的幅值产生影响,在这里只需要讨论频谱形态而不必讨论幅值,由于本次采样周期为500点,我们画出一个500点矩形序列的频谱图
可以看出每个频域的每个小峰宽度都为14Hz,理论上说他们的间隔应为
Fs/N=7000/500=14
与理论相符合
下一步是与信号的频谱进行卷积,由于原信号的理论频谱为在F_c及〖-F〗_c的冲激信号,我们只要将目前的频谱向左向右移动F_c即可,为了方便,只研究右半块。
时域采样率为F_s那么在频域中就以F_s/N=7000/500=14Hz,从零点开始等间隔取样,而调制过的信号每个小峰的宽度也为F_s/N=7000/500=14Hz,主峰的宽度为小峰宽度的两倍,也就是28Hz,此时在主峰中会以357*14=4998Hz及358*14=5012Hz进行采样,并且在小峰中也会在峰体中采样,从而显出原信号不存在的频率。
小峰宽度与频域采样宽度相等这就表明每个频域取样点可以正好落在每个小峰的零点上,而落在最高峰的中间,完美显示出原信号的频谱分布,此时采样信号频率应满足:
F_c=(mF_s)/N (m为整数)
如果采样频率不满足这一公式,那么频率域采样点就会处于各个旁瓣中,从而在频域中表现出原信号不存在的频率,这些旁瓣的幅值与原信号频率距离成反比,越靠近信号频率造成的谐波振幅越大。
改进措施
增大FFT变换的点数N。 通过增大N,一方面提高频域分辨率,更大可能满足F=m*Fs/N, 另一方面,压缩采样信号的瓣宽,降低泄露水平。
下图为以不同采样点数得出的频谱:
可以明显看出500点采样比64点采样效果好很多。
选用合适的窗函数。根据不同的需求来选择不同特性的窗函数,主瓣宽但旁瓣衰减大的窗或是主瓣窄但旁瓣相对衰减小的窗。
选取7K, 64点采样的频域信号进行测试,选取常用的Hanning窗:
可以看出虽然加窗可以很好地抑制旁瓣,但对于主瓣的频率却不能很好地优化,我也试了一下其他的加窗函数,都不太理想,对于本题测试的窄带信号,主瓣的信号尤为重要,只能采用增加取样点的方法来凸显主瓣信号。、
总结
要注意理论与实际的差异,并善于思考其中的原因
善于运用优质网络资源
参考文档:https://www.ni.com/white-paper/4844/zhs/
附c++采样程序:
#include
#include
#include
#include
using namespace std;
void main()
{
double Fs_7 =7,Fs_10=10,Fs_11=11;//K
int i;
int const dn = 10;//延时滤波器长度
int const s_n =500 ; //序列长度
double xn[500];
for (i = 0; i
{
xn[i] =sin(2 * 3.1416 * 5 / Fs_7 * i);
}
ofstream SaveFile_a("xn_7.txt");
for (i = 0; i
SaveFile_a << " " << xn[i] << endl;
SaveFile_a.close();
for (i = 0; i
{
xn[i] = sin(2 * 3.1416 * 5 / Fs_10 * i);
}
ofstream SaveFile_a1("xn_10.txt");
for (i = 0; i
SaveFile_a1 << " " << xn[i] << endl;
SaveFile_a1.close();
for (i = 0; i
{
xn[i] = sin(2 * 3.1416 * 5 / Fs_11 * i);
}
ofstream SaveFile_a1("xn_11.txt");
for (i = 0; i
SaveFile_a1 << " " << xn[i] << endl;
SaveFile_a1.close();
}
Matlab程序
显示采样过信号的频谱:
xn_f=fopen('xn_7.txt','r');
[xn,count]=fscanf(xn_f,'%f');
fclose(xn_f);
Fs=7000;
x=xn;
x=x.*hamming(64);%加窗
x = x(:,1);
x = x';
N = length(x);%
t = (0:N-1)/Fs;%
y = fft(x);
f = Fs/N*(0:round(N/2)-1);
stem(f,abs(y(1:round(N/2))));
xlabel('Frequency / (s)');ylabel('Amplitude');
title('7K²ÉÑùµÄƵÆ×');
grid;
显示采样矩形序列频谱:
Fs=7000;
x=boxcar(500);%生成矩形序列
x = x(:,1);
x = x';
N = length(x);
y = fft(x,1000);
y=circshift(y,143,2);
y=abs(y)/10;
f1 = Fs/length(y)*(0:length(y)-1);
plot(f1,y);
xlabel('Frequency / (s)');ylabel('Amplitude');
title('ÐźŵÄƵÆ×');
grid;
dft频谱泄漏matlab,对于DFT频谱泄漏问题的研究相关推荐
- matlab的dft谱分析,[转载]Matlab中DFT在连续信号谱分析中的应用
本来是想用Matlab做通信课的模拟调制分析的,结果弄一个时频变换就吭哧了两三天时间,把原来的老底信号系统.DSP的书又翻出来看,总算稀里糊涂画出来了..... 所谓信号的谱分析,就是时频域转换,变成 ...
- 频谱扩展 matlab,语音信号频谱扩展
% % pr10_3_1 clear all; clc; close all; filedir=[]; % 设置路径 filename='col ...
- matlab的dft谱分析,数字信号处理基于matlab(用DFT作谱分析,窗函数的设计)
数字信号处理基于matlab(用DFT作谱分析,窗函数的设计) 1实验一用DFT作谱分析X11111X212344321N108X3COSN1PI/4N208X4SINN2PI/8FIGURESUBP ...
- matlab做dft后绘图,Matlab实现DFT
前言: 摘自: http://zhidao.baidu.com/link?url=lB3CS6qxlLIy7EuC8-X0MGNcFndC4ntrfXHdzdk5Wo_oJuRut8iHXoaOTEw ...
- 【 MATLAB 】【 MATLAB 】DFT的性质讨论(三)序列的循环卷积及其 MATLAB 实现
这篇博文要将的是循环卷积,循环卷积和线性卷积还是有很大区别的,我们都知道,两个N点序列之间的线性卷积会得出一个更长的序列,不得不再一次要将区间限制在 0 <= n <= N -1.因此代替 ...
- 【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(频域方法)
上篇博文:[ MATLAB ]DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(时域方法) 提到了对序列x(n)做循环移位后的DFT形式为: 上篇博文已经讨论过了第一种实现循环移位的方法, ...
- 【 MATLAB 】DFT性质讨论(一)线性、循环反转、共轭与实序列的对称性的MATLAB实现
上篇博文通过在理论上讨论了DFT的三个性质:[ MATLAB ]DFT性质讨论(一)线性.循环反转与共轭 分别讨论: 一.线性 给出一个例子,给出x1和x2,x3 = 0.3*x1+0.8*x2; 之 ...
- 【频谱分配】基于频谱空洞预留算法的频谱分配算法的matlab仿真
1.软件版本 MATLAB2013a 2.本算法理论知识 基于概率切换和最小化概率切换的频谱切换算法,由于过多的考虑了资源的合理利用,使得次用户的不切换概率并大于等于的情况,从而导致对应的次用户的服务 ...
- matlab画2fsk频谱,2fsk信号调制解调频谱的matlab仿真
2fsk信号调制解调频谱的matlab仿真 2FSK信号的调制解调与频谱绘制的matlab仿真 a=randint(1,16); t=0.0001:0.001:1; inisig=a(ceil(t./ ...
- matlab相关性分析频谱_利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]
<利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]>由会员分享,可在线阅读,更多相关<利用Matlab绘制正弦信号的频谱图并做相关分析[共6页](6页珍藏版)>请在人 ...
最新文章
- 嵌入式系统学习笔记之五-- uboot常用命令 概述
- 2021年春季学期-信号与系统-第三次作业参考答案-第六道题
- org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner
- HTML5常用标签~
- Ubuntu下安装arm-linux-gnueabi-xxx编译器【转】
- 6折入股蚂蚁金服?巨人网络如此回应
- 整天做办公室的我们要注意饮食啊
- 计算机系统的优化具体操作,win7系统优化提升低配置电脑运行速度的详细技巧...
- 功夫小子实践开发-基本工具类的分析和实现
- 提升Windows xp系统运行速度的九大技巧
- Hierachy Viewer 使用 monitor命令
- matlab演示波粒二象性,MATLAB实验电子波动性的Matlab仿真
- 谷歌浏览器部分iframe页面无法打开,跨域问题
- 如何用Sonic云真机打王者
- 【Prefix-Tuning】Fine-tuning过时啦,NLG生成任务如何Tuning?
- logback彩色字符编码说明
- docker-compose环境变量
- Romi Robot Kit (for FIRST) 快速入门指南
- c语言程序设计哈尔滨,2017春C语言程序设计 上(哈尔滨金融学院)
- 第一课——进制转换学习实例
热门文章
- JQuery视频总结
- 简单用Python+OpenCv实现AI人脸识别--(4)-训练人脸识别模型
- (原)使用ass字幕文件通过ffmpeg给视频添加字幕的一些研究
- 统计学习方法第二版pdf_notability笔记pdf版乱码解决方法
- 高速信号的预加重(Pre-emphasis)和去加重(De-emphasis)
- c语言12 345 6789,c语言知识点
- [SUCTF 2019]EasyWeb
- linux卸载bzip2,bzip2命令_Linux bzip2命令:压缩和解压文件(.bz2文件)
- 牛人搜集的常用的资源类网站及68个各类资源网站汇总
- 电脑散热风扇轴承分类