2014-09-04 2 views
0

Matlab을 사용하여 16 비트 .wav 파일을 낮은 비트 전송률로 양자화하려고합니다. wavread()을 사용하여 파일을 열었습니다. 그러나 여기부터 진행하는 방법을 모르겠습니다. 나는 어떻게 든 각 샘플 값을 (예를 들어) 7 비트 숫자로 "반올림"해야한다는 것을 알고 있습니다..wav 파일의 양자화

[file,rate,bits] = wavread('smb.wav'); 

파일 각 샘플의 값을 포함하는 1 열 행렬이다 : 여기에서 파일을 읽는 것 코드이다. 다음과 같이 해당 행렬의 각 항목을 반복 할 수 있습니다.

for i=1 : length(file) 
    % not sure what to put here.. 
end 

올바른 방향으로 데이터를 양자화 할 수 있습니까?

답변

2

는 -32768에서 32767까지 다양한 INT16 데이터가있는 경우, 그것은 할 수있다 간단에도 for 루프를 필요로하지 않습니다

new_data = int8(old_data./2^8); 

있다.

[file,rate,bits] = wavread('smb.wav','int8'); 

편집 :

스케일 복식의 경우는

new_data = int8(old_data.*2^7); 

하여야 할 wavread 문서는 당신도 처음부터 그 형식의 데이터를 검색 할 수 있습니다 제안 비트를 변경 비율 :

질문을 다시 읽은 후, 나는 또한 당신이 낮은 비트 ra te 이것은 데이터의 양자화가 아니라 샘플 속도를 줄이는 것을 의미합니다. 이 경우 다운 샘플링, 데시 메이트 및/또는 재 샘플링에 대한 설명서를 참조해야합니다. 그것들은 모두 비트율을 변경하는 MATLAB 함수에 내장되어 있습니다.

downsample(file,2) 

은 비트율의 절반입니다.

관련 문제