2009-08-05 8 views
8

Sto provando a convertire un'immagine in un segnale audio in MATLAB trattandolo come uno spettrogramma as in Aphex Twin's song on Windowlicker. Sfortunatamente, sto avendo problemi a ottenere un risultato.Spettrogramma inverso A La Aphex Twin in MATLAB

Qui quello che ho in questo momento:

function signal = imagetosignal(path, format) 

    % Read in the image and make it symmetric. 
    image = imread(path, format); 
    image = [image; flipud(image)]; 
    [row, column] = size(image); 
    signal = []; 

    % Take the ifft of each column of pixels and piece together the real-valued results. 
    for i = 1 : column 

     spectrogramWindow = image(:, i); 
     R = abs(ifft(spectrogramWindow)); 
     % Take only the results for the positive frequencies. 
     signalWindow = R(1 : row/2.0); 
     signal = [signal; signalWindow]; 

    end 

end 

Così, mi sto prendendo Inverse trasformate di Fourier su colonne di mia immagine e poi metterli insieme per formare un segnale. Inoltre, questa funzione utilizza gli strumenti di elaborazione delle immagini per MATLAB per la lettura delle immagini. L'obiettivo è di avere qualche variazione di

spectrogram(imagetosignal('image', 'bmp')); 

risultato in qualcosa che assomiglia all'immagine originale. Apprezzerei molto ogni aiuto! Sto solo imparando l'elaborazione del segnale, quindi non essere sorpreso se c'è un equivoco evidente. Grazie!


Edit: Grazie Dave! Ho funzionato! Ho finito con questo:

function signal = imagetosignal(path, format) 

    % Read in the image and make it symmetric. 
    image = imread(path, format); 
    image = [image; flipud(image)]; 
    [row, column] = size(image); 
    signal = []; 

    % Take the ifft of each column of pixels and piece together the results. 
    for i = 1 : column 

     spectrogramWindow = image(:, i); 
     signalWindow = real(ifft(spectrogramWindow)); 
     signal = [signal; signalWindow]; 

    end 

end 

alt textalt text

+0

Quindi, qual è esattamente il problema che stai avendo? – gnovice

+0

Sulla via del ritorno, la metà superiore dell'immagine è effettivamente mancante, e ciò che rimane sbavature verso l'alto orribilmente. –

+0

Felice che funzioni. Sentiti libero di scegliere la mia risposta;) –

risposta

6

Ci sono alcune piccole idee sbagliate qui.

andrò attraverso i problemi in ordine cronologico, non la gravità:

1) fuori per uno errore nel calcolo della spectrogramWindow (immagine)

La prima voce di matrice dovrebbe essere il componente di 0Hz, il successivo è N Hz. L'elemento finale dell'array dovrebbe essere il componente di -N Hz. Tuttavia, hai calcolato 0Hz.

Non sono sicuro della sintassi MATLAB, ma se si capovolge l'immagine come si dispone e quindi si eliminano le righe superiore e inferiore prima di aggiungerla all'originale, è necessario impostarla.

In alternativa, è possibile considerare NON aggiungere l'immagine a se stessa e dopo aver estratto Spettrogramma Finestra dall'immagine, applicando una funzione per renderla simmetrica Hermitiana.

2) Assumere l'ABS dell'IRI. Non c'è bisogno. Non farlo.

Ciò che si ottiene dall'iFFT, se l'iFFT ottiene l'input corretto, è completamente reale.

Stai visualizzando valori complessi perché l'input non è EFFETTIVAMENTE simmetrico eremita, come descritto sopra. Non usare mai Abs(). Se devi imbrogliare, estrai la parte Real, che non ripiega nella spazzatura dal componente immaginario.

3) Stai buttando via la seconda metà del segnale.

Una volta ricevuto l'output dall'iFFT, rappresenta il segnale che hai richiesto. Non pensarci in termini di frequenze, è ora una serie temporale audio. Mantieni il tutto.

Ecco come la vedo io andare:

spectrogramWindow = image(:, i); 
spectrogramWindow = [spectrogramWindow;reverse(spectrogramWindow(skip first and last))] 
signalWindow = ifft(spectrogramWindow); 
signal = [signal; signalWindow]; 
1

Basta ricercare la stessa cosa e ho trovato questo script perl.Pensavo che il collegamento ti piacesse.

http://devrand.org/show_item.html?item=64&page=Project

+1

Link non funziona più. È, tuttavia, disponibile su Internet Archive: http://web.archive.org/web/20120224061437/http://devrand.org/view/imageSpectrogram – wizzwizz4