更改快速傅里叶变换FFT采样点数对结果的影响

文章通过创建一个由两个正弦波合成的波形,研究在不同采样点数下快速傅里叶变换(FFT)的结果。通过改变采样数,如2000、1500、1000、500和100,作者发现FFT能准确检测出波形中的频率成分,即使采样点数较低。关键在于正确设置频率显示范围,确保结果的可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在研究FFT的时候发现给不同的采样点数,FFT的结果不同,遂有研究此现象的想法(实际结果是相同的,只不过我当时不懂,没设置正确的频率显示范围)
————————————————————————————

首先先搞出来一个波来研究,波的参数如下:

from math import *
import numpy as np
from matplotlib import pyplot as plt
from scipy.fftpack import fft, fftshift

Fs = 1000  # 采样频率
N = 2  # 采样总时间
T = np.linspace(0, N, Fs * N)  # 一系列采样点对应的时间
f1 = 100  # 第一个正弦波的频率
f2 = 40  # 第二个正弦波的频率
Wav = [200 * sin(2 * pi * f1 * t) + 100 * sin(2 * pi * f2 * t) for t in T]  # 合成波,幅值为200和100

看一下波的形状:

plt.figure(figsize=(10, 6), dpi=150)
plt.plot(np.arange(0, 1000), Wav[0:1000])

在这里插入图片描述

先设置采样点数为2000,进行FFT,并输出结果图像:

N_ = 2000  # 采样数
FFT = fft(Wav[0:N_])
FFT = abs(FFT) / len(FFT)

plt.figure(figsize=(10, 6), dpi=150)
plt.plot(np.linspace(0, 400 * Fs / N_, 400), FFT[0:400])

这段代码里最重要的就是np.linspace(0, 400 * Fs / N_, 400)
他把我们不同采样数对应的FFT的结果频率转化为我们设置的Fs频率范围下,这样我们才能看到正确的结果
参考:离散傅里叶变换(DFT)
之所以有一个400是因为原长度太长了,不太好看结果频率在哪,我才设置成只取前400个FFT结果(正常这个位置是len(FFT),即采样数N_)

下面我们来看一下2000采样数的结果:
在这里插入图片描述
把采样数N_改成1500,再看看
在这里插入图片描述
1000:
在这里插入图片描述
500:
在这里插入图片描述
100:
在这里插入图片描述

可以说都较为准确检测出了内含的两个波段,当采样频率比较低时(100),也基本可以看出来结果,所以更改采样点数对结果基本没有影响(只要不是太低)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值