1

質問はタイトルの通りです。

n 番目ごとにポイントを取得するオーディオ信号をデシメートすると、オーディオ クリップが n 倍に高速化されます。間引きされたクリップと元のクリップの時間の長さが同じになるようにします。

これが私のコードで、ピアノの.wavを分析して間引いたものです

[piano,fs]=wavread('piano.wav'); % loads piano
play=piano(:,1); % Renames the file as "play"

t = linspace(0,time,length(play));          % Time vector
x = play;
y = decimate(x,2);

stem(x(1:30)), axis([0 30 -2 2])   % Original signal
title('Original Signal')
figure
stem(y(1:30))                        % Decimated signal
title('Decimated Signal')

%changes the sampling rate

fs1 = fs/2;
fs2 = fs/3;
fs3 = fs/4;
fs4 = fs*2;
fs5 = fs*3;
fs6 = fs*4;

wavwrite(y,fs,'PianoDecimation');

考えられる解決策: 新しいデシメートされたクリップは元のクリップよりも 2 倍短いため、残りの各ポイントを 2 倍にします。

2 つのクリップを並べて比較できるようにしたいだけです。

ここに音声ファイルがあります: http://www.4shared.com/audio/11xvNmkd/piano.html

4

2 に答える 2

2

@sageの回答には多くの良い情報がありますが、質問への回答は最後の行を次のように変更するのと同じくらい簡単だと思います:

 wavplay(y,fs/2,'PianoDecimation')

ファイル内のサンプルの半分を削除したので、元のファイルと同じ時間で再生するには、再生周波数を 1 秒あたりのサンプル数の半分に設定する必要があります。

于 2011-01-05T17:15:15.113 に答える
1

デシメートされた信号を再生するために、wavplay、audioplayer、または何か他のものを使用していますか? サンプル周波数を明示的に指定していますか?

関数は、パラメーターの 1 つ (2 番目のパラメーター) としてサンプル周波数を取ります。デシメートするとサンプル周波数が減少するため、それに応じてそのパラメーターを更新する必要があります。

また、データをプロットするときは、次のことを行う必要があります。

  1. 元のデータの N 倍の点をプロットします (N でデシメートする場合)
  2. 対応する x 軸の入力を提供します - t = (1/Fs:1/Fs:maxT) をお勧めします。ここで、maxT はプロットする最大時間であり、更新された Fs を使用すると #1 に対処します。時間ステップ (信号と一致しない場合は、必ず t を転置してください)

チャープと間引きチャープを再生する例を追加しました (このチャープは標準の MATLAB インストールの一部です)。間引いたバージョンを増幅しました。tic と toc は、経過時間が等しいことを示しています (プロセッサの負荷などの変動の範囲内)。これは、decim = 3 などでも機能することに注意してください。

負荷チャープ

inWav = y;
inFs = Fs;

デシム = 2;

outWav = デシメート (inWav,decim);
outFs = inFs/デシム;

tic, wavplay(inWav,inFs),toc
一時停止(0.2)
tic,wavplay(outWav*decim^2,outFs),toc

関数 'decimate' は実際にチャープ音を台無しにします (そのサンプル レートはそもそもあまり高い周波数ではありません) が、おそらくこのようなものを表示しようとしているのでしょう...

于 2010-12-28T22:36:19.470 に答える