python电路仿真002-抗混叠

抗混叠

奈奎斯特采样定理:为了不失真地恢复模拟信号,采样频率应该大于等于模拟信号频谱中最高频率的2倍;  fs ≥ 2*fin 或 fin ≤ fs/2
如果不能满足上述采样条件,就会发生混叠,简言之就是,如果输入信号大于fs/2,最终会被认为是fs/2频率内的信号(即小于fs/2的信号);
【举例说明】假设采样频率fs=100,如果输入信号频率fin≤50,例如fin=10,因为满足采样定律,不会发生混叠,如果fin=90或fin=210,则不满足采样定律,会发生混叠;

公式角度理解

假设以fs对信号 c o s ( 2 π f i n t ) cos(2 \pi f_{in} t) cos(2πfint)采样,t=n/fs,n=0,1,2,3……,则采样后的信号为 c o s ( 2 π f i n f s n ) cos(2 \pi \frac {f_{in}}{f_s} n) cos(2πfsfinn)
⓵ 利用cos函数对称性,即 c o s ( x ) = c o s ( − x ) cos(x)=cos(-x) cos(x)=cos(x),则有
c o s ( 2 π f i n f s n ) = c o s ( 2 π − f i n f s n ) cos(2 \pi \frac {f_{in}}{f_s} n) = cos(2 \pi \frac {-f_{in}}{f_s} n) cos(2πfsfinn)=cos(2πfsfinn)
【举例说明】如果fin=10,则也可以等效为fin=-10的信号,如fin=90,也可以等效为fin=-90的信号;(先忽略负频率怎么理解!)
⓶ 利用cos函数周期性,即 c o s ( x ) = c o s ( x + 2 π ) cos(x)=cos(x+2\pi) cos(x)=cos(x+2π),则有
c o s ( 2 π f i n f s n ) = c o s ( 2 π f i n + f s f s n ) = c o s ( 2 π f i n − f s f s n ) cos(2 \pi \frac {f_{in}}{f_s} n) = cos(2 \pi \frac {{f_{in}+f_s}}{f_s} n) = cos(2 \pi \frac {{f_{in}-f_s}}{f_s} n) cos(2πfsfinn)=cos(2πfsfin+fsn)=cos(2πfsfinfsn)
【举例说明】如果fs=100,fin=10,则也可以等效为fin=110或210或-90或-190的信号;
……………………………分割线……………………………
结合以上两点:假设fs=100,如果:
❶fin=10,满足采样定律,无需变换,可以得到真实结果: c o s ( 2 π 10 100 n ) cos(2 \pi \frac {10} {100} n) cos(2π10010n)
❷fin=210,不满足采样定律,利用cos函数周期性, c o s ( 2 π 210 100 n ) = c o s ( 2 π 210 − 100 100 n ) = c o s ( 2 π 210 − 100 − 100 100 n ) = c o s ( 2 π 10 100 n ) cos(2 \pi \frac {210} {100} n)=cos(2 \pi \frac {210-100} {100} n)=cos(2 \pi \frac {210-100-100} {100} n)=cos(2 \pi \frac {10} {100} n) cos(2π100210n)=cos(2π100210100n)=cos(2π100210100100n)=cos(2π10010n),也就是说,这个fin=210的信号会被最终误认为是fin=10的信号;
❸fin=90,不满足采样定律,利用cos函数对称性+周期性, c o s ( 2 π 90 100 n ) = c o s ( 2 π − 90 100 n ) = c o s ( 2 π − 90 + 100 n ) = c o s ( 2 π 10 100 n ) cos(2 \pi \frac {90} {100} n)=cos(2 \pi \frac {-90} {100} n)=cos(2 \pi \frac {-90+100} n)=cos(2 \pi \frac {10} {100} n) cos(2π10090n)=cos(2π10090n)=cos(2πn90+100)=cos(2π10010n) ,这个fin=90的信号会被最终误认为是fin=10的信号;
详见下面仿真结果;

源代码

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei']      # 显示中文
plt.rcParams['axes.unicode_minus'] = False      # 显示负号

Fs = 100;                   # sampling rate 采样频率=100
Ts = 1/Fs;                  # sampling interval 采样间隔


ff = 10;                    # 输入信号1,频率=10,小于1/2采样频率
t0 = np.arange(0,0.2,Ts/5)
y0 = np.sin(2*np.pi*ff*t0)
t1 = np.arange(0,0.2,Ts)
y1 = np.sin(2*np.pi*ff*t1)

ff2 = 210;                  # 输入信号2,频率=210,大于1/2采样频率
t2 = np.arange(0,0.2,Ts/100)
y2 = np.sin(2*np.pi*ff2*t2)
t3 = np.arange(0,0.2,Ts)
y3 = np.sin(2*np.pi*ff2*t3)

ff3 = 90;                   # 输入信号3,频率=90,大于1/2采样频率
t4 = np.arange(0,0.2,Ts/10)
y4 = np.sin(2*np.pi*ff3*t4)
t5 = np.arange(0,0.2,Ts)
y5 = np.sin(2*np.pi*ff3*t5)

plt.close()
plt.subplot(311)
plt.plot(t0*100,y0,'ob:',t1*100,y1,'or:')
plt.title('输入频率为10,小于fs/2=50,没有混叠')
plt.subplot(312)
plt.plot(t2*100,y2,'ob:',t3*100,y3,'or:')
plt.title('输入频率为210,大于fs/2=50,发生混叠')
plt.subplot(313)
plt.plot(t4*100,y4,'ob:',t5*100,y5,'or:')
plt.title('输入频率为90,大于fs/2=50,发生混叠')
plt.show()

仿真结果

混叠采样
【说明】蓝色是原始信号波形,红色是采样得到波形,因为下面两个输入信号大于fs/2,不满足采样定律,采样最终得到的波形效果等同于fin=10的信号,这时我们无法区别原始信号到底是fin=10还是fin=90或fin=210;

总结

因为混叠的存在,高于fs/2会被误认为是带内即fs/2内的信号,所以在输入信号那里如果加一个低通滤波器,滤除掉大于fs/2的信号,则消除这种影响,所以在很多仪表的输入端都会有一个低通滤波器(如下面频谱仪的原理图);
在这里插入图片描述

扩展

输入信号大于fs/2的这种情况,是一种欠采样,合理利用也有其优点,具体参考如下文章:滤波器基础:抗混叠

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值