matlab elif,MATLAB与fftfilt相当于Python

最后,我的代码得到了改进。我用scipy.signal.filtfilt替换了fftfilt(两次应用)(基本相同)。所以我的代码转换为python将是:

import numpy as np

import scipy.signal as sg

AveragingLengthAmp = 10

AveragingLengthPhase = 10

PhaseFixLength = 60

averaging_length = channel_sampling_freq1*PhaseFixLength

def fix_phasedata180(data_phase, averaging_length):

data_phase = np.reshape(data_phase,len(data_phase))

x = np.exp(1j*data_phase*2./180.*np.pi)

N = float(averaging_length)

b, a = sg.butter(10, 1./np.sqrt(N))

y = sg.filtfilt(b, a, x)

output_phase = data_phase - np.array(map(round,((data_phase/180*np.pi-np.unwrap(np.angle(y))/2)%(2*np.pi))*180/np.pi/180))*180

temp = output_phase[0]%90

output_phase = output_phase-output_phase[0]+temp

s = output_phase[output_phase >= 180]

for s in range(len(output_phase)):

output_phase[s] = output_phase[s]-360

return output_phase

out1 = fix_phasedata180(data_phase, averaging_length)

def fix_phasedata90(data_phase, averaging_length):

data_phase = np.reshape(data_phase,len(data_phase))

x = np.exp(1j*data_phase*4./180.*np.pi)

N = float(averaging_length)

b, a = sg.butter(10, 1./np.sqrt(N))

y = sg.filtfilt(b, a, x)

output_phase = data_phase - np.array(map(round,((data_phase/180*np.pi-np.unwrap(np.angle(y))/4)%(2*np.pi))*180/np.pi/90))*90

temp = output_phase[0]%90

output_phase = output_phase-output_phase[0]+temp

output_phase = output_phase%360

s = output_phase[output_phase >= 180]

for s in range(len(output_phase)):

output_phase[s] = output_phase[s]-360

return output_phase

offset = 0

data_phase_unwrapped = np.zeros(len(out2))

data_phase_unwrapped[0] = out2[0]

for jj in range(1,len(out2)):

if out2[jj]-out2[jj-1] > 180:

offset = offset + 360

elif out2[jj]-out2[jj-1] < -180:

offset = offset - 360

data_phase_unwrapped[jj] = out2[jj] - offset这里fix_phasedata180修正了180度的移位,类似于fix_phasedata90。 channel_sampling_freq1是1 /秒。

结果是:

XYhgx.png

这大多是正确的。只有我有一些问题需要了解scipy.signal.butter和scipy.signal.filtfilt。如你所见,我选择:

b, a = sg.butter(10, 1./np.sqrt(N))这里滤波器(N)的阶数为10,临界频率(Wn)为1 / sqrt(60)。我的问题是,我如何选择过滤器的适当顺序?我尝试了N = 1,直到N = 21,大于21,结果data_phase_unwrapped都是NAN。我也尝试过,在filtfilt中为padlen提供值,但我并不理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值