Witam
Czy mógłby mi ktoś udzielić wskazówki jak poprawnie wyskalować oś częstotliwości dla spektrogramu. Chodzi o to, ze gdy mam sygnał będący sumą dwóch częstotliwości to czy jest możliwość aby częstotliwości na osiach odpowiadały tym w rzeczywistości. Ważna informacja jest także taka, że nie znamy f próbkowania analizowanego sygnału, którym może być też plik wav.
Oto program:
Czy mógłby mi ktoś udzielić wskazówki jak poprawnie wyskalować oś częstotliwości dla spektrogramu. Chodzi o to, ze gdy mam sygnał będący sumą dwóch częstotliwości to czy jest możliwość aby częstotliwości na osiach odpowiadały tym w rzeczywistości. Ważna informacja jest także taka, że nie znamy f próbkowania analizowanego sygnału, którym może być też plik wav.
Oto program:
function [wvt_out,wvt1]=wvt(x,sfft)
%Transformata Wignera-Ville'a - WVT
%Parametry wejściowe:
% x-analizowany sygnał,
%Parametry wyjściowe:
% wvt_out-macierz wyjściowa WVT
% wvt1-wizualizacja WVT na płaszczyźnie TF,
%#####Parametry wejsciowe#####
x=x(:); % zamiana macierz->wektor
N=length(x); % długość sygnału
f=[zeros(N,1);x;zeros(N,1)]; % uzupełnienie zerami po obu stronach
%#####Macierz wyjściowa transformaty#####
wvt_out=zeros((sfft/2),N);
%#####Jądro przekształcenia WVT#####
for czas=1:N,
ww=0:(N-1);
tau_p=N+czas+ww; %
tau_m=N+czas-ww; %chwile pobrania próbek z jednej i drugiej "strony" sygnału
xx=zeros(N,1);
xx(1:N)=(f(tau_p)).*(f(tau_m)); %mnożenie próbek wejściowych przez siebie i przypisanie do macierzy xx
%xx(1:N)=0.5*(f(tau_p).*conj(f(tau_m))+f(tau_m).*conj(f(tau_p)));
efefte=fft(xx,sfft);
%wvt_out(:,czas)=(fft(xx,sfft)); %FFT i przypisanie do macierzy wyjściowej
wvt_out((1:(sfft/2)),czas)=efefte((1:sfft/2));
end
%#####Rysunek końcowy#####
wvt1=(abs(wvt_out).^2);
czas_max=max(max(wvt1)); %
czas_min=min(min(wvt1)); %określenie wartości maksimum i minimum dla wvt1
%f = (0:sfft-1)*fs/sfft;
image(0:N:N,0:N/2:N/2,256*(wvt1)/(czas_max-czas_min));