Problem with Square() for high frequenzies

10 views (last 30 days)
Hi this skript 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

Accepted Answer

Cris LaPierre
Cris LaPierre on 24 Mar 2021
Edited: Cris LaPierre on 24 Mar 2021
The issue right now is that when f>=2192, you start getting zero values in your fft results. When you take the natural log of Y in your last plot command, they turn into -inf. These get ignored when you plot. The result is that only isolated points are getting plotted. Because you have not specified a marker style, you can't see them. To see them, add a marker style to your plot command.
plot((fs/Nmax)*(0:Nmax-1),20*log10(Y),'.-','LineWidth',2), grid
^^^^ % specifies a linestyle and markerstyle

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!