エイリアシングの効果を示す


7

サンプリング中に信号からエイリアシングを削除するためにナイキストレートを使用しない場合、信号はどのように見えますか?

信号が正弦波で、周波数が500 Hz、振幅が2であると仮定します。

signal = 2*cos(2*pi*500*t)

それをサンプリングし(t = nTs、Ts =サンプリング周期、nはサンプル数を表す)、MATLABのsubplotコマンドを使用して、サンプリングされた信号を異なるサンプリング周期でプロットすると、サンプリングされた信号のエイリアシングをどのように識別できますか?

2つの信号をプロットしたサンプルコードは次のとおりです。1つはナイキストレートで、もう1つはナイキストレート未満です。

A = 2;
Fmax = 10;
Fs = 2*Fmax;
n = 0:1/Fs:1;
Cont = A*sin(2*pi*(Fmax/Fs)*n);
Cont1 = A*sin(2*pi*(Fmax/18)*n);
subplot(2,1,1)
stem(n,Cont)
hold on
stem(n,Cont1)

そしてここに波形があります:

ここに画像の説明を入力してください

エイリアシングを特定できませんでした。ナイキストレートを使用しなかった場合、信号にどのように影響しましたか?


エラーのため、実際の例では、テスト信号の周波数の半分未満でサンプリングしていませんでした。1 MHzの信号を1 Hzでサンプリングしてみてください。
hotpaw2

回答:


8

特定の周波数で単純な正弦波を使用してエイリアシングを特定することはできませんが、それはある意味でそれを回避しようとする全体のポイントです。「見ている」正弦波がQ Hzまたは 2FsQHz。

単一のエイリアスされた正弦波コンポーネントは、エイリアスされていない正弦波のように見えます。エイリアシングを体験したい場合は、より複雑な波形または時間とともに変化する正弦波のいずれかを使用して試行する必要があります。

「エイリアシングを体験」する1つの方法は、次の方法でチャープをアンダーサンプリングすることです。

Fs = 8000;t=0:(1./Fs):(5-1./Fs);p=2.*pi.*t; %Sampling Frequency, Time Vector, Phase Vector
y1 = chirp(t,0,5,Fs/2.0); %Create a chirp that goes from DC to Fs/2.0
spectrogram(y1); %Have a look at it through spectrogram, please pay attention at the axis labels. This is basically going to be a "line" increasing with time.
soundsc(y1,Fs); %Listen to it...It clearly "goes up" in frequency
y2 = chirp(t,0,5,Fs); %Now create a chirp that goes from DC to Fs
spectrogram(y2); %Have a look at it through spectrogram
soundsc(y2,Fs); %Listen to it...Do you "get" the folding of the spectrum?

一般に、サンプリングは変調と考えることができます。これは、ADCコンバーターのサンプル&ホールド要素で効果的に行われていることです。

これにより、たとえばアンダーサンプリング(およびナイキストレートよりも低いレートでサンプリングしても問題のないアプリケーション)などの概念をより簡単に理解できるようになります。しかし、より複雑な信号を含むWAVファイルを( 'wavread'を使用して)MATLABにロードし、 'soundsc'を使用してそれを聞く前に、「方形波」*を乗算するだけでもかまいません(関数を検索することもできます)。 'square')WAVファイルよりも低い頻度でFs。これにより、このスペクトルの折りたたみであるエイリアシングの重要な(不要な)特性が効果的に導入されます。結果はあまり心地よいものではないので、スピーカーの音量を下げておくとよいでしょう。

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

*編集:明らかに、 "square"は区間[-1,1]の振幅を持つ正方形を返すため、信号と乗算する前に、次のように再スケーリングすることをお勧めします。

aSquareWave = (square(100.*p)+1.0)/2.0 % Where p is the phase vector and here we are producing a square wave at 100Hz (given an Fs of 8kHz as above). aSquareWave's amplitude is now in the interval [0,1]

6

あなたは正しい考えを持っていますが、重要な間違いは結果を台無しにすることでした。

n=0:1/Fs:1;

時間の増分を1 / Fにすることで、暗黙的に時間単位を秒にします。つまり、「0」は0秒、「1」は1秒です。

Cont = A*sin(2*pi*(Fmax/Fs)*n);

正弦波の周波数をFsで正規化することにより、サンプル単位は1 / Fs秒であると暗黙的に想定されます。これが、サイクルごとに2つのサンプル(ナイキストレート)のみを意図した場合に、1つの正弦波サイクルで多くのサンプルを取得していた理由です。ちなみに、どちらのサンプル単位でも問題ない(1秒または1 / F秒)、一貫している必要があります。

これがあなたが意図したと思うことの私の試みです。

A = 2;
Fmax = 10;
Fs = 2*Fmax;
n=0:1/Fs:1;
Cont = A*cos(2*pi*Fmax*n);
Cont1 = A*cos(2*pi*Fmax*(20/18)*n);
subplot(2,1,1)
stem(n,Cont)
subplot(2,1,2)
stem(n,Cont1)

「sin」を「cos」に変更しました。これは、ピークではなく、すべての正弦波のゼロ点に当たっていたためです。 ここに画像の説明を入力してください


0

サイズの頻度を増やすか、サンプリングではるかに大きなステップを使用する必要があると思います。

非常にスムーズな関数がある場合、エイリアシングは表示されません。たとえば、定数関数は、どのようなサンプリングを使用してもエイリアシングを生成しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.