2012-01-18 10 views
2

私はだからここに私の質問 のための右のタイトルの質問は何本当にわからないんだけど 私は例えば、サンプルのNの数があるとし 。 。 。 N分散し「ダンプ」/「圧縮」データサンプル

N個のサンプルから(N-M)個のデータをダンプすることによって、サンプルのサイズをNからMに「縮小」したいと考えています。 私はダンプを可能な限り「分散」させたいと思っています。 私は100のサンプルを持ち、それを50サンプルに圧縮したいので、他のすべてのサンプルを捨ててしまいます。別の例では、データが100サンプルで、25サンプルに圧縮したいとします。私は100/25サンプルの各グループに1つのサンプルを捨てて、各サンプルとカウントを繰り返すことを意味し、カウントが4に達するたびにサンプルを破棄してカウントを再開します。 上記の4が例えば2.333であった場合、どうすれば問題になりますか?サンプルを分散して投棄するにはどうすれば小数点を扱うのですか?たくさん..

答えて

3

あなたが探している用語はresampling,downsamplingおよびdecimationです。一般的なケースでは、aliasingを危険にさらすことなく、データのサブセットを放棄することはできません。デシメーションの前にlow pass filterのデータを最初に必要とするため、新しいNyquist rateの上にエイリアスが付く情報がないようにする必要があります。

非整数値でダウンサンプリングする場合、上記の例のように2.333を使用する場合は、通常は整数の係数Mでアップサンプリングし、次に異なる整数の係数Nでダウンサンプリングすると、M/Nは必要なリサンプリング係数を与えます。あなたの例では、M = 3N = 7なので、係数3でアップサンプリングし、次に係数7でダウンサンプリングします。

0
  1. おかげであなたは減らす前に、あなたは通常あなたのサンプルで確認してください高い周波数がエイリアスされていないにするためにデータをフィルタのサンプリング・レートとデジタル信号処理

  2. について話しているように見えます周波数を低くする。たとえば、(4番目の値をとって)4つのサンプルごとに繰り返される周波数は、 "DC"またはゼロサイクルの周波数にエイリアスを付けます(たとえば、 "234123412341"はすべてのグループの最初から2,2 (231231231231)=> 231 ...(私が疲れているので間違っていない限り)3つのサイクルは、それ自身のようなサイクルに別名を付けます。
  3. あなたの「2.333」を何らかの分数として表すことができれば、それは7/3です。皆さんは1つずつ話していました。 4つのサンプル(1/4)あなたは7つのサンプルのうち3つを取っていると言います(取る、落とす、取る、落とす、取る、落とす、落とす)かもしれませんが、他の方法もあります。
0

周波数領域でエイリアスと歪みがなく、 、リサンプラを含むPaul R.の答えを見てください。再サンプリングの1つの方法は、補間された中間値を作成することを可能にするだけでなく、データを適切にローパスフィルタするウインドウ付きシン補間カーネルを使用するなど、補間である。

サンプリングされていない、オーディオ以外のデータの場合、いくつかのサンプルを均等に分散した形で放棄するだけで、周波数ドメインのノイズと歪みを気にする必要はありません。仕事:

float myRatio = (float)(N-1)/(float)(M-1); // check to make sure M > 1 beforehand 
for (int i=0; i < M; i++) { 
    int j = (int)roundf(myRatio * (float)i); // nearest bin decimation 
    myNewArrayLengthM[i] = myOldArrayLengthN[j]; 
}