wavread
畳み込みを使用してMatlabでエコーを生成する割り当てを行っていますが、実際に何をしているのかわかりません。出力は畳み込みで使用できるベクトルですか?
試してみたところ、「 A と B はベクトルでなければなりません」というエラーが表示されました。
別の質問: ウェーブ ファイルから取得した信号が の場合x(t)
、どうすれば取得できx(t-4)
ますか?
wavread
畳み込みを使用してMatlabでエコーを生成する割り当てを行っていますが、実際に何をしているのかわかりません。出力は畳み込みで使用できるベクトルですか?
試してみたところ、「 A と B はベクトルでなければなりません」というエラーが表示されました。
別の質問: ウェーブ ファイルから取得した信号が の場合x(t)
、どうすれば取得できx(t-4)
ますか?
コメントで述べたように、マルチチャンネル オーディオ ファイルを読み込もうとしている可能性が最も高いでしょう。その場合、配列をwavread
返す可能性が最も高いでしょう。の出力を投稿していただけますか?の出力はどこにありますか?NxM
N
M
size(x)
x
wavread
やりたいことに応じて、チャンネル全体で平均して として単一のオーディオ ベクトル (モノラルなど) を取得する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
ここでは、他の定義されていないポイントにA
andB
をゼロでパディングしました。出力の 2 番目のポイントは次のとおりです。
0 a1 a2 a3 0
b3 b2 b1 0 0
-----------------------
0 + a1b2 + a2b1 + 0 + 0
-----------------------
= a1b2+a2b1
等々。詳細については、たたみ込みに関する wiki 記事を参照してください。ただし、これを手動で行う必要はありません。MATLABconv
はこれを自動的に行います。したがって、ベクトルを整理するだけで準備完了です。
はい、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)であるとだけ言うことはできないということです。畳み込みでは、畳み込み関数でまだ行われていない場合は、ゼロパディングを使用する必要がある場合があります。
これがお役に立てば幸いです。