我正在做一个小项目,偶然发现了一些我还无法理解的东西。我正在学习认知科学,没有DSP知识背景,只是从我在互联网上找到的东西学习。我有一个 46380x1 双数组,其中包含我的信号。我想像这样画出一个很好的频谱图:
%%signal = %%too long to put here, 46380x1 double array
winsize = ceil(length(signal)/10); %% =4639
win = rectwin(winsize);
shift = ceil(length(signal)/150); %% =310
nfft = winsize;
srate = 78;
spectrogram(signal, win, winsize-shift, nfft, srate, 'yaxis');
ylim([0.015 2]);
它工作正常,并显示:
但是,如果我想对窗口信号进行零填充(Matlab 文档说,增加 nfft 会做到这一点),输出会在其中包含这些条纹,无论我按什么因素缩放“winsize”,它总是会显示某种频谱图中的失真。例如,我nfft=round(1.5*winsize)
在制作频谱图之前设置,其输出变为:
为什么会这样?我知道我不能通过零填充来增加信号中的信息量,但如果不是那么像素化,它可能对人眼来说更具可读性,这就是我尝试在这里应用零填充的原因。你能帮忙吗,我应该在没有这些线路的情况下尝试实现这一目标吗?
无论如何,如果我查看从 0hz 开始的轨迹,在整个时间轴上,频谱图的输出分量非常大,频率非常接近于零。view(-135,65); ylim([0 2]);
这是为什么?
提前致谢!