频率为1000Hz的正弦波的频域

2024-04-19 18:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python上启动DSP,遇到了一些困难: 我想定义一个频率为1000Hz的正弦波

我试着用下面的代码做FFT并找到它的频率:

import numpy as np

import matplotlib.pyplot as plt

sampling_rate = int(10e3)
n = int(10e3)

sine_wave = [100*np.sin(2 * np.pi * 1000 * x/sampling_rate) for x in range(0, n)]

s = np.array(sine_wave)

print(s)

plt.plot(s[:200])
plt.show()

s_fft = np.fft.fft(s)
frequencies = np.abs(s_fft)
plt.plot(frequencies)
plt.show()

所以第一个情节对我来说很有意义。 第二个图(FFT)显示了两个频率: i) 1000Hz,这是我当时设定的频率 ii)9000Hz,意外 freqeuncy domain


Tags: importfftrateplotasshownpplt
1条回答
网友
1楼 · 发布于 2024-04-19 18:31:08

您的数据不符合Shannon criterion。未设置正确的频率轴。你知道吗

当信号为真时,使用rfft比使用fft更容易。你知道吗

您的代码可以进行如下调整:

import numpy as np
import matplotlib.pyplot as plt

sampling_rate = 10000
n = 10000
signal_freq = 4000 # must be < sampling_rate/2 
amplitude = 100

t=np.arange(0,n/sampling_rate,1/sampling_rate)
sine_wave = amplitude*np.sin(2 * np.pi *signal_freq*t) 
plt.subplot(211)
plt.plot(t[:30],sine_wave[:30],'ro')

spectrum = 2/n*np.abs(np.fft.rfft(sine_wave))
frequencies = np.fft.rfftfreq(n,1/sampling_rate)
plt.subplot(212)
plt.plot(frequencies,spectrum)
plt.show()

输出: enter image description here

没有信息丢失,即使人眼会受到时间表示的困扰。你知道吗

相关问题 更多 >