문제

스펙트로 그램으로 취급하여 MATLAB의 오디오 신호로 이미지를 변환하려고합니다. Aphex Twin의 노래에서와 같이 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'));

원래 이미지처럼 보이는 무언가가 발생합니다. 나는 어떤 도움을 주셔서 대단히 감사하겠습니다! 나는 단지 신호 처리를 배우고 있으므로 명백한 오해가 있다면 놀라지 마십시오. 감사!


편집하다: 감사합니다 Dave! 나는 그것을 작동시켰다! 나는 이것으로 끝났다 :

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 text alt text

도움이 되었습니까?

해결책

여기에는 약간의 오해가 있습니다.

심각도가 아니라 발생 순서대로 문제를 겪을 것입니다.

1) SpectrogramWindow의 계산시 오프별 오류 (이미지)

첫 번째 배열 항목은 0Hz의 구성 요소이고 다음은 NHz입니다. 배열의 최종 요소는 -n hz의 구성 요소 여야합니다. 그러나 0Hz를 계산했습니다.

Matlab 구문은 확실하지 않지만 이미지를 뒤집은 다음 원본에 추가하기 전에 상단과 하단을 벗기면 설정해야합니다.

또는 이미지 자체를 추가하지 않고 이미지에서 스펙트로 그램 위로를 추출한 후에는 헤 미티 대칭으로 만들기 위해 일부 기능을 적용하는 것을 고려할 수 있습니다.

2) IFT의 복근 복용. 필요 없음. 그렇게하지 마십시오.

IFFT에서 나가는 것은 IFFT가 올바른 입력을 받으면 완전히 실제입니다.

위에서 설명한대로 입력이 실제로 헤 미티 대칭이 아니기 때문에 복잡한 값을보고 있습니다. abs ()를 사용하지 마십시오. 속임수를 틀어야한다면, 상상의 구성 요소에서 쓰레기로 접히지 않는 실제 부품을 추출하십시오.

3) 신호의 후반부를 버리고 있습니다.

IFFT에서 출력되면 요청한 신호를 나타냅니다. 주파수 측면에서 생각하지 마십시오. 이제는 오디오 시점입니다. 모든 것을 유지하십시오.

내가 어떻게 진행되는지는 다음과 같습니다.

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

다른 팁

똑같은 것을 조사 하고이 Perl 스크립트를 발견했습니다. 링크가 마음에 들었다고 생각했습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top