序列傅里叶变换定义
序列傅里叶变换 (DFT) 是一种数学变换,它将一个有限长度的序列转换为其频谱表示。它使用一个复数数组表示序列的频谱,其中每个元素表示对应的频率成分的幅度和相位。
DFT 的公式为:
X[k] = ∑n=0 to N-1 x[n] * e^(-j2πkn/N)
其中,X[k] 是序列 x 的 DFT,x[n] 是序列 x 的第 n 个元素,N 是序列 x 的长度,k 是 DFT 的索引,e 是自然对数的底数。
DFT 可以用来分析序列中不同频率分量的幅度和相位,并且可以用来进行频域信号处理,例如降噪、滤波和提升信噪比等。
Python实现序列傅里叶变换:
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3, 1, 2, 3, 1, 2, 3]
X = np.fft.fft(x)
# 计算序列 x 的频率范围
N = len(x)
f = np.linspace(0, 1, N)
# 绘制序列 x 的频谱图
plt.plot(f, np.abs(X))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
离散信号傅里叶变换的性质
离散信号傅里叶变换 (DFT) 是一种用来将时域信号转换为频域信号的工具。在数学上,DFT 定义为将一个序列 的每个时间点转换为一个复数,使得这个序列能够被表示为一个幅度和相位的波形。
python证明离散傅里叶线性性质:
import numpy as np
import matplotlib.pyplot as plt
# 建立信号 x[n] 和 y[n]
x = np.array([1, 2, 3, 4])
y = np.array([5, 6, 7, 8])
# 计算 x[n] 和 y[n] 的 DFT
X = np.fft.fft(x)
Y = np.fft.fft(y)
z = x + y
Z = np.fft.fft(z)
N2 = len(z)
f2 = np.linspace(0, 1, N2)
W = X + Y
f3 = np.linspace(0, 1, N2)
# 绘制序列 z 的频谱图
plt.plot(f2, np.abs(Z))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('DFT(x+y)')
plt.show()
plt.plot(f3, np.abs(W))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('DFT(x)+DFT(y)')
plt.show()
观察上图发现图像相同。
Python实现信号时移:
import numpy as np
import matplotlib.pyplot as plt
# 建立单位冲击信号 x[n]
x = np.zeros(10)
x=[1,2,3,4,5]
# 计算 x[n-k0]
k0 = 3
y = np.concatenate((x[k0:], x[:k0]))
# 绘制 x[n] 和 x[n-k0] 的图像
plt.plot(x, label='x[n]')
plt.plot(y, label='x[n-k0]')
plt.legend()
plt.show()
np.concatenate
函数可以用来将多个数组拼接在一起。在上述代码中,
x[k0:]
表示从第 k0 个元素开始到最后一个元素的所有元素组成的数组,x[:k0]
表示从第一个元素到第 k0-1 个元素的所有元素组成的数组。 x为[1, 2, 3, 4, 5]
,k0 为 3,则x[k0:]
为[3, 4, 5]
,x[:k0]
为[1, 2]
。将两个数组拼接起来,即得到了时移后的序列 x[n-k0]。如果 x 为
[1, 2, 3, 4, 5]
,k0为 3,则 x[n-k0] 为[3, 4, 5, 1, 2]
。