-
11. Data: 2010-12-06 20:44:06
Temat: Re: Generacja N-kana?owego dzwi?ku na 1-bicie.
Od: Jacek Czerwinski <...@...z.pl>
W dniu 2010-12-06 19:55, Sebastian Biały pisze:
> On 2010-12-06 17:53, Jacek Czerwinski wrote:
>> Jednobitowa była/jest modulacja delta, z tym ze trzeba "zapieprzac" N
>> razy szybciej od gornej granicy pasma.
>
> Z zapieprzaniem z taką prędkością żeby N było >20 nie ma problemu.
> Problem w tym, że dla takich prędkości blaszka zamiast uśredniać chyba
> będzie dalej generować w zakresie ultradzwięków ;)
>
>> Mocne sa schody, potem obwod dolnoprzepustowy. BYC MOZE sam glosnik
>> (srodkowoprzepustowy) jest wystarczajacym filtrem.
>
> To piezo nie głosnik. Jak bym miał głośnik to bym zrobil PWM powyżej
> slyszalności ;)
To RC. Przy tak dużym odstepie nie musi byc bardzo stromy.
>
-
12. Data: 2010-12-06 21:31:17
Temat: Re: Generacja N-kana?owego dzwi?ku na 1-bicie.
Od: Sebastian Biały <h...@p...onet.pl>
On 2010-12-06 21:44, Jacek Czerwinski wrote:
> To RC. Przy tak dużym odstepie nie musi byc bardzo stromy.
Nie rozumiemy się ;)
Jak bym mógł zrobić RC to bym zrobił. Rzecz w tym, że *ktoś* to zrobił
bez RC. Brzmi fatalnie, ale znacznie lepiej niż moje nieudolne próby na
identycznym hardware. Zastanawiam się jak.
-
13. Data: 2010-12-06 21:40:07
Temat: Re: Generacja N-kana?owego dzwi?ku na 1-bicie.
Od: Bronek Kozicki <b...@s...net>
On 05/12/2010 22:12, Sebastian Biały wrote:
> On 2010-12-05 21:49, A.L. wrote:
>> Nie wiem co to jest "dzwiek dwukanalowy"
>
> Np. "niezależne" generowanie f1=500Hz i f2=650Hz w posób, który pozwala
> je rozróżnić słuchem.
W dzieciństwie bawiłem się w programowanie dzwięku w ZX Spectrum w
asemblerze. To było jakieś 25 lat temu :)
Teraz zacząłbym tak:
1. przygotować tablicę częstotliwości (np stąd
http://www.phy.mtu.edu/~suits/notefreqs.html, albo wyliczyć
http://www.phy.mtu.edu/~suits/scales.html )
2. przygotować pętle "nieskończoną" dla częstotliwości bazowej (w
czasach Z80 robiłem to liczeniem cykli procesora), 100kHz albo więcej,
obsługującą wiele liczników. Im pętla bazowa szybsza i więcej liczników,
tym większe możliwości i dokładność dźwięku.
3. wyliczyć stosunek pożądanych częstotliwości do bazowej i w pętli
resetować jeden licznik dla tej częstotliwości, na każdy reset wysyłając
sygnał.
3. większa głośność - wysyłać sygnał wielokrotnie, ale bez zmiany
częstości (czyli nie tylko na reset, ale również na 2, 4, itd.) - nie
przesadzić bo powstanie brzęczenie.
4. łączenie częstotliwości - wykorzystać więcej liczników. Każdy
resetowany do wartości odpowiedniej do częstotliwości. Np jeżeli
częstotliwość bazowa to 100kHz, to dla A4 resetujesz l1 co
100000/440=227 , dla F4 grany w tym samym czasie resetuje licznik l2 co
286 itd.
5. spróbować dodać częstotliwości harmoniczne (overtones) dla
poprawienia jakości.
Czy to zadziała - nie wiem :)
B.
-
14. Data: 2010-12-07 00:36:26
Temat: Re: Generacja N-kanałowego dzwięku na 1-bicie.
Od: "Grzegorz Plywacz" <b...@o...pl>
Użytkownik "Sebastian Biały" <h...@p...onet.pl> napisał w wiadomości
news:idgrev$ce0$1@news.onet.pl...
> Tak, to nie pomyłka, powrót do ZXSpectrum i PCSpeakera.
>
> Mam do dyzpozycji jeden bit którym mogę sterować blaszką piezo.
>
> Dzieki które dobywam mogą być raczej tylko jednobitowe - włącz/wyłącz.
>
> Czy ktoś może *pamięta* czy istniały jakieś algorytmy mieszania dwóch fali
> prostokątnych o róznych częstotoliwościach aby uzyskac złudzenie dzwieku
> dwukanałowego na tym jednym bicie? Wydaje mi się że produkcje na
> ZXSpectrum potrafiły osiągać coś podobnego. Doskonale sobie zdaje sprawę z
> nikłej jakości dzwieku, nie chodzi o jego podnoszenie (w szczególnosci nie
> chodzi mi np. o filtr + pwm w celu osiągnięcia lepszych rozdzielczości).
> Interesuje mnie jak na 1 bicie zmieszać dwie fale prostokątne w sposób
> przyjemny dla ucha w stopniu w jakim przyjemne sa 2 fale prostokątne.
> Zakładam ze 2 kanaly dadzą radę się przeskalowac na N.
Zaciekawiło mnie ...
To z czym masz do czynienia, to mniej więcej mieszanie dwóch (lub więcej
sygnalow)
na nieliniowym elemencie. W tym przypadku nieliniowośc polega na tym, że
występuje
obcięcie (0 albo 1). O ile generując jedną częstotliwość w wyniku dostaniemy
mniej
więcej to co nadalismy, to już w przypadku dwóch fal o częstotliwościach
odpowiednio
f1 i f2, dostaniemy f1 + f2, f1 - f2 plus cały szereg harmonicznych 2f1 +
f2, etc...
Harmonicznymi bym sie nie przejmowal :) Cała zabawa polega na tym, aby mając
żadane dwie czestotliwości, które mają sie pojawić w widmie, dobrać te,
który
wygenerujemy. Np. chcąc zagrać 440 Hz i 1000 Hz nadamy np 720 i 280 Hz.
Acha i jeszcze jedno, zrobiłem kilka eksperymentów i wychodzi mi, że
najlepiej
wygenerować poszczególne sygnały a potem przed wysłanie do piezo zrobić ich
sumę modulo 2.
Oczywiście w przypadku większej ilości fal sytuacja ma tendencje do
komplikowania
się w tempie geometrycznym :)
A jakby kogoś interesowało, krótki kod w Matlabie dla zobrazowania:
clear all;
fs = 40000; % próbkowanie
len = 5; % 5 sekund
freqs = [720, 280];
T = freqs .^ -1;
s = zeros(len * fs, 1);
for n = 1 : length(s)
t = n/fs;
s(n) = 0;
for i = 1 : length(freqs)
if mod(t, T(i)) < (T(i)/2)
s(n) = not(s(n));
end
end
end
s = s - mean(s);
plot(linspace(0, fs, length(s)), (abs(fft(s))));
--
G.Pływacz
-
15. Data: 2010-12-08 08:43:39
Temat: Re: Generacja N-kana?owego dzwi?ku na 1-bicie.
Od: "slamazar" <p...@p...onet.pl>
> W dniu 2010-12-06 01:57, Michoo pisze:
> > NIE robi³em jeszcze nic takiego, wiêc to tylko moje przemy¶lenia.
> >
> >> W dniu 05.12.2010 23:12, Sebastian Bia³y pisze:
>
> > c) w teorii sygna³ów poszukaæ co siê dostaje z sumy
sygna³ów w
> > dziedzinie czêstotliwo¶ci - powinna byæ operacja, która przy
za³o¿eniu
> > jednakowych warunków pocz±tkowych da Ci chwilow±
czêstotliwo¶æ - potem
> > t± czêstotliwo¶æ ju¿ normalnie wygrywasz.
>
> Dzieki za odwolanie do teorii sygnalow. jednak nie wszyscy koduja
> szybciej niz czytaja.
na przyklad ja chyba raczej nie koduje szybko (trudno powiedziec)
- potrafie przykodowac tydzien czy dwa (az dostaje takiej jakby lekkiej
'goraczki' po czym przez kilka tygodni pozniej jestem zmeczony i nic
nie robie (tj robie cos innego - glownie ucze sie francuskiego);
przy tym ten okres przykodowania to tez nie jest duzo w sensie
kodu (kilka tysiakow linijek), chodzi raczej ze potrafie przykodowac
'cos nowego' dla siebie (np nigdy nie kodowalem raytracera zobacze
czy uda mi sie przykodowac troche raytracera itp) - wtedy rozbabruję
kod bo pilno mi zobaczyc jakies wynki i polega to wtedy nie tylko na
pisaniu ale tez na eksperymentowaniu;
z kolei gdy juz sobie dlugo wypocznę z miesiac i znowu nabieram checi by
pokodowac to elegancko poprawiam kodzik (np ostatnio nim go rozbabralem
udalo mi sie go tak wypucowac ze byl dosyc ladny jak odmalowane mieszkanie)
i z wlna zbieram pomysly co by tu jeszcze dopisac, za co sie wziac
(tak sprawy wygladaja teraz - gdy juz osiagnalem jakas wprawe w pisaniu,
i stoje na 'wlasnych fundamentach', a stalo sie to wzglednie niedawno z rok
temu (kluczowe poniekad bylo opracowanie mojej wlasnej koncepcji
podzialu kodu na tzw 'przestrzenie' ktore super sie sprawdzaja i mam
niezwykla jasnosc w kodzie) - kiedys bylo znacznie gorzej i kodowanie bylo
znacznie bardziej trudne i mgliste)
ŚLAMAZAR
>
> Jednobitowa by³a/jest modulacja delta, z tym ze trzeba "zapieprzac" N
> razy szybciej od gornej granicy pasma. Zerkam na wikipedia, akurat tam
> to jest podane w wyzszej matematyce, a zasada jest prosta: jestesmy
> ponizej zalozonego ksztaltu (np.sinusa), dajemy +1, jak powyzej to -1.
> Mocne sa schody, potem obwod dolnoprzepustowy. BYC MOZE sam glosnik
> (srodkowoprzepustowy) jest wystarczajacym filtrem.
>
> Nie wiem jakie masz uwarunkowania czasowe, moze byc ciezko czysto
> softwarowo zachowac regularna podstawe czasu. Jakis timer, przerwania
> itd by sie przydalo.
>
>
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
-
16. Data: 2010-12-08 15:18:14
Temat: Re: Generacja N-kanałowego dzwięku na 1-bicie.
Od: Kicer <...@...c>
Sebastian Biały wrote:
> Tak, to nie pomyłka, powrót do ZXSpectrum i PCSpeakera.
>
> Mam do dyzpozycji jeden bit którym mogę sterować blaszką piezo.
>
> Dzieki które dobywam mogą być raczej tylko jednobitowe - włącz/wyłącz.
>
> Czy ktoś może *pamięta* czy istniały jakieś algorytmy mieszania dwóch
> fali prostokątnych o róznych częstotoliwościach aby uzyskac złudzenie
> dzwieku dwukanałowego na tym jednym bicie? Wydaje mi się że produkcje na
> ZXSpectrum potrafiły osiągać coś podobnego. Doskonale sobie zdaje sprawę
> z nikłej jakości dzwieku, nie chodzi o jego podnoszenie (w szczególnosci
> nie chodzi mi np. o filtr + pwm w celu osiągnięcia lepszych
> rozdzielczości). Interesuje mnie jak na 1 bicie zmieszać dwie fale
> prostokątne w sposób przyjemny dla ucha w stopniu w jakim przyjemne sa 2
> fale prostokątne. Zakładam ze 2 kanaly dadzą radę się przeskalowac na N.
a jakby zrobić po prostu sumę logiczną (albo ex-or) tych dwóch sygnałów ?
Zaraz zobaczę co octave wyduma ;)
--
Michał Walenciak
gmail.com kicer86
http://kicer.sileman.net.pl
gg: 3729519
-
17. Data: 2010-12-08 15:26:29
Temat: Re: Generacja N-kanałowego dzwięku na 1-bicie.
Od: "Grzegorz Plywacz" <o...@u...o2.pl>
Użytkownik "Kicer" <...@...c> napisał w wiadomości
news:ido7jj$f0c$1@kushnir.sileman...
> Sebastian Biały wrote:
>
>> Tak, to nie pomyłka, powrót do ZXSpectrum i PCSpeakera.
>>
>> Mam do dyzpozycji jeden bit którym mogę sterować blaszką piezo.
>>
>> Dzieki które dobywam mogą być raczej tylko jednobitowe - włącz/wyłącz.
>>
>> Czy ktoś może *pamięta* czy istniały jakieś algorytmy mieszania dwóch
>> fali prostokątnych o róznych częstotoliwościach aby uzyskac złudzenie
>> dzwieku dwukanałowego na tym jednym bicie? Wydaje mi się że produkcje na
>> ZXSpectrum potrafiły osiągać coś podobnego. Doskonale sobie zdaje sprawę
>> z nikłej jakości dzwieku, nie chodzi o jego podnoszenie (w szczególnosci
>> nie chodzi mi np. o filtr + pwm w celu osiągnięcia lepszych
>> rozdzielczości). Interesuje mnie jak na 1 bicie zmieszać dwie fale
>> prostokątne w sposób przyjemny dla ucha w stopniu w jakim przyjemne sa 2
>> fale prostokątne. Zakładam ze 2 kanaly dadzą radę się przeskalowac na N.
>
> a jakby zrobić po prostu sumę logiczną (albo ex-or) tych dwóch sygnałów ?
> Zaraz zobaczę co octave wyduma ;)
Nie wyjdzie. Jak pisałem w poprzednim poscie, dostaniesz w efekcie prazki
o czestotliwosciach bedacych suma lub roznica czestotliwosci wejsciowych.
--
Grzegorz Pływacz
-
18. Data: 2010-12-08 15:43:47
Temat: Re: Generacja N-kanałowego dzwięku na 1-bicie.
Od: "Grzegorz Plywacz" <o...@u...o2.pl>
Użytkownik "Grzegorz Plywacz" <b...@o...pl> napisał w wiadomości
news:4cfd8185$0$27035$65785112@news.neostrada.pl...
>
> Użytkownik "Sebastian Biały" <h...@p...onet.pl> napisał w wiadomości
> news:idgrev$ce0$1@news.onet.pl...
>> Tak, to nie pomyłka, powrót do ZXSpectrum i PCSpeakera.
>>
>> Mam do dyzpozycji jeden bit którym mogę sterować blaszką piezo.
>>
>> Dzieki które dobywam mogą być raczej tylko jednobitowe - włącz/wyłącz.
>>
>> Czy ktoś może *pamięta* czy istniały jakieś algorytmy mieszania dwóch fali
>> prostokątnych o róznych częstotoliwościach aby uzyskac złudzenie dzwieku
>> dwukanałowego na tym jednym bicie? Wydaje mi się że produkcje na
>> ZXSpectrum potrafiły osiągać coś podobnego. Doskonale sobie zdaje sprawę z
>> nikłej jakości dzwieku, nie chodzi o jego podnoszenie (w szczególnosci nie
>> chodzi mi np. o filtr + pwm w celu osiągnięcia lepszych rozdzielczości).
>> Interesuje mnie jak na 1 bicie zmieszać dwie fale prostokątne w sposób
>> przyjemny dla ucha w stopniu w jakim przyjemne sa 2 fale prostokątne.
>> Zakładam ze 2 kanaly dadzą radę się przeskalowac na N.
>
> Zaciekawiło mnie ...
>
> To z czym masz do czynienia, to mniej więcej mieszanie dwóch (lub więcej
> sygnalow)
> na nieliniowym elemencie. W tym przypadku nieliniowośc polega na tym, że
> występuje
> obcięcie (0 albo 1). O ile generując jedną częstotliwość w wyniku dostaniemy
> mniej
> więcej to co nadalismy, to już w przypadku dwóch fal o częstotliwościach
> odpowiednio
> f1 i f2, dostaniemy f1 + f2, f1 - f2 plus cały szereg harmonicznych 2f1 +
> f2, etc...
> Harmonicznymi bym sie nie przejmowal :) Cała zabawa polega na tym, aby mając
> żadane dwie czestotliwości, które mają sie pojawić w widmie, dobrać te,
> który
> wygenerujemy. Np. chcąc zagrać 440 Hz i 1000 Hz nadamy np 720 i 280 Hz.
> Acha i jeszcze jedno, zrobiłem kilka eksperymentów i wychodzi mi, że
> najlepiej
> wygenerować poszczególne sygnały a potem przed wysłanie do piezo zrobić ich
> sumę modulo 2.
> Oczywiście w przypadku większej ilości fal sytuacja ma tendencje do
> komplikowania
> się w tempie geometrycznym :)
>
Przyszło mi do głowy inne rozwiązanie. Tak to jest jak się po północy coś
rozwiązuje. Nie widzi się najprostszych rozwiązaniań ;)
Otóż: generujesz fale sinusoidalne o zadanych częstotliwościach, dodajesz
je do siebie, a na końcu obcinasz ('0' gdy suma < 0, a '1' w przeciwnym wypadku).
Rozwiązanie skaluje się na dowolną ilość sygnałów i jest banalnie proste do
implementacji, a co najważniejsze daje całkiem przyzwoite widmo ;)
Pozdrawiam
--
Grzegorz Pływacz