0

周期信号で最も豊富な周波数を探しています。周期信号に対してフーリエ変換を実行し、負の fft 値を持つ周波数をフィルター処理するとどうなるかを理解しようとしています。

つまり、プロット 2 と 3 (下記参照) の軸は何を表しているのでしょうか。fft 変換された信号に対して周波数 (サイクル/秒) をプロットしています。y 軸の負の値は何を意味するのでしょうか。

import numpy as np
import scipy

# generate data
time = scipy.linspace(0,120,4000)
acc = lambda t: 10*scipy.sin(2*pi*2.0*t) + 5*scipy.sin(2*pi*8.0*t) + 2*scipy.random.random(len(t))
signal = acc(time)

# get frequencies from decomposed fft
W =  np.fft.fftfreq(signal.size, d=time[1]-time[0])
f_signal = np.fft.fft(signal)

# filter signal
# I'm getting only the "negative" part!
cut_f_signal = f_signal.copy()
# filter noisy frequencies
cut_f_signal[(W < 8.0)] = 0
cut_f_signal[(W > 8.2)] = 0

# inverse fourier to get filtered frequency
cut_signal = np.fft.ifft(cut_f_signal)

# plot
plt.subplot(221)
plt.plot(time,signal)
plt.subplot(222)
plt.plot(W, f_signal)
plt.subplot(223)
plt.plot(W, cut_f_signal)
plt.subplot(224)
plt.plot(time, cut_signal)
plt.show()

フーリエ変換と信号フィルタリング

4

2 に答える 2

0

@hotpaw2 が上記のコメントで既に書いているように、時間領域で実際の信号に対して実行された FFT の結果は、周波数領域で複雑な値を生成します。

プロット コマンドの入力値 f_signal は、複素数値のベクトルです。

plt.subplot(222)
plt.plot(W, f_signal)

これにより、意味のない出力が生成されます。f_signal の絶対値をプロットする必要があります。位相に関心がある場合は、角度もプロットする必要があります。Matlab では、これは次のようになります。

% Plot the absolute values of f_signal
plot(W, abs(f_signal));
% Plot the phase of f_signal
plot(W, (unwrap(angle(f_signal)));
于 2015-01-24T21:14:09.170 に答える