logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Problem ze skalowaniem osi w spektrogramie

meganite 04 Wrz 2008 20:38 1166 0
REKLAMA
  • #1 5506555
    meganite
    Poziom 10  
    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:
    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));
  • REKLAMA
REKLAMA