gpt4 book ai didi

在倍频程上绘制 FFT

转载 作者:行者123 更新时间:2023-12-03 23:29:50 24 4
gpt4 key购买 nike

我知道 FFT 将时域中的函数更改为频域中显示的函数。

但是,当我尝试在频域中绘制所述图形时,我只能通过使用时间作为 X 轴来使其正常工作,而显然应该不是那个,而是频率。

此外,我只能通过将 y 轴除以某个整数来获得与原始信号中的幅度相匹配的幅度。这是为什么?

这是我的代码

t=0:0.001:2

x=2*sin(20*pi*t) + sin(100*pi*t)
subplot(2,1,1)
plot(1000*t,x)
grid
xlabel("Time in milliseconds")
ylabel("Signal amplitude")

subplot(2,1,2)
y=fft(x)
plot(1000*t,abs(y))
xlabel("Frequency")
ylabel("Signal amplitude")

和图表。

enter image description here

请帮忙=(

最佳答案

频率关系(x 轴缩放)
直到奈奎斯特频率(采样率的一半),FFT 产生的每个值的频率与输出值的索引线性相关,通过:

f(i) = (i-1)*sampling_frequency/N
其中 N 是 FFT 点的数量(即 N=length(y) )。在您的情况下, N=2001 .在奈奎斯特频率之上,频谱显示出环绕负频率分量(来自频谱的周期性扩展)。
可以从您对 t 的定义中扣除采样频率为 1/T,其中 T 是采样时间间隔(在您的情况下为 T=0.001)。
所以采样频率为1000Hz。
请注意,由于 t(i) 的值也与指数 i 线性相关, 通过
t(i) = (i-1)*0.001
可以定义 f = 1000*t*sampling_frequency/N(虽然没有必要建议,因为这只会模糊您的代码) .
请注意,您错过了 sampling_frequency/N相应地导致音调以错误频率显示的术语
(根据 x 的定义,应该在 10Hz 和 50Hz 处有峰值,在 -10Hz 和 -50Hz 处有相应的别名,在环绕之后出现在 990Hz 和 950Hz 处)。
幅度关系(y轴缩放)
请注意,观察到的关系只是近似的,因此以下不是数学证明,而只是一种直观的方式来可视化时域音调幅度和频域峰值之间的关系。
将问题简化为一个音调:
x = A*sin(2*pi*f*t)
可以使用 Parseval's theorem 推导出相应峰值的近似幅度。 :
enter image description here
在时域中(等式左侧),表达式约等于 0.5*N*(A^2) .
在频域(等式右侧),做以下假设:
  • spectral leakage effects可以忽略不计
  • 音调的频谱内容仅包含在 2 个箱中(在频率 f 和相应的混叠频率 -f )占总和(所有其他箱都为 ~0)。请注意,这通常仅在音频频率是 sampling_frequency/N 的精确(或接近精确)倍数时才成立。 .

  • 右侧的表达式约等于 2*(1/N)*abs(X(k))^2对于 k 的某些值对应于频率 f 处的峰值.
    将两者放在一起产生 abs(X(k)) ~ 0.5*A*N .换句话说,输出幅度显示的比例因子为 0.5*N (或在您的情况下约为 1000)相对于时域幅度,正如您所观察到的。
    这个想法仍然适用于不止一种音调(尽管可以忽略不计的频谱泄漏假设最终会失效)。

    关于在倍频程上绘制 FFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797670/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com