0

wavread畳み込みを使用してMatlabでエコーを生成する割り当てを行っていますが、実際に何をしているのかわかりません。出力は畳み込みで使用できるベクトルですか?

試してみたところ、「 A と B はベクトルでなければなりません」というエラーが表示されました。

別の質問: ウェーブ ファイルから取得した信号が の場合x(t)、どうすれば取得できx(t-4)ますか?

4

2 に答える 2

1

コメントで述べたように、マルチチャンネル オーディオ ファイルを読み込もうとしている可能性が最も高いでしょう。その場合、配列をwavread返す可能性が最も高いでしょう。の出力を投稿していただけますか?の出力はどこにありますか?NxMNMsize(x)xwavread

やりたいことに応じて、チャンネル全体で平均して として単一のオーディオ ベクトル (モノラルなど) を取得するxAvg=mean(x,2);か、特定のチャンネルを選択して のように操作することができxChannelK=x(:,k);ます1<=k<=M

ゼロパディングに関する上記のコメントに応えて、nポイントとmポイント信号の間の畳み込み演算では、m+n-1ポイント出力になることを思い出してください。と を畳み込みたいA=[a1,a2,a3]としB=[b1,b2,b3]ます。最初にベクトルの 1 つを反転させ、もう一方のベクトルにスライドさせながら、ポイント単位で乗算し、各ステップで結果を加算します。

ただし、それを裏返すと、2 番目のベクトルは、他の関数が定義されていないポイントでシーケンス空間に突き出ます (逆も同様です)。したがって、両方が同じ長さになるまで、ゼロを埋め込む必要があります。

これは、例によってよりよく示されます。出力の最初のポイントは

0   0    a1   a2  a3
b3  b2   b1    0   0
--------------------
0 + 0 + a1b1 + 0 + 0  
--------------------

 = a1b1

ここでは、他の定義されていないポイントにAandBをゼロでパディングしました。出力の 2 番目のポイントは次のとおりです。

0    a1     a2    a3  0
b3   b2     b1    0   0
-----------------------
0 + a1b2 + a2b1 + 0 + 0
-----------------------

 = a1b2+a2b1

等々。詳細については、たたみ込みに関する wiki 記事を参照してください。ただし、これを手動で行う必要はありません。MATLABconvはこれを自動的に行います。したがって、ベクトルを整理するだけで準備完了です。

于 2011-04-26T15:41:54.520 に答える
0

はい、wavreadは出力用のベクトルを生成します(Matlabヘルプを使用するか、コマンドウィンドウから「docsearchwavread」と入力します)。isvector(x)関数を使用して再確認することもできます。

Matlabベクトルは、ベクトル内の位置、ここでは信号xを識別するためにインデックスを使用します。このようにwavreadを使用した場合:

x = wavread(*filename*)

その場合、xはx、x(:)、またはx(1:end)として呼び出すことができます。これは、x(t-4)を参照する場合に重要です。x(t)をx(1:end)として表すことができる場合、x(t-4)はどうあるべきですか?

ただし、トリックは、インデックスが負の値になることは決してないため、x(t-4)がx(-3:end-4)であるとだけ言うことはできないということです。畳み込みでは、畳み込み関数でまだ行われていない場合は、ゼロパディングを使用する必要がある場合があります。

これがお役に立てば幸いです。

于 2011-04-26T06:19:05.597 に答える