Extracción de características de la señal en Matlab
Soy un poco nuevo en Matlab y me gustaría obtener ayuda sobre cómo escribir un programa o una función que pueda calcular la energía/potencia de una señal dependiendo de si la señal es de energía o de potencia.
La función int de Matlab necesita una expresión simbólica como integrando y una variable simbólica como variable de integración. En tu ejemplo s y t son ambos vectores, y no puedes usar int en este caso. Si quieres calcular la potencia o la energía de señales de tiempo discreto, entonces necesitas utilizar las definiciones correspondientes:
Calcular la potencia de la señal python
Medir la potencia de una señalAbrir Live ScriptLa potencia de una señal es la suma de los cuadrados absolutos de sus muestras en el dominio del tiempo dividida por la longitud de la señal, o, equivalentemente, el cuadrado de su nivel RMS. La función bandpower permite estimar la potencia de la señal en un solo paso.Considere un chirp unitario incrustado en ruido blanco gaussiano y muestreado a 1 kHz durante 1,2 segundos. La frecuencia del chirp aumenta en un segundo desde un valor inicial de 100 Hz hasta 300 Hz. El ruido tiene una varianza de 0,012. Reinicie el generador de números aleatorios para obtener resultados reproducibles.N = 1200;
Utilice la función obw para estimar la anchura de la banda de frecuencias que contiene el 99% de la potencia de la señal, los límites inferior y superior de la banda y la potencia en la banda. La función también traza la estimación del espectro y anota el ancho de banda ocupado.obw(s,Fs);
y = polyval(ones(1,4),x) + randn(size(x));Debido a que el amplificador introduce distorsión de tercer orden, se espera que la señal de salida tenga:Utilice la función thd para visualizar el espectro de la señal. Anota la fundamental y los armónicos.thd(y,Fs);Utiliza bandpower para determinar la potencia almacenada en la fundamental y los armónicos. Exprese cada valor como un porcentaje de la potencia total y en decibelios. Muestra los valores en forma de tabla.pwrTot = bandpower(y,Fs,[0 Fs/2]);
Energía de una señal discreta
“Se captura una muestra registrada de la señal que contiene un número de muestras equivalente a 4T y se determina su FFT utilizando un tamaño de FFT igual a la longitud del registro (donde T es el periodo fundamental).
Suponiendo que el tamaño de la FFT coincida con 4 periodos de una forma de onda periódica, cada 4ª casilla de la FFT coincidirá con una frecuencia armónica, en particular el centro de la casilla 4k+1 de la FFT coincidirá con la kª frecuencia armónica.
La energía del kº armónico se calcula como la suma de las magnitudes al cuadrado de los 5 valores FFT consecutivos centrados en la bandeja 4k+1. Los valores adicionales de la FFT se incluyen en el cálculo de la energía del armónico para reducir la sensibilidad de la energía calculada a un error en la estimación de la frecuencia que podría dar lugar a que el pico del kº armónico se desplace fuera de la bandeja 4k+1.”
Potencia de vector en Matlab
He intentado este código para calcular la energía y la potencia de la función de entrada f(x). pero me da error. ¿cómo puedo solucionarlo? syms x y z energía pow t;f=input(‘introducir función: ‘,’s’);f = symfun(eval(f), x);f=f*conj(f);f = str2func([‘@(x)’ vectorize(f)]);z(t)=integral(y,-t,t);energy=limit(z(t),t=infinito);pow=limit(z/t,t=infinito)
Sugiero que en lugar de usar f = str2func([‘@(x)’ vectorize(f)]);que uses f = matlabFunction(f);Sin embargo, podrías simplemente comentar todo el manejo de f, ya que nunca usas f después de convertirla en un manejador de función.Tienesz(t)=integral(y,-t,t);En este punto tu y es una variable simbólica. integral() no se puede aplicar a variables simbólicas: tendrías que usar int(y, -t, t) — que es un valor que puedes predecir fácilmente que será 0, ya que la integral de y con respecto a y sobre y = a a y = b es 1/2 b^2 – 1/2 a^2 y con a = -t y b = -t eso va a ser 1/2 t^2 – 1/2 (-t)^2 que va a ser 0.
Gracias por ayudarme. He probado este código y funciona bien.syms x y z energía pow;f=input(‘enter function: ‘,’s’);f = symfun(eval(f), x);f=f*conj(f);f = matlabFunction(f);y(t)=int(f,-t,t);energy=limit(y(t),t,inf);z(t)=y(t)/(2*t);pow=limit(z(t),t,inf);