2013-04-16 2 views
1

이제 WAV 파일에서 직접 PCM 원시 바이트 배열을로드했습니다. 이제 원본 바이트 배열에 노이즈를 추가해야합니다. 내 요구 사항은 추가 된 노이즈에 대한 지식이 없으면 결과를 디코딩 할 수 없다는 것이고, 노이즈가 무엇인지 정확하게 알면 노이즈를 제거 할 수도 있습니다. 현재 아이디어는 원래의 바이트 배열을 짧은 배열로 변환하고, 2^-15와 2^15 사이의 무작위로 생성 된 숫자를 갖는 노이즈 짧은 배열을 생성하고이 2 개의 배열을 슬롯 단위로 추가합니다. 그러나이 방법은 원래 배열을 복구 할 수 있다고 보장 할 수 없습니다. 다른 사람이 나에게 더 나은 아이디어를 줄 수 있습니까? 미리 감사드립니다.PCM 원시 데이터에 노이즈를 추가하는 방법

답변

0

(사운드) 신호 S (t)가 있다고 가정합니다.

이 신호를 암호화하여 E (t)를 만들고 싶습니다.

Noise, N (t)를 추가하면됩니다.

S (t) + N (t) = E (t).

또한, E (t) -N (t) = S (t)이다.

이제 문제는 고유 한 '노이즈'를 생성합니다.

필자에게 시드 정보를받는 사람에게 전달할 수있는 의사 난수 생성기 (http://en.wikipedia.org/wiki/Pseudorandom_number_generator)를 통해이 작업을 수행합니다. 이제

, 같은 씨앗을 가지고 아무도 =의 S (t) 의견에


응답 N (t)는 E (t) -N (t)를 계산 할 수 있습니다 만들 수 있습니다 :

@ Bjorn : 일반적인 의미의 암호화가 아닙니다. 하지만 정수 C mod [0 - 2^16-1]가 있다고 가정합니다. 이제 같은 범위 [0-2^16-1]에 균일 한 임의의 정수를 더합니다. 결과는이 범위의 균일 한 무작위 정수이기도합니다. 따라서 임의 시퀀스 생성기의 품질에 따라 디코딩 할 수없는 신호를 만들 수 있습니다 (원래 중첩 신호가없는 경우 제외). (나는 인정할 것이다, 이것은 오버플로 없이는 그렇지 않을 것이다).

@OP : 전달 된 후 번호가 디코딩됩니다.

이진 문자열이 10101010이라고 가정합니다. 이제 11110000을이 문자열에 추가합니다. 결과는 01011010과 비슷해야합니다. 오버플로가 2^8에 위치합니다.

이제 01011010-11110000 반환 같은 초기 값 : 10101010 그래서이 오버 플로우가 실제로

이 * 이것은 당신이 다시 생성 할 수있는 고유 마스킹 신호를 사용하여 제공되는 원래의 신호를 마스킹에 지원 역할 받는 사람.

+0

몇 가지 : 1. 소리가 실제로 암호화되지 않습니다 (단어의 의미에서). 한 가지는 원래 사운드가 무엇인지 확인할 수 있습니다. 2. 오디오 포맷에 대해 생각할 필요가 있습니다. OP는 바이트에서 단락으로 변환 할 것을 제안합니다. 이것은 WAV 파일이 16 비트이고 단락이 플랫폼 (일반적으로는)에있는 경우 16 비트입니다. –

+0

@Bjorn 문제는 : 짧은 값에 임의의 값을 추가하면 결과가 2^15-1 인 short의 최대 값보다 클 수 있습니다.이 경우 원래 값을 다시 얻지 못할 수 있습니다. –

+0

멋진 작품, thx 젠체하는 사람 –

0

잡음은 정의상 신호의 (준) 임의 잡음입니다. 원래 신호를 완전히 복구 할 수는 없으며, 예를 들어 노이즈의 스펙트럼을 알고있는 경우에만 원래 신호를 억제하십시오.

관련 문제