divide audio signal into frames
이전 댓글 표시
hi all,
i've 2second audio signal, i want to divide it into 20 frames and each frame is 100ms length.
for i = 1:100:2000
%do process
end
did i write the right code? or is there any other way to divide it? really need ur help...
thank u
채택된 답변
추가 답변 (2개)
Walter Roberson
2011년 12월 21일
That code is probably not correct, as it does not take in to account the sampling frequency and instead implicitly assumes that the data was sampled at 1 ms per sample which would be a sampling rate of 1000 Hz.
When Fs designates your sampling frequency, 100 ms would be Fs/10 . That will probably be an integer, but better would not be to assume that.
But being lax for a moment,
windowsize = Fs/10;
trailingsamples = mod(length(YourSignal), windowsize);
sampleframes = reshape( YourSignal(1:end-trailingsamples), windowsize, []);
Now the columns of sampleframes will be the individual frames, such as sampleframes(:,3) for the third frame.
댓글 수: 3
prasanna patil
2013년 3월 12일
편집: Walter Roberson
2013년 3월 12일
sir, i am getting trouble in last line of ur code.
sampleframes = reshape( YourSignal(1:end-trailingsamples), windowsize, []);
the error is ->> Error using reshape & Size arguments must be real integers.
and then i tried
>>sampleframes = reshape(x(1:end-trailingsamples), windowsize, [:,3]);
then i got this error.
Error: Unexpected MATLAB operator.
can u plz help me sir?
Walter Roberson
2013년 3월 12일
That code is for the case where Fs/10 is an integer. If it is not an integer, then you need to define what it means to divide into 100 ms frames.
prasanna patil
2013년 3월 13일
yeah sir, it worked... thank u...
saibaba
2013년 4월 6일
i am doing a project on "speech enhancement" am also using the same process but am not understanding it clearly what am i using u use round for the length of the signal but i use the floor does it make any difference. i want to post my code can anyone explain what is happening in it......
actually my aim is to reduce the noise using kalman filter and i got the output too... i want how its happening inner view of it... can anyone explain
matlab code:
[x,Fs4,bits4]=wavread('DEKF_white_stat_7db__noisy.wav'); xx=x; N=256; % frame length m=N/2; % of each frame of the moving distance lenth=length(x); % the length of the input signal count=floor(lenth/m)-2; x=x/max(abs(x)); t=(0:length(x)-1)/Fs4; s=1; p=11; a=zeros(1,p); w=hamming(N); y_temp=0; F=zeros(11,11); F(1,2)=1; F(2,3)=1; F(3,4)=1; F(4,5)=1; F(5,6)=1; F(6,7)=1; F(7,8)=1; F(8,9)=1; F(9,10)=1; F(10,11)=1; H=zeros(1,p); S0=zeros(p,1); P0=zeros(p); S=zeros(p); H(11)=1; s=zeros(N,1); G=H'; P=zeros(p); y_temp=cov(x(1:7680)); x_frame=zeros(256,1); x_frame1=zeros(256,1); T=zeros(lenth,1); for r=1:count x_frame=x((r-1)*m+1:(r+1)*m); if r==1 [a,VS]=lpc(x_frame(:),p); else [a,VS]=lpc(T((r-2)*m+1:(r-2)*m+256),p); end if (VS-y_temp>0) VS=VS-y_temp; else VS=0.0005; end
F(p,:)=-1*a(p+1:-1:2);
if r==1
S=[zeros(p,1)]; %state vector
P0=[zeros(p,p)]; %error covatiance
else
P0=P;
end
for j=1:256
if(j==1)
S=F*S0;
Pn=F*P*F'+G*VS*G';
else
S=F*S;
Pn=F*P*F'+G*VS*G';
end
K=Pn*H'*(y_temp+H*P*H').^(-1);
P=(eye(p)-K*H)*Pn;
S=S+K*[x_frame(j)-H*S];
T((r-1)*m+j)=H*S;
end
% End cycle calculation LPC parameters
end rt=137.78/128; figure(1); subplot(2,1,1); plot(t,x); xlabel('Time'); ylabel('Amplitude'); title('Original'); sound(x,Fs4,bits4); x1=T./rt; wavwrite(x1,Fs4,bits4,'kalman_denosed.wav'); [x1,Fs4,bits4] = wavread('kalman_denosed.wav'); x1=x1/max(abs(x1)); t=(0:length(x1)-1)/Fs4; subplot(2,1,2); plot(t,x1); xlabel('Time'); ylabel('Amplitude'); title('Denoised Kalman'); display('done'); sound(x1,Fs4,bits4);
sr=sum(x.^2) %Speech Power nro=sum((x-x1).^2) %Output Noise Power % nri=sum((speech-x).^2); %Input Noise Power % SNRi=10*log10(sr/nri) %Input SNR SNRo=10*log10(sr/nro) %Output SNR
카테고리
도움말 센터 및 File Exchange에서 Statistics and Linear Algebra에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!