Wpis z mikrobloga

#programowanie #matlab
Mircy, mam problem.
mam tyle kodu:
x=(0:0.001:2.*pi);
x1=size(x);
x2=x1(1,2);
y=sin(x);
l=3; 'przetwornik';
n=(2.^l); 'ilość przedziałów';
Q=[-1:1/n:1];
E=Q(2:2:end); %wybiera co 2 wynik
plot(x,E(1,1))
chciałbym w jakiś sposób znaleźć punkty przecięcia na osi x wykresu y=sin(x) i plot(x,E(1,1))
lub zwyczajnie znaleźć w których miejscach punkty z macierzy E znajdują się na wykresie y=sin(x)
Ktoś coś poradzi? ( ͡° ʖ̯ ͡°)
  • 6
@tangedenor:
1) Użyj funkcji arcsin(E(1,1)). Ta funkcja na wyjściu daje wartości z zakresu -pi/2 do pi/2. Sam generujesz x, więc wszystko co Ci zostaje to określenie które x należą do zakresu.
X= asin(E(1,1)):pi:konieczakresu;
X= X(X>poczatek
zakresu);

2) Rozwiązanie ogólniejsze:
Znalezienie punktów takich że:
idx =abs(x-E(1,1))<epsilon, epsilon dobierasz sam.
X=x(idx);
Y=y(idx);

Dla jednego przecięcia może znaleźć jednak kilka punktów.

3) Potraktowanie przebiegów jako łamane. Szukamy miejsc przecięcia między prostoliniowymi odcinkami. Między
@tangedenor: Jeszcze uwagi ogólne:
- Użyteczny wzór na sinusoidę to A\*sin(2\*pi\*f \*t), gdy używamy czestotliwości oraz A*sin(omega*t) dla częstości kołowej.
Sinusoida o częstotliwości 1kHz będzie miała wzór sin(2\*pi\*1000\*t)
gdzie t jest w sekundach.

-Jeśli chesz zrobić kwantyzację to nie potrzebujesz wyznaczać miejsc przecięć.

Wystarczy policzyć
Y=floor((y-min(y))/(max(y)-min(y))\*2^l);

Zamiast 2^l może być prawie dowolna inna liczba.
To zamieni sygnał z wartości min(y) do max(y) na numer kwantu od od 0 do 8. Nie
@Akant: Cumplu, mógłbyś podpowiedzieć jeszcze raz? : )
mam zrobioną macierz z samych zer
np: A=zeros(7,3)
i chciałbym, żeby do kolumny numer jeden dać np: dwie piątki, do kolejnej cztery czwórki i tak dalej
żeby wyglądała np:
5 4 7
5 4 7
0 4 7
0 4 7
0 0 7
0 0 7
0 0 0

napisałem taki kod przykładowy:
clc
clear
A=[5,4,7] %liczby
C=[2,4,6] %ile razy mają być