Demonstration des Effekts von Aliasing


7

Wie sieht das Signal aus, wenn wir die Nyquist-Rate nicht verwenden, um Aliasing aus einem Signal während der Abtastung zu entfernen?

Nehmen wir an, das Signal ist sinusförmig mit einer Frequenz von 500 Hz und einer Amplitude von 2.

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

Wie kann ich das Aliasing in einem abgetasteten Signal identifizieren, wenn ich es abtaste (wobei t = nTs ersetzt wird, Ts = Abtastperiode und n die Anzahl der Abtastungen darstellen) und die abgetasteten Signale mit einer anderen Abtastperiode mit dem Subplot-Befehl in MATLAB plottet?

Hier ist der Beispielcode, in dem zwei Signale aufgezeichnet wurden, eines mit der Nyquist-Rate und eines mit der Nyquist-Rate:

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)

und hier ist die Wellenform:

Geben Sie hier die Bildbeschreibung ein

Ich konnte das Aliasing nicht identifizieren. Wie hat sich das auf das Signal ausgewirkt, als die Nyquist-Rate nicht verwendet wurde?


Aufgrund eines Fehlers hat Ihr Beispiel tatsächlich nicht mit weniger als der halben Frequenz Ihres Testsignals abgetastet. Versuchen Sie, ein 1-MHz-Signal mit 1 Hz abzutasten.
hotpaw2

Antworten:


8

Sie können Aliasing nicht mit einer einfachen Sinuskurve bei einer bestimmten Frequenz identifizieren, und das ist in gewisser Weise der springende Punkt beim Versuch, es zu vermeiden. Sie können nicht wissen, ob die Sinuskurve, die Sie "betrachten", Hz oder Hz ist.Q2FsQ

Eine einzelne sinusförmige Komponente mit Alias ​​sieht genauso aus wie eine sinusförmige Komponente ohne Alias. Wenn Sie Aliasing erleben möchten, müssen Sie es entweder mit einer komplexeren Wellenform oder einer Sinuskurve versuchen, die sich mit der Zeit ändert.

Eine Möglichkeit, "Aliasing zu erleben", besteht darin, ein Zwitschern auf folgende Weise zu unterschätzen:

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?

Im Allgemeinen können Sie sich Sampling als Modulation vorstellen, da dies am Sample-and-Hold- Element eines ADC-Wandlers effektiv geschieht .

Auf diese Weise können Sie Konzepte wie beispielsweise Unterabtastung (und Anwendungen, bei denen es völlig in Ordnung ist, mit niedrigeren als den Nyquist-Raten abzutasten) leichter verstehen . Sie können aber auch eine WAV-Datei in MATLAB (mit 'wavread') laden, die ein komplexeres Signal enthält, und bevor Sie es mit 'soundsc' anhören, multiplizieren Sie es einfach mit einer "Rechteck" -Welle * (möglicherweise möchten Sie die Suchfunktion 'Quadrat') mit einer Frequenz, die niedriger ist als die der WAV-Datei . Dies wird effektiv die (unerwünschte) Schlüsseleigenschaft des Aliasing einführen, nämlich diese Faltung des Spektrums . Das Ergebnis ist nicht sehr angenehm, daher sollten Sie die Lautstärke Ihrer Lautsprecher niedrig halten.Fs

Ich hoffe das hilft.

* EDIT: Offensichtlich gibt "square" ein Quadrat mit einer Amplitude im Intervall [-1,1] zurück. Bevor Sie es mit Ihrem Signal multiplizieren, ist es besser, es neu zu skalieren als:

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

Sie haben die richtige Idee, aber ein wesentlicher Fehler war, Ihre Ergebnisse durcheinander zu bringen.

n=0:1/Fs:1;

Indem Sie die Zeit inkrementieren 1 / Fs machen, machen Sie implizit die Zeiteinheiten Sekunden. Mit anderen Worten, "0" ist 0 Sekunden und "1" ist 1 Sekunde.

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

Wenn Sie die Sinusfrequenz durch Fs normalisieren, nehmen Sie implizit an, dass die Abtasteinheit 1 / Fs Sekunden beträgt. Aus diesem Grund haben Sie viele Proben für einen einzelnen Sinuszyklus erhalten, als Sie nur zwei Proben pro Zyklus haben wollten (die Nyquist-Rate). Übrigens ist jede Probeneinheit in Ordnung (1 Sekunde oder 1 / Fs Sekunde), Sie müssen nur konsistent sein.

Hier ist mein Versuch, was ich denke, dass Sie beabsichtigt haben.

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)

Ich habe die "Sünde" in "cos" geändert, weil sie alle sinusförmigen Nullpunkte anstelle der Spitzen traf. Geben Sie hier die Bildbeschreibung ein


0

Ich denke, Sie müssen die Häufigkeit der Größe erhöhen oder weitaus größere Schritte bei der Probenahme verwenden.

Das Aliasing wird nicht angezeigt, wenn Sie eine sehr reibungslose Funktion haben. Beispielsweise führt eine konstante Funktion nicht zu einem Aliasing, egal welche Stichprobe Sie verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.