私たちは最近、ハミングコード、反復コードなどの基本的なコードであるエラー制御コーディングの概念を教えられました。
これらの概念を MATLAB で試してみることを考えました。私の目標は、ノイズによって破損した場合と、ファイルが基本的なコードで保護されてからノイズによって破損した場合のオーディオ ファイルの再生方法を比較することでした。
そこで、MATLAB で audioread 関数を使用して 20 ~ 30 秒の小さなオーディオ クリップを開きました。16 ビットでエンコードされた PCM ウェーブ ファイルを使用しました。「ネイティブ」形式で開くと、int16 形式になります。そうでない場合は、二重形式で開きます。
次に、2 種類のノイズを追加しました。 - AWGN ノイズ (double 形式を使用) とバイナリ対称チャネル ノイズ (int16 を uint16 に変換し、dec2bin 関数を使用してバイナリに変換)。元の int16 形式に再変換すると、多くのノイズが追加されます。
今の私の目標は、基本的な繰り返しコードを試すことです。そこで私がしたことは、バイナリ データで構成される 2 次元オーディオ ファイル マトリックスを、冗長性を追加することによって 3 次元マトリックスに変換することでした。次のコマンドを使用しました: -
猫 (3,x,x,x,x,x) ;
3 次元に沿って 5 つのバージョンの x を持つように 3 次元マトリックスを作成しました。
ここで、bsc 関数を使用してノイズを追加したいと考えています。次に、冗長ビットを含むベクトルで mode() 関数を使用して繰り返しビットを削除することにより、冗長データのデコードを行いたいと考えています。
このタスクの全体的な問題は、MATLAB が計算を行うのに時間がかかりすぎることです。30 秒のファイルでかなり大きなマトリックスが作成されるので、時間がかかると思います。さらに、私がやっていることは、さまざまなデータ型に関して最も効率的な方法ではないと思います。
計算時間を改善する方法を提案できますか? この基本的なタスクをより良い方法で実行するのに役立つ関数がいくつかあります。
ありがとう。(MATLAB に関するこのサイトへの最初の投稿なので、投稿形式が適切でない場合はご容赦ください。)
編集 - コードをここに投稿:-
[x,Fs] = audioread('sample.wav','native'); % native loads it in int16 format , Fs of sample is 44 khz , size of x is 1796365x1
x1 = x - min(x); % to make all values non negative
s = dec2bin(x); % this makes s as a 1796365x15 matrix the binary stream stored as character string of length 15. BSC channel needs double as the data type
s1 = double(s) - 48; % to get 0s and 1s in double format
%% ここで、ノイズが s1 自体またはエラー制御コード化されたマトリックスにどのように影響するかを比較したいと思います。
s2 = bsc(s,0.15); % this adds errors with probability of 0.15
s3 = cat(3,s,s,s,s,s) ; % the goal here is to add repetition redundancy. I will try out other efficient codes such as Hamming Code later.
s4 = bsc(s3,0.15);% this step is taking forever and my PC is unresponsive because of this one.
s5 = mode(s4(,,:)) ; % i wish to know if this is a proper syntax, what I want to do is calculate mode along the 3rd dimension just to remove redundancy and thereby reduce error.
%% s2 の bsc エラーによって s が破損した後に何をしたかを示します。
d = char(s2 + 48);
d1 = bin2dec(d) + min(x);
sound(d1,Fs); % this plays the noisy file. I wish to do the same with error control coded matrix but as I said in a previous step it is highly unresponsive.
私の仕事の主な問題は、大きなサンプリング レートを使用したため、ベクトルが非常に大きかったことだと思います。