Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1209 Hz
1336 Hz
1477 Hz
1633 Hz
697 Hz
770 Hz
852 Hz
941 Hz
L=length(x);
P=1/L*(fft(x,N)).^2;
un
programa
function [P,f]=periodmodif(x,ventana,N)
% [P ,f]=periodmodif(x,ventana,N)
%
% Calcula N muestras del periodograma modificado de las
muestras en x
% N debe ser > que length(x)
%
% P: Periodograma propiamente
% f frecuencias correspondientes
if N <= length(x)
error('N debe ser > que length(x)');
else
k=0:N-1;
f=k./N;
L=length(x);
m=0:L-1;
U=1/L*(sum(ventana(m+1).^2));
P=1/(L*U)*abs(fft(x.*ventana,N)).^2;
end
que
%
% posi_picos son los indices del vector de entrada correspondientes a los
picos.
% (C) Antonio Albiol , 2003
%Primero descarto los valores menores que el umbral
umbral=max(x(:))*umbral/100;
x=x.*(x>umbral);
%Ahora buscar los mximos
%Primero creo un vector con dos valores muy pequeos en los extremos
xe=[-inf;x(:);-inf];
%Ahora calculo la derivada
d1=diff(xe);
ld1=length(d1);
%Ahora busco valores de la derivada de signo diferente consecutivos y que
sean mximos
p=find(sign(d1(2:ld1)).*sign(d1(1:(ld1-1)))<0 & sign(d1(1:ld1-1))>0);
function y = ring(x)
number = x;
numberstr = int2str(number);
% Sampling Frequency
fs = 8000;
% initializing arrays, 1200 samples
digit = 0:1199;
silence = zeros(1,1200);
disp('Calculating DTMF tones...');
% row sinusoids
sin697 = sin(2*pi*697*digit/fs);
sin770 = sin(2*pi*770*digit/fs);
sin852 = sin(2*pi*852*digit/fs);
sin941 = sin(2*pi*941*digit/fs);
% column sinusoids
sin1209 = sin(2*pi*1209*digit/fs);
sin1336 = sin(2*pi*1336*digit/fs);
sin1477 = sin(2*pi*1477*digit/fs);
% numbers
num1 = (sin1209+sin697)/2;
num2 = (sin1336+sin697)/2;
num3 = (sin1477+sin697)/2;
num4 = (sin1209+sin770)/2;
num5 = (sin1336+sin770)/2;
num6 = (sin1477+sin770)/2;
num7 = (sin1209+sin852)/2;
num8 = (sin1336+sin852)/2;
num9 = (sin1477+sin852)/2;
num0 = (sin1336+sin941)/2;
% an asterisk would be: (sin1336+sin941)/2);
% a pad would be: (sin1477+sin941)/2);
% insert a silence in the begining
y = zeros(1, 1200);
% fill the rest
for i = 1:length(numberstr)
num = str2num(numberstr(i));
switch num
case 0
dtmf = num0;
case 1
dtmf = num1;
case 2
dtmf = num2;
case 3
dtmf = num3;
case 4
dtmf = num4;
case 5
dtmf = num5;
case 6
dtmf = num6;
case 7
case 8
case 9
dtmf = num7;
dtmf = num8;
dtmf = num9;
otherwise
disp('O_o');
end
% insert the number samples
y = [y dtmf];
% insert the silence samples
y = [y silence];
end
wavwrite(y,fs,'ring.wav');
disp('Ringing number:');
disp(numberstr);
% play it
wavplay(y,fs);
disp('Happy talking');