Problem with Square() for high frequenzies

1 view (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!