plot based on if and else condition

1 次查看(过去 30 天)
GoodEvening Sir/Mam,
I'm working in intesity of speech .I have classified it based om maximum to minimum energy but i dont know how to plot them.Please help me as possible
[x,fs] = audioread("sa.wav");
%end
si = 0.020;Fsi=si*fs;t=(0:1/Fsi);
frames=framing(x,fs,Fsi);
[r,c] = size(frames);
signal = zeros(size(0));
for i = 1:r
signal(i) = sum(frames(i,:).^2);
end
A=zeros(1,length(signal));
B=zeros(1,length(signal));
C=zeros(1,length(signal));
D=zeros(1,length(signal));
sig = max(signal);
for j=1:length(signal)
I(j)=(signal(j)/sig);
if(0.9<=I(j)<=1)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0.6<=I(j)<=0.8)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0.4<I(j)<=0.6)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0.2<=I(j)<=0.5)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0<=I(j)<=0.1)
A(j)=I(j);
plot(A,'b-');hold on
end
end

回答(4 个)

Torsten
Torsten 2022-8-14
MATLAB does not accept "double inequalities".
Thus instead of
if a < b < c
you will have to use
if a < b && b < c
Further, you should plot A completely after the if-clause, not after every value of j.
Further, you missed to classify the cases 0.8 < l(j) < 0.9, 0.4 < l(j) < 0.5 and 0.1 < l(j) < 0.2. Or should A remain 0 in these cases ?
  3 个评论
Malar Vizhi
Malar Vizhi 2022-8-14
Sir i have change my code but the plot is not changed
Torsten
Torsten 2022-8-14
I can't answer anything useful without the modified code ...

请先登录,再进行评论。


Malar Vizhi
Malar Vizhi 2022-8-14
[x,fs] = audioread("sa.wav");
%end
si = 0.020;Fsi=si*fs;t=(0:1/Fsi);
frames=framing(x,fs,Fsi);
[r,c] = size(frames);
signal = zeros(size(0));
for i = 1:r
signal(i) = sum(frames(i,:).^2);
end
%
% plot(signal,'bo');
A=zeros(1,length(signal));
B=zeros(1,length(signal));
C=zeros(1,length(signal));
D=zeros(1,length(signal));
sig = max(signal);
for j=1:length(signal)
I(j)=(signal(j)/sig);
if(0.9<=I(j)) && (I(j)<=1)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0.6<=I(j)) && (I(j)<=0.9)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0.4<I(j)) && (I(j)<=0.6)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0.2<=I(j)) && (I(j)<=0.4)
A(j)=I(j);
plot(A,'b-');hold on
elseif(0<=I(j))&& (I(j)<=0.2)
A(j)=I(j);
plot(A,'b-');
end
end

Malar Vizhi
Malar Vizhi 2022-8-14
If i give plot outside i got the output as same as signal
[x,fs] = audioread("sa.wav");
%end
si = 0.020;Fsi=si*fs;t=(0:1/Fsi);
frames=framing(x,fs,Fsi);
[r,c] = size(frames);
signal = zeros(size(0));
for i = 1:r
signal(i) = sum(frames(i,:).^2);
end
%
% plot(signal,'bo');
A=zeros(1,length(signal));
B=zeros(1,length(signal));
C=zeros(1,length(signal));
D=zeros(1,length(signal));
sig = max(signal);
for j=1:length(signal)
I(j)=(signal(j)/sig);
if(0.9<=I(j)) && (I(j)<=1)
A(j)=I(j);
% plot(A,'b-');hold on
elseif(0.6<=I(j)) && (I(j)<=0.9)
A(j)=I(j);
%plot(A,'b-');hold on
elseif(0.4<I(j)) && (I(j)<=0.6)
A(j)=I(j);
% plot(A,'b-');hold on
elseif(0.2<=I(j)) && (I(j)<=0.4)
A(j)=I(j);
% plot(A,'b-');hold on
elseif(0<=I(j))&& (I(j)<=0.2)
A(j)=I(j);
end
plot(A,'b-');
end
  1 个评论
Torsten
Torsten 2022-8-14
Yes, A is the signal, normalized to 1.
What else do you expect for the plot if you set
A = signal/max(signal)
(because this is what you do) ?

请先登录,再进行评论。


Malar Vizhi
Malar Vizhi 2022-8-16
Actually this is like energy detector.I want compare highest amplitude with each amplitude of signal and seperate it into region of highest and lowest. Now the plot should differentiate these regions.
  2 个评论
Torsten
Torsten 2022-8-16
编辑:Torsten 2022-8-16
Then you must plot something different from signal/max(signal) as you do.
Maybe a frequency distribution - I don't know:
A = signal/max(signal);
I = zeros(1,10);
for i = 1:10
I(i) = sum(A>=(i-1)/10 & A<i/10);
end
plot(1:10,I/numel(A))

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Audio I/O and Waveform Generation 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by