gpt4 book ai didi

python - Python 和 Matlab 中平均频率的差异

转载 作者:行者123 更新时间:2023-12-04 17:58:43 25 4
gpt4 key购买 nike

我有这个EMG signal我想根据这个 article 绘制平均电源频率.我使用以下代码在 Matlab 中实现它:

clear all;
close all;
EMG=load('EMG.txt');
N=1000; %my window
z=1;
fs=200 %sampling rate
for i=1:length(EMG)-N
DUM=0;
NUM=0;
FT=fft(EMG(i:i+N-1));
psd=FT.*conj(FT);
NFFT=length(fft2);
f = [1:NFFT/2]*fs/N;
for j=1:NFFT/2
NUM=NUM+f(j)*psd(j);
DUM=DUM+psd(j);
end
MPF(z)=NUM/DUM;
z=z+1;
end

而MPF的情节是:

MPF using Matlab

下面我尝试在 Python 中做同样的事情。代码是:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('EMG.txt', names=['EMG'])
EMG=df['EMG'].tolist()
sampling_rate=200
N=1000 #my window
FT=np.fft.fft(EMG, axis=0)
psd=FT*np.conj(FT)
NFFT=len(FT)
f =(np.arange(0,NFFT/2)*sampling_rate)/N
NUM=0
DUM=0
MPF=[]
for j in np.arange(1,NFFT/2):
NUM=NUM+f[j]*psd[j]
DUM=DUM+psd[i]
MPF.append(NUM/DUM)

plt.plot(MPF)
plt.show()

而强积金的情节是: MPF using Python

为什么不同?

更新

按照 Dan 在评论部分的建议,我修改了我的 Python 代码,结果或多或少相同,除了 Matlab 代码比 Python 快得多,在我的例子中内存不足:

sampling_rate=200
N=1000
MPF=[]
for i in range(0,len(EMG)-N):
signal=EMG[i:(i+N)]
FT=np.fft.fft(signal, axis=0)
psd=FT*np.conj(FT)
NFFT=len(FT)
f =(np.arange(0,NFFT/2)*sampling_rate)/N
D_1=0
N_1=0
for j in np.arange(1,NFFT/2):
D_1=D_1+f[j]*psd[j]
N_1=N_1+psd[j]
MPF.append(D_1/N_1)

plt.plot(MPF)
plt.show()

选择前 22000 个样本的结果是: Matlab Python

最佳答案

'detrend' 选项会导致第一个值的差异(0 Hz 或 DC)。

默认设置为“常数”,即从原始数据中去除直流分量。

f, Pxx_den = signal.periodogram(x, fs, detrend=False)

关于python - Python 和 Matlab 中平均频率的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com