RTV forum PL | NewsGroups PL

Jakich programów użyć do symulacji uśredniania próbek audio w AM?

program do symulacji obróbki audio ?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jakich programów użyć do symulacji uśredniania próbek audio w AM?

Goto page 1, 2  Next

sundayman
Guest

Fri Jul 05, 2013 5:34 pm   



Potrzebuję zrobić następującą rzecz :

Mam plik audio (taki tam sobie sygnał szumowy raczej, ale zróżnicowany w
czasie (modulowany AM powiedzmy) , o niewielkim paśmie - mniej więcej
100Hz - 2kHz .

I chciałbym zrobić symulację uśredniania tego sygnału, znaczy właściwie
poszczególnych próbek;

bierzemy kolejno 3 sample, uśredniamy - i dajemy jako wynik.
i tak dalej.

Przy czym , żeby to działało kołowo , tj;

1. out = (s1 + s2 + s3 ) /3
2. out = (s2 + s3 + s4 ) /3
3. out = (s3 + s4 + s5 ) /3
4. out = (s4 + s5 + s6 ) /3

itp.

I oczywiście potrzebuję to zrobić dla kilku różnych wartości ilości
próbek do uśredniania (2, 5, 10, itp).

Kiedyś robiłem symulacje przetwarzania pliku audio w jakiejś wersji
SPICE, no ale tam chodziło o określony układ elektroniczny (analogowy) -
jak by zrealizować czysto "matematyczny" proces to nawet nie mam pomysłu.
Poza tym dawno to było i już zapomniałem co i jak.

Macie pomysł, jak by to zrobić ? Może jakiś soft jest, gdzie można by
przeprowadzić takie operacje matematyczne na przebiegu ?

Wejściowy plik audio to kilkadziesiąt sekund, mono 48kHz chyba.

Potrzebne mi to do celów demonstracyjnych - żeby pokazać, jak działa
taka procedura (bo mam ją zaimplementowaną w pewnym urządzeniu, ale nie
da się łatwo tego "wyciągnąć" w postaci liczbowej...).

Help ?

sundayman
Guest

Fri Jul 05, 2013 5:49 pm   



Quote:
Pure Data?

no no, ciekawe... Zaraz zobaczę co to za dziwo.
Podobnież też matlab by się nadał, ale też nie znam...

RR
Guest

Fri Jul 05, 2013 5:52 pm   



W dniu 2013-07-05 19:34, sundayman pisze:

Quote:
Macie pomysł, jak by to zrobić ? Może jakiś soft jest, gdzie można by
przeprowadzić takie operacje matematyczne na przebiegu ?

Pure Data?

--
rry

Ministerstwo Propagandy
Guest

Fri Jul 05, 2013 6:00 pm   



a cool edit pro coś by nie poradził?

sundayman
Guest

Fri Jul 05, 2013 6:05 pm   



W dniu 2013-07-05 19:49, sundayman pisze:
Quote:

Pure Data?

fajne, ale mało intuicyjne Smile
No nic, czytam tutorial...

Michał Lankosz
Guest

Fri Jul 05, 2013 6:29 pm   



W dniu 2013-07-05 20:05, sundayman pisze:
Quote:
W dniu 2013-07-05 19:49, sundayman pisze:

Pure Data?

fajne, ale mało intuicyjne Smile
No nic, czytam tutorial...


Zamiast Matlaba możesz użyć Octave - to darmowy odpowiednik Matlaba.
Plik wave wczytuje się jedną komendą do zmiennej - wektora. Potem na tym
wektorze można operować jak na elementach tablicy w C - podobna
składnia, pętle for itd, chociaż środowisko "woli" (ze względu na
szybkość) operacje od razu na całych wektorach lub macierzach. W Twoim
przypadku to chyba nie ma żadnego znaczenia. Narysowanie najprostszego
wykresu to też jedna linijka.

--
Michał

sundayman
Guest

Fri Jul 05, 2013 6:29 pm   



Quote:
Pure Data?

Generalnie - rewelacja.
Jako muzyk to stwierdzam dodatkowo Smile
No, ale opanowanie tego świetnego narzędzia to mi zajmie duuuużo czasu...

A ja potrzebuję szybko machnąć kilka wykresów - więc wielki dzięki, będę
się tym bawić ale raczej w celach innych niż ten, o który mi teraz chodzi...


Quote:
Zamiast Matlaba możesz użyć Octave - to darmowy odpowiednik Matlaba.
Plik wave wczytuje się jedną komendą do zmiennej - wektora. Potem na tym
wektorze można operować jak na elementach tablicy w C - podobna
składnia, pętle for itd, chociaż środowisko "woli" (ze względu na
szybkość) operacje od razu na całych wektorach lub macierzach. W Twoim
przypadku to chyba nie ma żadnego znaczenia. Narysowanie najprostszego
wykresu to też jedna linijka.

No, zaraz zobaczymy Smile

Michał Lankosz
Guest

Fri Jul 05, 2013 6:56 pm   



W dniu 2013-07-05 20:29, sundayman pisze:
Quote:

Zamiast Matlaba możesz użyć Octave - to darmowy odpowiednik Matlaba.

No, zaraz zobaczymy :)


na próbę:
data = [1:1:12]
n=3;
b = ones(n,1)./n;
y = filter(b,1,data)

przetwarzanie wav:
[data,fs] = wavread("sample.wav");
n=3;
b = ones(n,1)./n;
y = filter(b,1,data);
wavwrite(y,"wynik.wav");

gdzie n to liczba uśrednianych próbek. Prawidłowe (dla Ciebie) wartości
wyjściowe zaczynają się od n-tej próbki, bo tu akurat pasował mi filtr
FIR o n współczynnikach, każdy równy 1/n, a filtr ten jest przyczynowy
(tzn bieżąca próbka /wyjściowa/ nie ma wiedzy o przyszłości).

Może być? O to chodziło? Wektor można też uciąć o te kilka próbek...

Średnik na końcu linijki powoduje, że nie wyświetla się w konsoli
zawartość zmiennej (wektora, macierzy). Wszystkie linijki zapisz do
pliku z rozszerzeniem .m, a następnie w konsoli Octave przejdź do
katalogu (komenda cd) i wpisz nazwę tego pliku - skryptu.
Nie próbowałem z plikami wav, ale błędu być nie powinno.
W razie czego http://www.gnu.org/software/octave/support.html - help w
html i pdf.

--
Michał

Michał Lankosz
Guest

Fri Jul 05, 2013 7:01 pm   



W dniu 2013-07-05 20:56, Michał Lankosz pisze:
Quote:
W dniu 2013-07-05 20:29, sundayman pisze:

No tak, nie doczytałem, że to ma być symulacja, czyli krok po kroku...
Też da się zrobić, tylko wymaga ze 3 razy tyle linijek.
Ma być na obrazku, czy same liczby?
To teraz.. kto pierwszy?

--
Michał

sundayman
Guest

Fri Jul 05, 2013 7:03 pm   



W dniu 2013-07-05 21:01, Michał Lankosz pisze:
Quote:
W dniu 2013-07-05 20:56, Michał Lankosz pisze:
W dniu 2013-07-05 20:29, sundayman pisze:

No tak, nie doczytałem, że to ma być symulacja, czyli krok po kroku...
Też da się zrobić, tylko wymaga ze 3 razy tyle linijek.
Ma być na obrazku, czy same liczby?
To teraz.. kto pierwszy?


chodzi o obrazek - wygląd przebiegu przed i po uśrednieniem

sundayman
Guest

Fri Jul 05, 2013 7:07 pm   



Quote:
W zasadzie operacja, o której mówisz, jest tożsama z filtrem
Savitzky'ego i Golaya o rzędzie równym 1 i długości równej 3 lub więcej.

no patrz, nie wiedziałem, że to ma taką mądrą nazwę Smile

Luke
Guest

Fri Jul 05, 2013 7:09 pm   



Dnia 2013-07-05 19:34, Użytkownik sundayman napisał:

Quote:
1. out = (s1 + s2 + s3 ) /3
2. out = (s2 + s3 + s4 ) /3
3. out = (s3 + s4 + s5 ) /3
4. out = (s4 + s5 + s6 ) /3

1. GNU R z jednym z kilku pakietów do czytania/pisania WAV
2. MATLAB z Signal Processing Toolbox
3. Może Scilab?
4. Goły język C z libsndfile

W zasadzie operacja, o której mówisz, jest tożsama z filtrem
Savitzky'ego i Golaya o rzędzie równym 1 i długości równej 3 lub więcej.
R i Matlab udostępniają do tego gotowe funkcje.

Luke

sundayman
Guest

Fri Jul 05, 2013 7:21 pm   



Quote:
chodzi o obrazek - wygląd przebiegu przed i po uśrednieniem

znaczy oczywiście, mając wygenerowany przetworzony plik audio, to o
obrazek nietrudno :)

Ale widzę, że bez pomocy, to niestety nie dam se rady Smile

Michał Smolnik
Guest

Fri Jul 05, 2013 8:08 pm   



W dniu 05.07.2013 19:34, sundayman pisze:
Quote:
Potrzebuję zrobić następującą rzecz :

Mam plik audio (taki tam sobie sygnał szumowy raczej, ale zróżnicowany w
czasie (modulowany AM powiedzmy) , o niewielkim paśmie - mniej więcej
100Hz - 2kHz .

I chciałbym zrobić symulację uśredniania tego sygnału, znaczy właściwie
poszczególnych próbek;

Potrzebne mi to do celów demonstracyjnych - żeby pokazać, jak działa
taka procedura (bo mam ją zaimplementowaną w pewnym urządzeniu, ale nie
da się łatwo tego "wyciągnąć" w postaci liczbowej...).

Help ?

www.processing.org

Sam niedawno robiłem coś podobnego. Liczyłem RMS sygnału audio.

Sama przyjemność, jest mnóstwo przykładów i bardzo dobry help.

Pozdrawiam,
--
Michał

Michał Lankosz
Guest

Fri Jul 05, 2013 9:57 pm   



Skrypt Octave, krok po kroku:

%[data,fs] = wavread("sample.wav");
data = [1:1:12]
len = length(data);
n=3;
y = [];
for i=1:len-3
mean = sum(data(i:i+n-1))./n
y = [y, mean]
t = [1:length(y)];
plot(t,data(1:i),"*b", t,y,"or")
pause
endfor

Znak % zamienia linię na komentarz

Jeśli chcesz rysować od razu całość np. tak:
http://img560.imageshack.us/img560/2783/kci.png

to tu masz kod:

%[data,fs] = wavread("sample.wav");
data = [1,2,3,4,4,4,8,7,2,3,4,3,3,3,1];
len = length(data);
n=3;
b = ones(n,1)./n;
y = filter(b,1,data);
t = [1:length(y)];
plot(t,data,"b*-", t,y,"ro-")
%stem(t,[data', y']);

Odkomentuj pierwszą linię i zakomentuj drugą aby pracować na danych z
wav. stem rysuje próbki, może bardziej przypadnie Ci do gustu, bo to w
końcu jest sygnał spróbkowany, nie ciągły. Usuwając "-" z funkcji plot
pozbędziesz się linii łączących. Oczywiście za długi ten sygnał nie może
być, bo wykres stanie się nieczytelny. Można wybrać z wektora jakiś
interesujący krótszy zakres. Częściowo pomoże narzędzie lupa. Na
wykresie możesz wprowadzać oznaczenia osi, danych, tytuł, siatkę, kolory.

kod wklejasz do pliku tekstowego np sundy.m i wywołujesz wpisując w
linii komend Octave: sundy.

--
Michał

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Jakich programów użyć do symulacji uśredniania próbek audio w AM?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map