[octave] Charakterystyka amplitudowa.

0

Cześć.

Mam takie zadanie: "Napisz skrypt do wyznaczania charakterystyki amplitudowej dla sygnału rzeczywistego(wav)".
No więc tak, nigdy nie miałem styczności z tego typu zadaniami ale dzięki google dowiedziałem się, że wystarczy dany sygnał potraktować transformatą Fouriera.

Skrypt wygląda tak:

x = wavread("c:\audio.wav");
plot(x);

y = abs(fft(x));
plot(y);

I nie do końca wiem czy to rozwiązanie jest prawidłowe, więc prosiłbym o opinie kogoś bardziej obeznanego w temacie ode mnie.

0

Witam,

Podejście ( ogólnie rzecz biorąc ) jest dobre, z tym, że pojęcie "charakterystyki amplitudowej" odnosi się nie tyle do sygnału, ile raczej do obiektu / elementu ( "czwórnika" ), który ten sygnał
przenosi i przetwarza :

Jeżeli chce się użyć FFT, to badany układ ( "czwórnik" ) powinien być pobudzony szumem białym. Jak wygenerować szum biały przy użyciu takich programów jak Matlab czy Octave :

                                                                                      Pozdrawiam

                                                                                               JK
0

Ok, wezmę to pod uwagę. Dzięki za rady.

0

Po przeglądnięciu kilku plików pdf, do edukowałem się trochę i przyłożyłem się do tego zadania bardziej. Oto efekt moich wypocin:

clear;									%wyczyszczenie wszystkich dotychczasowych zmiennych				


[x, fs] = wavread("c:/audio.wav");		%wczytanie rzeczywistego dźwieku z pliku (x - dane, fs - czestotliwość próbkowania
n = length(x);							%ilość próbek

%t = (0:length(x)-1)/fs;				%wyznaczenie wektora czasowego
%x = x + rand(size(t));					%tutaj chciałem dodać szum biały ale coś nie chce działać...


figure(1);					

plot(x);								
title("Wczytany dźwięk rzeczywisty");
xlabel("Częstotliwość(Hz)");			
ylabel("Amplituda(Db)");			
legend("Widmo sygnału");				


dt = 1/fs;								%przyrost wartośći

fx = fft(x);							%oblicznie szybkiej transforamty Fourieara sygnału
nx = length(fx);						%ilość próbek

base = inv(dt)*(0:(n/2-1))/n;			%wyznaczenie osi częstotliwości
powerx = abs(fx(1:nx/2));				%wyznaczenie widma
powerxn = 2*powerx./nx;					%normalizacja odpowiedzi


figure(2);

plot(base, powerxn);
title("Charakterystyka amplitudowa wczytanego sygnału");
xlabel("Częstotliwość(Hz)");
ylabel("Amplituda(Db)");
legend("Charakterystyka amplitudowa");

Coś nie mogę dodać tam tego szumu białego, pewnie robię coś źle... Jakbyś mógł jeszcze zerknąć na poprawność tego rozwiązania, to byłbym wdzięczny.

0

Witam

Po pierwsze nie bardzo rozumiem, dlaczego wygenerowany szum ( np. szum
biały ) miałby być dodawany do czegokolwiek ( np. do przebiegu czasowego ).
Wygenerowany szum powinien zostać wyprowadzony "na zewnątrz" ; jeżeli
program nie współpracuje bezpośrednio z np. z jakimiś kartami dźwiękowymi,
to można użyć funkcji 'wavwrite'. Szum powinien pobudzić jakiś badany układ
( np. jakiś sprzęt : głośnik, słuchawki, itp., ewentualnie - jakąś symulację
badanego układu ). Powinna być zarejestrowana odpowiedź tego układu ( jako
szum "zdeformowany" przez jego charakterystykę amplitudową ) i dopiero ona
powinna być poddana analizie FFT ( w celu uzyskania widma ). Ponadto
warto się zastanowić nad sposobem generowania szumu poprzez składnię
typu : "rand ( size ( coś_tam ) )" . W programach takich jak Matlab, Scilab
czy Octave funkcja size zwraca wektor dwuelementowy, tj. zwraca wymiary
macierzy. Czy o to chodziło ?

                                   Pozdrawiam
                                   
                                    JK

1 użytkowników online, w tym zalogowanych: 0, gości: 1