采样定理理解_python
采样定理理解(python)
- 时间信号分类:
- 连续时间信号
在所讨论的时间间隔内,对于任意时间(除了不连续点)都可以明确给出确定的函数值。 - 离散时间信号
只是在某些离散的瞬时给出函数值,而在其他处无定义。离散时间信号是时间上不连续、按先后顺序排列的一组数的集合,故称为时间序列。 - 采样定理
每个信号都可以分解为多个不同频率、不同振幅和不同相位的正弦或余弦函数的叠加形式。下面简单讨论一下,只含有一个频率成分的离散信号采样情况。
振幅amp = 1;频率f = 10hz;相位 = 0.3;原始信号0.01s采样,以0.1s采样的情况。
import numpy as np
import matplotlib.pyplot as plt
f = 10
t = np.arange(0,1,0.01)
y = np.sin(2*np.pi*f*t+0.3)
plt.subplot(311)
plt.plot(t,y)
t1 = np.arange(0,1,0.1) #10s采样
y1 = np.sin(2*np.pi*f*t1+0.3)
plt.subplot(312)
plt.plot(t,y)
plt.plot(t1,y1,'ro')
plt.subplot(313)
plt.plot(t1,y1,'r')
plt.ylim(-1,1)
plt.show()
采样之后的信号具有“零频率”的样子。当原始信号频率f = 9hz时,用0.1s采样发现,信号具有1hz的样子。这就出现了与原始信号频率不一致的“假频”。
假频有什么规律可循?
import numpy as np
import matplotlib.pyplot as plt
f = np.append(np.arange(10,0,-5),np.arange(11,20,5))
t = np.arange(0,1,0.01)
y = np.sin(2*np.pi*10*t+0.3)
plt.subplot(211)
plt.plot(t,y,'k')
t1 = np.arange(0,1,0.1) #10s采样
le = []
st = []
for fi in f:
yi = np.sin(2*np.pi*fi*t1+0.3)
plt.subplot(212)
hd, = plt.plot(t1,yi)
le.append(hd)
st.append(str(fi)+"hz")
plt.legend(handles = le,labels = st)
plt.ylim(-1,1)
plt.show()
从图中可以看出,当信号频率(5hz)<采样频率(10hz)一半时,采样过的信号可以反映原始信号频率特征;
当信号中的频率(9hz)大于采样频率(10hz)的一半,≤采样频率(10hz)时,采样后的视频率是10-9=1hz;
当信号中的频率大于10hz,出现的视频率与小于10hz一致的频率,即出现了循环。
采样频率大于信号中所含的最大频率的2倍时,采样后的数据可以不失真描述信号。当不满足这个条件时,就会出现频率折叠和频率重复。
总的来说,只有信号中的最大频率不大于采样频率的一半(Nyquist),采样后的信号才能不失真反映原始信号。在实际应用中,对于信号的采样不会严格按照2倍采样,要根据实际分析的有效信号进行衡量选取。
- 参考万永革数字信号处理
- 首发www.dspstack.com