如何使用python设计巴特沃斯滤波器,并指定截止频率为0.1 Hz?

如何使用python设计巴特沃斯滤波器,并指定截止频率为0.1 Hz?,python,scipy,frequency,butterworth,Python,Scipy,Frequency,Butterworth,在这里,我试图创建一个高通巴特沃斯数字滤波器,截止频率为0.1赫兹。 我已经实现了以下代码,我不确定它是否正确 #%% creating the filter # filter parameters order=6 btype='highpass' cutoff_frequency=0.1*2*np.pi analog=False b, a= signal.butter(order,cutoff_frequency,btype, analog) w, h = signal.freqs(b,

在这里,我试图创建一个高通巴特沃斯数字滤波器,截止频率为0.1赫兹。 我已经实现了以下代码,我不确定它是否正确

#%% creating the filter 
# filter parameters 
order=6
btype='highpass'
cutoff_frequency=0.1*2*np.pi
analog=False

b, a= signal.butter(order,cutoff_frequency,btype, analog)
w, h = signal.freqs(b, a)

plt.figure() 
plt.plot(w, 20 * np.log10(abs(h)))
plt.xscale('log')
plt.title('Butterworth filter frequency response')
plt.xlabel('Frequency [radians / second]')
plt.ylabel('Amplitude [dB]')
plt.margins(0, 0.1)
plt.grid(which='both', axis='both')
plt.axvline(0.1*2*np.pi, color='green') # cutoff frequency
plt.show()

我的困惑是关于截止频率,这里我将其乘以2*pi,因为我知道scipy.signal.butter的截止频率对应于以rad/s为单位的角频率。

知道我的采样频率是1Hz,我已经执行了以下步骤来设计具有截止频率的高通6阶巴特沃斯数字滤波器0.1 Hz时的频率:

order=6 # order of the filter
btype='highpass' # type
F_sampling=1.0   # my sampling freq
Nyqvist_freq=F_sampling/2 # Nyqvist frequency in function of my sampling frequency
cut_off_Hz=0.1 # my cutoff frequency in Hz
cutoff_frequency=cut_off_Hz/Nyqvist_freq    # normalized cut_off frequency
analog=False #digital filter
b, a= signal.butter(order,cutoff_frequency,btype, analog)
w, h = signal.freqs(b, a)
Detrend_carrierPhase=signal.filtfilt(b, a, Carrier_phase) # filtering my high rate carrier phase
我使用的是scipy库,其中截止频率是Nyqvist频率的一部分,它是一个无量纲值,这就是为什么我需要将以Hz表示的采样频率除以2转换为Nyqvist频率,因此它等于1Hz/2=0.5Hz。这是我系统的Nyqvist频率。给黄油过滤器的标准化Nyqvist截止频率为0.1(截止频率单位为Hz)除以0.5(我的系统的Nyqvist频率)

我使用signal.filter来过滤我的载波相位(信号)


希望这将是有益的

滤波器频率(默认情况下)是Nyqvist频率的标准化分数,不是绝对频率,但它以兰特/秒为单位,我想实现0.1赫兹,所以我需要将其乘以2*pi否?否默认情况下没有维度。这是Nyqvist频率的一小部分。(在较新的scipy版本中)有一个可选的采样频率参数,在这种情况下,频率与采样频率的单位相同,否则它只是一个无量纲的值,所以我只需要输入0.1,它对应于0.1 Hz?否。您需要根据系统的Nyqvist频率(0.1Hz/Nyqvist频率,单位为Hz)计算无量纲的频率