9

Matlab コードを Python に変換しようとしています。fdesign.lowpass()PythonでMatlabを実装したい。を使用して、このMatlabコードの正確な代替物は何になるでしょうかscipy.signal.firwin():

demod_1_a = mod_noisy * 2.*cos(2*pi*Fc*t+phi);
d = fdesign.lowpass('N,Fc', 10, 40, 1600);
Hd = design(d);
y = filter(Hd, demod_1_a);
4

1 に答える 1

6

非常に基本的なアプローチは、呼び出すことです

# spell out the args that were passed to the Matlab function
N = 10
Fc = 40
Fs = 1600
# provide them to firwin
h = scipy.signal.firwin(numtaps=N, cutoff=40, nyq=Fs/2)
# 'x' is the time-series data you are filtering
y = scipy.signal.lfilter(h, 1.0, x)

これにより、最終的に Matlab コードで作成されるものと同様のフィルターが生成されます。機能的に同等の結果を得ることが目標である場合、これは便利なフィルターを提供するはずです。

ただし、Python コードがまったく同じ結果を提供することが目標である場合は、design(Matlab で) 呼び出しの内部を調べる必要があります。私の簡単なチェックから、Matlab 呼び出しを解析して、それが何をしているのか、つまり、どの設計方法が使用されているかなどを正確に特定し、それを対応するscipy呼び出しにどのようにマップするかを特定することは簡単ではありません。本当に互換性が必要で、限られた数のフィルターに対してのみこれを行う必要がある場合は、手動でフィールドを確認できます。この数値の配列は、上記の Python コードHd.Numeratorの変数に直接対応しています。hしたがって、これらの数値を手動で配列にコピーすると、数値的に同等の結果が得られます。

于 2013-07-26T15:09:33.430 に答える