plot based on if and else condition

4 ビュー (過去 30 日間)
Malar Vizhi
Malar Vizhi 2022 年 8 月 14 日
コメント済み: Malar Vizhi 2022 年 8 月 16 日
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))
Malar Vizhi
Malar Vizhi 2022 年 8 月 16 日

Thanks a lot.I will try it

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeOctave についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by