2009-08-05 12 views
8

में मैं एक spectrogram as in Aphex Twin's song on Windowlicker रूप में यह इलाज द्वारा MATLAB में एक ऑडियो संकेत में एक छवि परिवर्तित करने के लिए कोशिश कर रहा हूँ। दुर्भाग्यवश, मुझे परिणाम प्राप्त करने में परेशानी हो रही है।रिवर्स spectrogram एक ला Aphex ट्विन MATLAB

यहाँ यह है कि मैं क्या समय है:

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 

तो, मैं मेरी छवि के स्तंभों पर उलटा फूरियर Transforms ले रहा हूँ और फिर उन्हें एक साथ डाल एक संकेत के रूप में। साथ ही, यह फ़ंक्शन छवियों में पढ़ने के लिए MATLAB के लिए छवि प्रसंस्करण टूलबॉक्स का उपयोग करता है। लक्ष्य कुछ है कि मूल छवि की तरह लग रहा में

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

परिणाम के कुछ बदलाव है। मैं किसी भी मदद की सराहना करता हूं! मैं सिर्फ सिग्नल प्रोसेसिंग सीख रहा हूं, इसलिए अगर कोई स्पष्ट गलत धारणा है तो आश्चर्यचकित न हों। धन्यवाद!


संपादित: धन्यवाद डेव! मुझे यह काम मिल गया! मैं इस के साथ समाप्त हो गया:

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

तो, मुसीबत आ रही हैं कि वास्तव में क्या है? – gnovice

+0

वापस रास्ते पर, छवि का शीर्ष आधा प्रभावी रूप से गायब हो रहा है, और क्या धुंध ऊपर से डरता रहता है। –

+0

खुशी है कि यह काम कर रहा है। मेरा जवाब चुनने के लिए स्वतंत्र महसूस करें;) –

उत्तर

6

वहाँ कुछ छोटे गलतफहमी यहाँ हैं।

मैं घटना के आदेश, नहीं गंभीरता में समस्याओं के माध्यम से जाना होगा:

1) spectrogramWindow (छवि) की गणना में बंद-एक करके त्रुटि

पहली सरणी प्रवेश होना चाहिए 0 हर्ट्ज का घटक, अगला एन हर्ट्ज है। सरणी का अंतिम तत्व -एन हर्ट्ज का घटक होना चाहिए। हालांकि, आपने 0 हर्ट्ज की गणना की है।

मुझे यकीन है कि मैटलैब सिंटैक्स नहीं है, लेकिन यदि आप छवि के रूप में फ्लिप करते हैं, और फिर इसे मूल में जोड़ने से पहले शीर्ष और निचली पंक्तियों को पट्टी करें, तो आपको सेट किया जाना चाहिए।

वैकल्पिक रूप से, आप छवि को स्वयं में शामिल नहीं करने पर विचार कर सकते हैं, और स्पेक्ट्रोग्राम निकालने के बाद छवि से विन्डो, इसे कुछ हर्मिटियन सममित बनाने के लिए कुछ फ़ंक्शन लागू करना।

2) आईएफटी के पेट को लेना। कोई जरुरत नहीं है। ऐसा मत करो।

आप IFFT क्या मिलेगा, अगर IFFT सही इनपुट हो जाता है, पूरी तरह से वास्तविक है।

आप जटिल मूल्यों को देख रहे हैं क्योंकि इनपुट वास्तव में ऊपर वर्णित अनुसार हर्मिटियन सममित नहीं है। कभी भी Abs() का उपयोग न करें। यदि आपको धोखा देना चाहिए, तो वास्तविक भाग निकालें, जो काल्पनिक घटक से कचरे में नहीं फोड़ेगा।

3) आप संकेत की दूसरी छमाही दूर मना रहे हैं।

एक बार जब आप IFFT, कि संकेत आप के लिए पूछा है का प्रतिनिधित्व करता है से उत्पादन मिलता है। आवृत्तियों के संदर्भ में इसके बारे में मत सोचो, अब यह एक ऑडियो टाइम-सीरीज़ है। पूरी बात रखो।

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

बस सटीक एक ही बात शोध और इस पर्ल स्क्रिप्ट नहीं मिली:

यहाँ मैं यह जा रहा है कि कैसे देखते हैं।सोचा था कि आपको लिंक पसंद आएगा।

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

+1

लिंक अब काम नहीं करता है। हालांकि, यह इंटरनेट पुरालेख पर उपलब्ध है: http://web.archive.org/web/20120224061437/http://devrand.org/view/image स्पेक्ट्रोग्राम – wizzwizz4

संबंधित मुद्दे