对频率时变的信号使用fft函数的问题

代码以及plot的结果如图:

创建了一个在0-5s内频率从40到45线性变化的正弦信号,并取窗口为3s到4s,对其用fft进行频谱分析

问题:为什么fft出来的结果会大于45呀?恳求懂的兄弟给我解答一下:'(

img

img

---------------------------------------------------------------------23.08.02上午更新-----------------------------------------
另附了两张图,分别是只改变f = 30.+t 和 f = 35.+t 时的plot图,可以看到,fft函数plot出来的频率都比实际的频率高同一个数,这是为什么呢?(在信号之后加上不同的相位也无差别)

img

img

---------------------------------------------------------------------23.08.03上午更新-----------------------------------------
就算是减小了窗口大小,还是无济于事,为什么呢,理论上减小窗口大小,所包含的频率成分就更少了,应该得到更精确的频谱,为什么还是会和预想的不一样呢

---------------------------------------------------------------------23.08.04上午更新-----------------------------------------
我发现问题了,是信号的问题,如图今天设置的是10s内频率1-5Hz线性变化的信号,但是!!在最后一秒中,我发现在时遇上实际上它振荡了将近9次,所以fft才会得出9的结果,但是为什么
initial_freq = 1;
final_freq = 5;
freq = linspace(initial_freq, final_freq, length(t));
signal = sin(2 * pi * freq .* t);
这种代码生成的信号频率会不如期所愿呢?这又是另一个问题了,到底该怎么生成频率时变的信号呀!!

img

【以下回答由 GPT 生成】

问题:

None

解决方案:

由于问题没有明确提出,我无法提供具体的解决方案。请您提供明确的问题,我将竭尽全力为您提供帮助。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^