|
楼主 |
发表于 2015-11-2 11:08
|
显示全部楼层
本帖最后由 isnowran 于 2015-11-2 12:01 编辑
- def xpass_fc(fc, HZ):
- return 1.0 * fc / (HZ / 2)
-
- fl, fh = xpass_fc(fc_low, HZ), xpass_fc(fc_high, HZ)
- fcs = np.array([fl, fh])
- b, a = sig.butter(pole, fcs, "bandstop")
- vs_filter = sig.lfilter(b, a, ppgs)
- return vs_filter
-
- def FFT_ft():
- size = 400
- sig = sin(linspace(0, 4*2*pi, size)) # 4hz 信号
- noise = sin(linspace(0, 50*2*pi, size)) # 50hz 噪声
- sig2 = sig + noise # 数据叠加
-
- # 原始波形 时域
- title("ori")
- plot(sig2)
- show()
-
- # 原始波形 频域
- fft1d = np.fft.rfft(sig2)
- title("ori frequency")
- plot(fft1d[:100], "-")
- show()
-
- # fft 滤波结果
- fft1d[40:60] = 0
- title("fft filter, 40~60 hz set zero")
- plot(np.fft.irfft(fft1d))
- show()
-
- # 巴特沃斯滤波结果
- sig_filter = filter_bandstop(detrend(sig2), 4, size, 40, 60)
- title("fir butter bandstop filter, 40~60")
- plot(sig_filter)
- show()
复制代码
一共有四个图例
前两张:原始信号+噪声的波形,以及频率分布(4hz和50hz)
第三张:通过计算fft,并且手工把40~60hz置零后,再ifft还原到波形的结果(有点毛刺)
第四张:通过fir巴特沃斯滤波器,带阻40~60hz的结果
我想请教的是,fft后直接置0,能算作滤波的方法么?如果算的话,那跟巴特沃斯这种方法比较,有啥区别呢?
纯信号处理小白中的小白,问题貌似很愚蠢,请大家多包涵 |
|