Hi this script exists for analysing Aliasing of an ideal square like distortion in context of oversampling. it works for a frequenzy of 1000 Hz but i need it to work at 20kHz. I dont really get why it doesnt work. The FFt needs the first 4 lines to work properly . thank u in advance xsmpling=2 T = 1; % simulation time in seconds fs =44100*xsmpling; Ts = 1/fs; % sampling frequency in Hz and sampling period Nmax = T*fs; n = 0:Nmax-1; % simulation time (norm.) f=20000%fsignal x = sin(2*pi*f*Ts*n); d = square(2*pi*f*n*Ts); %% Spectrum X = abs(fft(x)); X = X/max(X); %figure('Name','frequenzy domain','NumberTitle','off'); figure() plot((fs/Nmax)*(0:Nmax-1),20*log10(X),'LineWidth',2), grid hold on line([fs/2 fs/2],[-100 10],'LineWidth',1,'LineStyle','--') line([20000 20000],[-100 10],'color','green','LineWidth',1,'LineStyle','--') title('Analysis of Aliasing','FontSize',20) hold on axis([0 fs -60 0]); ax = gca; ax.FontSize = 20; xlabel('Frequency in Hz \rightarrow','FontSize',20) ylabel('Spectrum Magnitude in dB \rightarrow','FontSize',20) Y = abs(fft(d)); Y = Y/max(Y); %figure('Name','Chirp signal','NumberTitle','off'); plot((fs/Nmax)*(0:Nmax-1),20*log10(Y),'LineWidth',2), grid legend('Signal','Nyquist','20kHz','Distortion','FontSize',20) hold off
Kshitij Singh answered .
2025-11-20
To help you with the issue of analyzing aliasing for a 20kHz frequency using an ideal square wave, let's consider some factors that could be affecting your script:
Sampling Rate: Ensure that your sampling rate is significantly higher than 20kHz to avoid aliasing. A common practice is to use a sampling rate at least 10 times higher than the signal frequency.
Nyquist Theorem: According to the Nyquist theorem, the sampling rate should be at least twice the highest frequency present in the signal. For a 20kHz signal, you should have a sampling rate of at least 40kHz.
FFT Resolution: The resolution of the FFT depends on the number of points in the FFT. Ensure you have a sufficient number of points to achieve the desired frequency resolution.
Here's an example script that addresses these considerations for a 20kHz square wave:
% Define parameters
Fs = 200000; % Sampling frequency (200 kHz)
T = 1/Fs; % Sampling period
L = 10000; % Length of signal
t = (0:L-1)*T; % Time vector
% Define the square wave signal (20 kHz)
f = 20000; % Frequency of the square wave (20 kHz)
signal = square(2*pi*f*t);
% Perform FFT
Y = fft(signal);
% Compute the two-sided spectrum and then the single-sided spectrum
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
% Define frequency domain
f = Fs*(0:(L/2))/L;
% Plot the single-sided amplitude spectrum
figure;
plot(f, P1)
title('Single-Sided Amplitude Spectrum of Square Wave')
xlabel('f (Hz)')
ylabel('|P1(f)|')
xlim([0 50000]); % Limit x-axis to 50 kHz for better visualization
In this script:
Sampling Frequency (Fs): Set to 200 kHz to ensure a high enough sampling rate to avoid aliasing.
Square Wave Frequency (f): Set to 20 kHz.
FFT Calculation: Performed to analyze the frequency content of the square wave.