5 votos

¿Cómo hago para alias intencionalmente una señal, y el intercambio de muestras funciona con un archivo de audio en MATLAB?

Mi objetivo es mostrar los resultados de:

  • ¿Cómo hago intencionalmente aliasing una señal?
  • undersampling
  • Nyquist tasa de muestreo y sobremuestreo

Soy el primero que va a obtener el código de MATLAB funcionando bien, entonces voy a volver a escribir para el MSP430.

En primer lugar tengo que reducir la resolución de la .archivo wav para obtener una incompleta o imparcial de flujo de datos que luego se pueden reconstuct. Aquí el diagrama de flujo:
analógico -> muestreo filtro analógico -> ADC -> remuestrear abajo -> aumenta -> DAC -> reconstrucción de filtro analógico

Este es mi primer procesamiento de la señal proyecto usando MATLAB (v2010), por lo que ser agradable. Código Original de abajo; se actualiza el código aquí.

    %Play decimated file ( soundsc(y,fs) ) 
%Play Original file ( soundsc(play,fs ) )
%Play reconstucted File ( soundsc(final,fs) )

[piano,fs]=wavread('piano.wav'); % loads piano
play=piano(:,1); % Renames the file as "play"

t = linspace(0,time,length(play));          % Time vector
x = play;
y = decimate(x,25);

stem(x(1:30)), axis([0 30 -2 2])   % Original signal
title('Original Signal')
figure
stem(y(1:30))                        % Decimated signal
title('Decimated Signal')

%changes the sampling rate

fs1 = fs/2;
fs2 = fs/3;
fs3 = fs/4;
fs4 = fs*2;
fs5 = fs*3;
fs6 = fs*4;

wavwrite(y,fs/25,'PianoDecimation');


%------------------------------------------------------------------

%Downsampled version of piano is now upsampled to the original
[PianoDecimation,fs]=wavread('PianoDecimation.wav'); % loads piano
play2=PianoDecimation(:,1); % Renames the file as "play

%upsampling
UpSampleRatio = 2;  % 2*fs = nyquist rate sampling
play2Up=zeros(length(PianoDecimation)*UpSampleRatio, 1);
play2Up(1:UpSampleRatio:end) = play2; % fill in every N'th sample

%low pass filter

ResampFilt = firpm(44, [0 0.39625 0.60938 1], [1 1 0 0]);


fsUp = (fs*UpSampleRatio)*1;
wavwrite(play2Up,fsUp,'PianoUpsampled');

%Plot2
%data vs time plot
time=(1/44100)*length(play2);
t=linspace(0,time,length(play2));
stem(t,play2)
title('Upsampled graph of piano')
xlabel('time(sec)');
ylabel('relative signal strength')



[PianoUpsampled,fs]=wavread('PianoUpsampled.wav'); % loads piano
final=PianoUpsampled(:,1); % Renames the file as "play"


%-------------------------------------------------------------
%resampleing
[piano,fs]=wavread('piano.wav'); % loads piano
x=piano(:,1); % Renames the file as "play"
m = resample(x,3,2);

**%this is were i would need to sample it at the different frequecys (both above and below and at) nyquist frequency.*I think.***

soundsc(left,fs) % shows the resaultant audio file , which is the same as original ( only at or above nyquist frequency however) 

¿Cómo puedo mejorar esto? ¿Cómo se muestra a diferentes frecuencias?

Tenga en cuenta que he crossposted esto es ASÍ, aquí.

3voto

Andrew Walker Puntos 9038

Si desea reducir la resolución de una manera que produce aliasing, acaba de tirar alguna fracción de las muestras, es decir, sólo mantener a cada 2ª muestra, etc.

Si desea reducir la resolución de una manera que no se alias, precede a la destrucción con un filtro de paso bajo de tener un corte por debajo de la frecuencia nyquist de la frecuencia de muestreo tendrás después de diezmar. Desde diezmando implica desechar las muestras y un ABETO de filtro de paso bajo, no tiene futuro la dependencia de sus resultados, usted no tiene que preocuparse de hacer una convolución de producto escalar para las salidas que sólo había descarte en la destrucción, en lugar usted puede simplemente saltar a la siguiente.

A upsample, insertar ceros entre la entrada de muestras (uso ceros, no se repiten los valores de entrada). Esto produce alias de frecuencias, para seguir con un filtro de paso bajo por debajo de la tasa de nyquist de la frecuencia de muestreo original. De nuevo, usted puede diseñar la convolución de cálculo para omitir el cero entradas.

Para los pequeños entero proporciones de la muestra tasas de descarte o cero de la inserción de las muestras y los filtros FIR funcionan muy bien. Para grandes proporciones, CIC filtros pueden ser preferibles, ya que puede ser calculada de manera eficiente en el uso de hardware de envolver binario de la computación (intencionalmente deje que los cálculos de desbordamiento!), a pesar de que tienen una función de sinc forma en lugar de rectangular respuesta de frecuencia, y por tanto necesita una limpieza de filtro para seleccionar sólo el área rectangular cerca de la punta de la sinc respuesta y/o compensar la caída de la sinc.

3voto

Dan Puntos 12178

Voy a comenzar por lo más fácil, y se acumulan.

F= Frequency

F(Hz=1/s) E.x. 100Hz = 1000 (Cyc/sec) F(s)= 1/(2f)

Example problem: 1000 hz = Highest frequency 1/2(1000hz) = 1/2000 = 
5x10(-3) sec/cyc or a sampling rate of 5ms

Si la más alta frecuencia de 1000Hz y se muestra con un período de 5 ms(500 hz) de la señal, que ya ha perdido una gran cantidad de su información. Usted está de muestreo en 1/4 de la tasa de nyquist. Para un 1000Hz de onda, debe de ejemplo en al menos 2000Hz, y es que en un mundo perfecto. Usted realmente necesita para ir un poco más rápido que este, debido a las limitaciones de esta tecnología, pero esto está más allá de lo que usted necesita saber.

¿Cuál es mi frecuencia nyquist?

Espera, ¿quieres decir que la Frecuencia de Nyquist o tasa de Nyquist?

Esta es, probablemente, pareciendo bastante trivial distinción, pero mucha gente se hace referencia a diferentes cosas cuando cambian los términos, algunas personas pueden controlar el "Symbol Rate" algunos pueden controlar la "Frecuencia de Muestreo", algunos puede controlar tanto(la suerte de los ingenieros).

Usted necesita para muestrear a una frecuencia que es mayor que el doble de su frecuencia más alta.

Si vas inferior de la señal, que se alias, esto es irreversible una vez que ha ocurrido, lo mejor que puedes hacer es filtrar el dañado parte de su señal, pero esto no recuperar la información, sólo elimina los corruptos de frecuencias.

La disminución de resolución en Matlab

Digamos que tiene su señal, que han evitado aliasing, y desea reducir la resolución a la mitad de los puntos. Esto es muy fácil en matlab. Echa un vistazo a la diezmar función. Esto va a manejar el desorden de asegurarse de que su por muestreo, a no introducir aliasing, a un costo. Cuando se filtra fuera de las frecuencias más altas, están perdidos. Esto es lo que pedimos cuando la mitad de tus puntos de datos. Usted puede utilizar el reducir la resolución de una función. Si usted tuvo las frecuencias más altas, se alias. Si usted sabe, no se debe de esas frecuencias no, siempre puedes usar el diezmar para asegurarse de que el ruido no colarse en su sistema.

Me gustaría entrar en más detalles, pero tuve que cortar mi corto como estoy fuera de tiempo para el día de hoy. Déjame un comentario si hay más de lo que sería de ayuda, y voy a volver y agregar más información. Estoy seguro de que yo no cubren todo lo que usted quería.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X