Jump to content

Meia Onda sinusoidal de diodo


Harzeus
 Share

Recommended Posts

Boas!

O problema é o seguinte: é suposto fazer 3 graficos em matlab de ondas sinusoidais, no qual se tem que fazer a onda normal (vs), meia onda (vmo) e onda completa (voc). O problema está na realização da meia onda, em que na minha opinião terá que ser feita através de condições, mas não consigo lá chegar pois as minhas bases de matlab são muito reduzidas.

Agradecia algumas ajudas da vossa parte.

Deixo em baixo os dados e o que já tenho feito.

% Dados %
vef=15;
f=80;
dt=0.01/50;
w=2*pi*80;
vm=15*sqrt(2);

% Tempo espaçado 
t=0 : dt : 0.03;

% Onda %
vs=vm*sin(180*pi*t);

% Meia Onda %    (é aqui que está o problema)!!! - basicamente o que preciso fazer é passar a parte negativa da onda vs para zero.



% Onda Completa %
voc=abs(vs);

% Graficos %
plot(t, vs); grid on 
plot(t, vmo); grid on
plot(t, voc); grid on
Link to comment
Share on other sites

Há várias coisas que te podem ajudar a resolver o teu problema. Quando tens um array em matlab e realizas uma operação lógica, ele devolve-te um array com 1's nos elementos que respeitam a condição, e 0 nos que não respeitam. Por exemplo:

v = [3 4 5 2 2 3 2];
x = (v == 2);

O array x fica [0 0 0 1 1 0 1]. Um aspecto interessante disto é que podes usar estes arrays lógicos para aceder e alterar outros arrays, já que quando usas um array lógico como índice de outro array, ele só devolve/altera os elementos que no array lógico valem 1. Por exemplo:

v(x) = [0 100 200];

Faz com que v passe a ser [3 4 5 0 100 3 200]. Repara que o número de elementos no array que foi atribuído ([0 100 200]) tem que ser igual ao número de elementos iguais a 1 no array x.

Um truque interessante é que se quiseres fazer com que todos os elementos sejam iguais a um determinado valor, não precisas de usar um array. Por exemplo:

v(v==3) = 10;

Faz com que v passe a ser [10 4 5 0 100 10 200].

Estás a ver como é que podes utilizar isto para obter a tua meia onda?

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Estive a tentar com o teu codigo e até agora ainda não consegui defenir as variaveis de modo a tornar os valores negativos de vs em zero... o meu grande problema é não ter as bases de programação, e talvez esteja a complicar demasiado. Ao utilizar este metodo tenho que defenir os intervalos negativos e utilizar o teu metodo certo?

Link to comment
Share on other sites

A definição de meia onda é essa, portanto o teu array vmo tem que ser igual ao vs, com a excepção de que todos os números menores que 0 passam a ser 0.

Percebeste o que expliquei no meu post anterior? Se não, que partes é que não percebeste?

P.S.: Não precisas de responder se não quiseres, mas... porque é que estás a fazer um projecto em matlab sem bases de programação?

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Para responder a tua pergunta... estou no mesmo curso que tu e deixei programação para fazer. Agora no 2ºano do curso existem cadeiras em que é preciso saber programar em matlab, e estou a ter programação novamente, mas ainda não cheguei ao ponto onde se aprende estas coisas. Ou seja, vou andar sempre em desvantagem no que diz respeito a esta cadeira.

Quanto ao codigo que forneces-te, vou ver se consigo resolver dessa forma e assim que poder digo alguma coisa.

Link to comment
Share on other sites

estou no mesmo curso que tu

Nice! (Eu acabei o ano passado, em que universidade?)

mas ainda não cheguei ao ponto onde se aprende estas coisas

O paradigma de programação em Matlab é fundamentalmente diferente da programação em linguagens generalistas porque assenta muito nos conceitos de matrizes e vectores, e consegues efectuar operações sobre vectores inteiros sem ter que usar ciclos (que foi o que fiz no meu exemplo).

Quanto ao codigo que forneces-te, vou ver se consigo resolver dessa forma e assim que poder digo alguma coisa.

Aconselho-te a experimentar o meu código em vectores desenhados por ti, com pequenas variações para perceberes como funciona (o que é fácil porque podes usar a linha de comandos do matlab para fazer experiências e ver os resultados diretamente), e quando entenderes bem, tentar resolver o teu problema.

Alguma dúvida na razão na forma como funcionam os exemplos de código que apresentei, ou nas tuas experiências, não hesites em perguntar.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Faz aquilo que queres sim, mas repara que não precisas de colocar os valores que são 0 a 0 porque... já são zero 😄

A versão "curta" seria:

vmo = vs;
vmo(vmo < 0) = 0;

Repara que não precisas daqueles [ ] à volta dos arrays. Eles só têm utilidade quando estás a construir um array a partir de outros arrays, ou de números.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.