plot based on if and else condition

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

Risposte (4)

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 Commenti

Thank you sir .I will try it
Sir i have change my code but the plot is not changed
I can't answer anything useful without the modified code ...

Accedi per commentare.

Malar Vizhi
Malar Vizhi il 14 Ago 2022
[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 il 14 Ago 2022
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 Commento

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) ?

Accedi per commentare.

Malar Vizhi
Malar Vizhi il 16 Ago 2022
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 Commenti

Torsten
Torsten il 16 Ago 2022
Modificato: Torsten il 16 Ago 2022
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))

Thanks a lot.I will try it

Accedi per commentare.

Categorie

Richiesto:

il 14 Ago 2022

Commentato:

il 16 Ago 2022

Community Treasure Hunt

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

Start Hunting!

Translated by