回答:
書く そして、を計算します。つまり、をで除算し、余りだけを取ります。これは非常に複雑に見えますが、少し考えると、をと 分割しているだけです。と短いベクトルを追加してを取得します。について繰り返し 、長さ 4つのベクトルを追加してを取得します 。これは、特定のコマンドを提案する構文に精通していませんが、MATLABで行うのはそれほど難しいことではないでしょう。次に、MATLAB関数を呼び出さずに、との巡回畳み込みを計算します。 結果は
数学的には、あなたがやっていることは を計算することです。これは最初にFFTを使用してを見つけることで空想的に行うことができます。計算(これは長いベクトルを効果的に短い断片に切り分けて追加する)、またはより単純に最初に計算することによってと (より短いベクトルに切り刻み、それらを追加)してから、循環畳み込み これは簡単です。
Chop-add-convolveはconvolve-chop-addよりも簡単です
1つのアプローチは、フルサイズの循環たたみ込みを「再ラップ」することです。
sum(reshape(ifft(fft(x, 8) .* conj(fft(h, 8))), 2, 8 / 2), 2)
別の実装は、FFTを直接間引くことです。
N = 2;
Xf = fft(x); Xf = Xf(1:length(Xf) / N:end);
Hf = fft(h); Hf = Hf(1:length(Hf) / N:end);
ifft(Xf .* conj(Hf))
再現したいのがMATLABのcconvの動作である場合、MATLABファイルのソースコードを見るのが最善かもしれません:)