首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的windowed-sinc函数有非线性相位?

为什么我的windowed-sinc函数有非线性相位?
EN

Stack Overflow用户
提问于 2017-01-05 05:30:13
回答 0查看 420关注 0票数 1

与web上的许多教程类似,我尝试使用以下python函数实现了一个windowed-sinc低通滤波器:

代码语言:javascript
复制
def black_wind(w):
''' blackman window of width w'''
    samps = np.arange(w)
    return (0.42  - 0.5 * np.cos(2 * np.pi * samps/ (w-1)) + 0.08 * np.cos(4 * np.pi * samps/ (w-1)))

def lp_win_sinc(tw, fc, n):
''' lowpass sinc impulse response 
Parameters:
    tw = approximate transition width [fraction of nyquist freq]
    fc = cutoff freq [fraction of nyquest freq]
    n = length of output. 
Returns:
    s = impulse response of windowed-sinc filter appended zero-padding
    to make len(s) = n
'''
    m = int(np.ceil( 4./tw / 2) * 2) 
    samps = np.arange(m+1)
    shift = samps - m/2
    shift[m/2] = 1
    h = np.sin(2 * np.pi * fc * shift)/shift
    h[m/2] = 2 * np.pi * fc
    h = h * black_wind(m+1)
    h = h / h.sum()
    s = np.zeros(n)
    s[:len(h)] = h
    return s

对于输入:'tw = 0.05','fc = 0.2','n = 6000',fft的大小似乎是合理的。

代码语言:javascript
复制
tw = 0.05
fc = 0.2
n = 6000
lp = lp_win_sinc(tw, fc, n)
f_lp = np.fft.rfft(lp)
plt.figure()
x = np.linspace(0, 0.5, len(f_lp))
plt.plot(x, np.abs(f_lp))

magnitude of lowpass filter response

然而,相位在~fc以上是非线性的。

代码语言:javascript
复制
plt.figure()
x = np.linspace(0, 0.5, len(f_lp))
plt.plot(x, np.unwrap(np.angle(f_lp)))

phase of lowpass filter response

给定脉冲响应的非零填充部分的对称性,我希望得到的相位是线性的。有人能解释一下发生了什么吗?也许我错误地使用了numpy函数,或者我的期望是错误的。我非常感谢您的帮助。

***********************EDIT***********************

基于对这个问题的一些有用的评论和一些更多的工作,我编写了一个产生零相位延迟的函数,因此更容易解释np.angle()结果。

代码语言:javascript
复制
def lp_win_sinc(tw, fc, n):
    m = int(np.ceil( 2./tw) * 2) 
    samps = np.arange(m+1)
    shift = samps - m/2
    shift[m/2] = 1
    h = np.sin(2 * np.pi * fc * shift)/shift
    h[m/2] = 2 * np.pi * fc
    h = h * np.blackman(m+1)
    h = h / h.sum()
    s = np.zeros(n)
    s[:len(h)] = h
    return np.roll(s, -m/2)

这里的主要变化是使用np.roll()将对称线放置在t=0处。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41473545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档