反向频谱图拉的Aphex双床在MATLAB(Reverse Spectrogram A La Aph

2019-07-31 10:39发布

我试图通过将其视为一个频谱将图像转换成音频信号在MATLAB 中的Aphex双对Windowlicker歌曲 。 不幸的是,我遇到了麻烦的结果。

这是我目前所面对的:

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

所以,我对我的形象的列取逆傅立叶变换,然后把它们放在一起,形成一个信号。 此外,该功能使用图像处理工具箱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

Answer 1:

这里有一些小的误解。

我会在发生,没有严重的顺序经历的问题:

1)关接一个在spectrogramWindow的计算误差(图像)

第一阵列条目应该是0Hz时的部件,下一个是N赫兹。 所述阵列的最后一个元件应该是-N赫兹的分量。 但是,你已经计算为0Hz。

我不知道MATLAB的语法,但是如果翻转图像,你有,然后将其追加到原来之前剥去顶部和底部的线条,你应该设置。

另外,您也可以考虑不追加图像本身,从图像中提取spectrogramWindow,应用一些功能,使其埃尔米特对称之后。

2)以所述IFT的腹肌。 没必要。 不要那样做。

你得到了IFFT的,如果IFFT得到正确的输入,完全是真实的。

你看到复杂的值,因为输入实际上不是埃尔米特对称的,如上所述。 切勿使用ABS()。 如果你一定要骗,提取实部分,它不会从假想成分倍垃圾。

3)你把自己的信号下半年。

一旦你从IFFT得到输出,即表示您要求的信号。 不要在频率方面想起来了,这是现在的音频的时间序列。 保持整个事情。

以下是我看到它:

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


Answer 2:

只是研究同样的事情,发现这个perl脚本。 想你可能会喜欢的链接。

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



文章来源: Reverse Spectrogram A La Aphex Twin in MATLAB