forked from ThomasFeher/oms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsnr.m
60 lines (56 loc) · 1.21 KB
/
snr.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
%calculate signal to noise ratio
%usage: snr(signal,noise[,mode])
%mode: 1: standard mode 2: noise signal contains signal+noise
function retval = snr(signal, noise,mode)
if(~iscolumn(signal))
if(~isrow(signal))
error('signal must be a vector');
else
signal = signal.';
transpSig1 = 1;
end
end
if(~iscolumn(noise))
if(~isrow(noise))
error('noise must be a vector');
else
noise = noise.';
end
end
if(size(signal,2)~=1)
error('Signal must be column vector');
end
if(size(noise,2)~=1)
error('Noise must be column vector');
end
if(nargin<2)
error('usage: snr(signal,noise[,mode])');
end
if(nargin<3)
mode=1;
end
if(mode<1|mode>2)
error('mode must be 1 or 2');
end
signalSize = size(signal,1);
noiseSize = size(noise,1);
signalPower = (signal'*signal)/signalSize;
noisePower = (noise'*noise)/noiseSize;
if(mode==1)
retval = 10 * log10(signalPower/noisePower);
end
if(mode==2)
retval = 10 * log10(signalPower/(noisePower-signalPower));
end
function retval = iscolumn(input)
if((size(input,2)==1)&&(size(input,1)>=0))
retval = 1;
else
retval = 0;
end
function retval = isrow(input)
if((size(input,1)==1)&&(size(input,2)>=0))
retval = 1;
else
retval = 0;
end