Determinación de la respuesta en frecuencia a largo plazo (LTA)
Enviado por María Jesús García García • 29 de Octubre de 2022 • Práctica o problema • 1.078 Palabras (5 Páginas) • 65 Visitas
[pic 1][pic 2][pic 3]
PROBLEMA 1
Determinación de la respuesta en frecuencia a largo plazo (LTA).
Para realizar este ejercicio se ha creado una función llamada ‘LTA’ que tiene como parámetros de entrada la señal (‘x’), el tamaño del bloque (‘tam’), el número de bloques (que vendrá ya con el solapamiento deseado, ‘Nbloques’) y la ventana a utilizar (‘v’). Por otro lado, tendrá como parámetros de salida el espectro LTA global (‘LTA_Global’) y una matriz que contendrá el espectro LTA por cada minuto de grabación (‘LTA_Min’). [pic 4]
function [LTA_Global, LTA_Min] = LTA(x,tam,Nbloques,v)
end
Para saber cuántas ventanas tenemos en toda la grabación se divide la longitud de la grabación entre el tamaño que va a tener cada ventana.[pic 5]
ventana = length(x)/tam; %Total de ventanas de la grabación
Como hay una ventana por segundo (ya que el tamaño de la ventana que le pasamos es igual a la frecuencia de muestreo), tenemos tantas ventanas como segundos tiene la grabación. Sabiendo esto, se pueden calcular cuantos bloques habrá en un minuto y el total de minutos de la grabación (para determinar el LTA para cada uno de ellos).
min = ventana/60; % Se sacan los minutos de la grabación[pic 6]
bloques_1min = floor((60*Nbloques)/ventana);% Se calcula el num de bloques que hay en 1 min
Mediante el siguiente bucle se calcula el número de bloque que corresponde a cada minuto de la grabación.
% Se calcula el bloque al que correspone el minuto 1, 2, 3...[pic 7]
posicion_bloques_1min = zeros(floor(min),1);
for k = 1:min
posicion_bloques_1min(k) = floor((60*Nbloques*k)/ventana);
end
Con este doble bucle se va calculando el LTA por minutos. Cuando ya se tiene calculado el primer minuto, se representa promediando por el total de bloques que hay en ese minuto y se almacena en la matriz LTA_Min (cada columna corresponde a un minuto) y así sucesivamente hasta completar todos los minutos.
salida=zeros(tam,1);[pic 8]
LTA_Min = zeros(tam,floor(min));
for i=0:Nbloques-1
for j = 1:length(posicion_bloques_1min)
if (i == posicion_bloques_1min(j)) %Se representa cada vez que llega al minuto
valores_promedios = salida./bloques_1min;%Se promedian los valores
LTA_Min(:,j) = valores_promedios; %Se almacenan los valores de cada representación (minuto) para luego hacer la media
% Se resetea para el siguiente minuto
salida=zeros(tam,1);
end
end
% Se coge cada ventana con solapamiento 50%
x1=x((tam/2)*i+1:(tam/2)*i+tam).*v;
% Se calcula el LTA[pic 9]
fft_bloque = fft(x1);
mod_fft = abs(fft_bloque);
salida = salida + mod_fft;
end
Para calcular el promediado, dependiendo si la grabación tiene más de un minuto (ya que si es menor la media será igual a la grabación) se hace la media utilizando la función de Matlab mean.
% Se calcula la media de los valores para representar[pic 10]
if (floor(min) == 1)
LTA_Global = LTA_Min';
else
LTA_Global = mean(LTA_Min');
end
Para probar el código, se ha utilizado como tamaño de la ventana el de la frecuencia de muestreo, el número de bloques se ha calculado teniendo un solapamiento del 50% y una ventana tipo Blackman.
[x,fs] = audioread('candy.mp3');[pic 11]
x = x(:,1); %Se coge solo 1 canal
tam = fs; %El tamaño de la ventana es igual a la frec. de muestreo
ventana = length(x)/tam; %Total de ventanas de la grabación
Nbloques=2*floor(ventana)-1;%al ser solapamiento 50% se multiplica
...