matlab+信号+mpf,Python和Matlab中平均频率的差异

博主比较了在MATLAB和Python中计算平均功率频率(MPF)的过程,发现两者结果存在差异。在MATLAB中的实现更快,而Python在处理大样本时可能出现内存不足的问题。经过调整Python代码后,结果接近但运行速度较慢。问题可能源于内存管理和计算效率的差异。
摘要由CSDN通过智能技术生成

我有这个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

强积金的情节是:

4r1rv.jpg

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

^{pr2}$

强积金的地块是:

Pnqd5.jpg

为什么不同?在

更新

根据Dan在评论部分的建议,我修改了Python代码如下,结果大致相同,只是Matlab代码比Python快得多,在我的例子中,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个样本,结果如下:

0uTTv.jpg2tubq.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值