۱۳۹۲/۰۴/۳۱, ۱۲:۴۳ ب.ظ
کدهای متلب تصحیح شده، به صورت زیر می باشند :
که در آن، خط زیر :
را به کدهای زیر تبدیل کرده ایم (برای رفع مشکل) :
مشکل هم از این موضوع ناشی میشد که Q دارای دو مقدار می باشد (به دلیل اینکه x دارای دو ستون است). به هر حال با کدهای بالا دیگر این مشکل ایجاد نمی شود.
برنامه رو اجرا کردم و دیگر پیام خطا نمایش داده نشد.
دقت کنید که در میان کدها، دستور pause نوشته شده و باید بعد از شنیدن فایل صوتی اول، کلید enter از کیبورد را بزنید تا ادامه برنامه اجرا گردد.
موفق باشید.
کد:
%quantization a sound signal
function []=demo_quant(inname,outname,N);
if nargin <3
disp('usage:sample_quant(inname,outname,N)');
disp('inname:input .wav file name');
disp('outname:output .wav file name');
disp('N:quantization leve, N>1');
return;
end;
%read in input signal
[x,Fs,N0]=wavread(inname);
xmin=min(x);
xmax=max(x);
Q=(xmax-xmin)/N
disp('N0,xmin,xmax,N,Q');
disp([N0,xmin,xmax,N,Q]);
%apply uniform quantization on each sample
x_size=size(x);
xq=x;
for nn=1:x_size(1)
for mm=1:x_size(2)
xq(nn,mm)=sign(x(nn,mm))*(floor((abs(x(nn,mm))+Q(mm)/2)/Q(mm))*Q(mm));
end
end
%compare sound quality
wavwrite(xq,Fs,N0,outname);
sound(x,Fs);
pause;
sound(xq,Fs);
%plot waveform over the entire period
t=1:length(x);
figure;plot(t,x,'r:');
hold on; plot(t,xq,'b-');
axis tight; grid on;
%plot waveform over a selected period
t=5000:5100;
figure;plot(t,x(5000:5100),'r:');
hold on; plot(t,xq(5000:5100),'b-');
axis tight; grid on;
end
که در آن، خط زیر :
کد:
xq=sign(x).*(floor((abs(x)+Q/2)/Q)*Q);
را به کدهای زیر تبدیل کرده ایم (برای رفع مشکل) :
کد:
x_size=size(x);
xq=x;
for nn=1:x_size(1)
for mm=1:x_size(2)
xq(nn,mm)=sign(x(nn,mm))*(floor((abs(x(nn,mm))+Q(mm)/2)/Q(mm))*Q(mm));
end
end
مشکل هم از این موضوع ناشی میشد که Q دارای دو مقدار می باشد (به دلیل اینکه x دارای دو ستون است). به هر حال با کدهای بالا دیگر این مشکل ایجاد نمی شود.
برنامه رو اجرا کردم و دیگر پیام خطا نمایش داده نشد.
دقت کنید که در میان کدها، دستور pause نوشته شده و باید بعد از شنیدن فایل صوتی اول، کلید enter از کیبورد را بزنید تا ادامه برنامه اجرا گردد.
موفق باشید.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.