Square wave by vector multiplication
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I'm trying to build a square wave by using vector multiplication instead of using the "for" loop. It was suggested as multiply a 1xn vector with a nx1 vector. Here is my code constructing the square wave using the "for" loop:
N = 13;
f = 1000 * sin(2 * pi / (49 * N));
t = 0:0.0001:1;
n = 100;
A = 2;
square_wave = zeros(size(t));
for k = 1:n
if mod(k, 4) == 1
a_k = 4 * A / (k * pi);
elseif mod(k, 4) == 3
a_k = -4 * A / (k * pi);
else
a_k = 0;
end
square_wave = square_wave + a_k * cos(k * 2 * pi * f * t);
end
plot(t, square_wave);
xlabel('Time (s)');
ylabel('Amplitude');
title('Square Wave Approximation');
grid on
0 commentaires
Réponse acceptée
Voss
le 30 Mar 2024
k = (1:n).';
a_k = repmat([1;0;-1;0],n/4,1)*4*A./(k*pi);
square_wave = sum(a_k .* cos(k .* 2 * pi * f * t),1);
2 commentaires
Voss
le 1 Avr 2024
Modifié(e) : Voss
le 1 Avr 2024
This runs for me:
N = 13;
f = 1000 * sin(2 * pi / (49 * N));
t = 0:0.0001:1;
n = 100;
A = 2;
k = (1:n).';
a_k = repmat([1;0;-1;0],n/4,1)*4*A./(k*pi);
square_wave = sum(a_k .* cos(k .* 2 * pi * f * t),1);
plot(t, square_wave)
Double-check that you are running the same code.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!