Problem with Square() for high frequenzies

Illustration
Timothy - 2021-04-02T10:52:39+00:00
Question: Problem with Square() for high frequenzies

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

Expert Answer

Profile picture of Kshitij Singh 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:

  1. 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.

  2. 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.

  3. 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:

matlab
% 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.


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!