gpt4 book ai didi

python - FFT 结果 Matlab VS Numpy (Python) : not the same results

转载 作者:行者123 更新时间:2023-11-30 22:35:03 25 4
gpt4 key购买 nike

我有一个 Matlab 脚本来计算信号的 DFT 并绘制它:

(数据可查here)

clc; clear; close all;

fid = fopen('s.txt');
txt = textscan(fid,'%f');

s = cell2mat(txt);

nFFT = 100;
fs = 24000;
deltaF = fs/nFFT;
FFFT = [0:nFFT/2-1]*deltaF;
win = hann(length(s));

sw = s.*win;
FFT = fft(sw, nFFT)/length(s);
FFT = [FFT(1); 2*FFT(2:nFFT/2)];
absFFT = 20*log10(abs(FFT));

plot(FFFT, absFFT)
grid on

我正在尝试将其翻译为 Python,但无法得到相同的结果。

import numpy as np
from matplotlib import pyplot as plt

x = np.genfromtxt("s.txt", delimiter=' ')

nfft = 100
fs = 24000
deltaF = fs/nfft;
ffft = [n * deltaF for n in range(nfft/2-1)]
ffft = np.array(ffft)
window = np.hanning(len(x))

xw = np.multiply(x, window)
fft = np.fft.fft(xw, nfft)/len(x)
fft = fft[0]+ [2*fft[1:nfft/2]]
fftabs = 20*np.log10(np.absolute(fft))

plt.figure()
plt.plot(ffft, np.transpose(fftabs))
plt.grid()

我得到的图(左边是 Matlab,右边是 Python):

enter image description here

我做错了什么?

最佳答案

在连接两个列表的一种情况下,这两个代码是不同的

FFT = [FFT(1); 2*FFT(2:nFFT/2)];

在matlab代码中

在另一个中,将 fft 的第一个值与向量的其余部分相加

fft = fft[0]+ [2*fft[1:nfft/2]]

“+”不要在这里连接,因为你有 numpy 数组

在Python中,应该是:

fft = fft[0:nfft/2]
fft[1:nfft/2] = 2*fft[1:nfft/2]

关于python - FFT 结果 Matlab VS Numpy (Python) : not the same results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677001/

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