Comment aurais-je sous-échantillonnage de un .fichier wav puis le reconstruire à l'aide de nyquist? - dans MATLAB
Cela est fait dans MATLAB 2010
Mon objectif est de montrer les résultats de: sous-échantillonnage, taux de nyquist/suréchantillonnage
D'abord, je dois diminuer la .fichier wav pour obtenir une incomplète/ou impartiale flux de données que je peux ensuite reconstuct.
Heres l'organigramme de ce qui im va être fait de Sorte que le flux de signal analogique -> échantillonnage filtre analogique -> ADC -> resample bas -> resample -> DAC -> reconstruction de filtre analogique
ce qui doit être réalisé:
F= Fréquence
F(Hz)=1/s) E. x. 100Hz = 1000 (Cyc/sec)
F(s)= 1/(2f)Exemple de problème: 1000 hz = la Plus haute
fréquence 1/2(1000 hz) = 1/2000 =
5x10(-3) sec/cyc ou un taux d'échantillonnage de
5ms
C'est mon premier projet de traitement du signal à l'aide de matlab.
ce que j'ai jusqu'à présent.
% Fs = frequency sampled (44100hz or the sampling frequency of a cd)
[test,fs]=wavread('test.wav'); % loads the .wav file
left=test(:,1);
% Plot of the .wav signal time vs. strength
time=(1/44100)*length(left);
t=linspace(0,time,length(left));
plot(t,left)
xlabel('time (sec)');
ylabel('relative signal strength')
**%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)
Quelqu'un peut me dire comment faire pour le rendre meilleur, et la procédure d'échantillonnage à diverses fréquences?
heres la .fichier wav http://www.4shared.com/audio/11xvNmkd/piano.html
EDIT:
%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);
Original:
http://www.4shared.com/audio/11xvNmkd/piano.html
Nouveau:
http://www.4shared.com/audio/nTRBNSld/PianoUs.html
Cela signifie que vous cliquez sur la coche verte sur une réponse à une de vos questions précédentes, comme l'a fait dans cette question. Elle attribue l'auteur des points supplémentaires et permet aux futurs utilisateurs & chercheurs de voir quelle réponse a été des plus utiles.
Le plus utile pour ma question sur le msp430 conseil oui. . .
OriginalL'auteur Andrew | 2010-12-28
Vous devez vous connecter pour publier un commentaire.
La meilleure chose à faire est de changer le taux d'échantillonnage par un facteur entier. Sous-échantillonnage se compose de l'exécution des données par l'intermédiaire d'un filtre passe-bas, suivi par le rejet des échantillons, tandis que suréchantillonnage consiste à insérer des échantillons, puis en exécutant les données par l'intermédiaire d'un filtre passe-bas (aussi connu comme un filtre de reconstruction ou d'interpolation de filtre). L'Aliasing se produit lorsque les étapes de filtration sont ignorés ou mal fait. Donc, pour montrer l'effet de l'aliasing, je vous suggère de simplement les jeter ou les insérer des échantillons requis, puis créer un nouveau fichier WAV à la nouvelle fréquence d'échantillonnage. À jeter des échantillons, vous pouvez le faire:
Pour créer des échantillons que vous pouvez faire:
Vous pouvez juste lire les écrits des fichiers WAV pour entendre les effets.
Que d'un côté, vous avez demandé des améliorations à votre code, je préfère pour initialiser le
t
vecteur det = (0:(length(left)-1))/fs;
.Les deux processus introduire aliasing, donc non, ils ne devraient pas le même son. Vous devez (a) s'assurer que le signal d'origine n'ont pas d'énergie au-dessus de fsDown/2 et (b) d'inclure le filtrage passe-bas étapes que j'ai mentionné ci-dessus, pour eux, pour le même son.
oui, j'ai ajouté un filtre passe-bas, mauvais modifier le code distance de sorte que vous pouvez voir.
Tout d'abord, que le filtre passe-bas est faible. Vous devez vous assurer qu'elle atténue tout au-dessus d'fsDown/2. Deuxièmement, dans le suréchantillonnage, vous devez l'appliquer à l'gonflée de données.
Le filtre passe-bas? il est appliqué sur les deux, mais ce serait un meilleur bas de lass filtre être à la place de l'actuel? et au lieu de sous-échantillonnage décimation serait mieux comme Clifford a dit. mathworks.com/help/toolbox/signal/decimate.html j'ai besoin de trouver un moyen de l'appliquer à un fichier audio plutôt une onde sinusoïdale.
OriginalL'auteur mtrw
La DSP de la technique que vous avez besoin est appelé la décimation.
Leur exemple de données n'est pas une onde sinusoïdale, c'est la somme de deux ondes sinusoïdales, et le signal audio est (comme n'importe quel autre signal) la somme de plusieurs ondes sinusoïdales de différentes amplitude, de fréquence et de phase. Il n'y a pas de différence entre l'utilisation d'une variable représentant un flux audio et un mathématiquement généré. Il vous suffit d'utiliser votre échantillon audio variable à la place de leur x variable. Matlab possède une fonction pour la lecture d'un fichier WAV dans une telle variable.
oui je sais, regarde mon nouveau code.
OriginalL'auteur Clifford