How would I drop a sample .wav file and then restore it using nyquist? - in MATLAB

All this is done in MATLAB 2010

My goal is to show results: undersampling, nyquist rate / oversampling

First I need to reduce the size of the .wav file to get an incomplete / or unbiased data stream that can then be restored.

There is a flow chart of what they should do. Thus, the stream is an analog signal β†’ analog sampling filter β†’ ADC β†’ reselection β†’ reselection β†’ DAC β†’ analog recovery filter

what should be achieved:

F = Frequency

F (Hz = 1 / s) Ex 100 Hz = 1000 (Cyc / sec) F (s) = 1 / (2f)

Example problem: 1000 hz = highest frequency 1/2 (1000 Hz) = 1/2000 = 5x10 (-3) s / cycle or 5ms sample rate

This is my first signal processing project using matlab.

what i still have.

% 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) 

Can someone tell me how to do this better, and how to sample at credential frequencies?

heres.wav file 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

New: http://www.4shared.com/audio/nTRBNSld/PianoUs.html

+4
source share
2 answers

The simplest is to change the sampling rate to an integer coefficient. Downsampling consists of triggering data through a low-pass filter and then dropping samples, while upsampling consists of inserting samples and then triggering data through a low-pass filter (also known as a reconstruction filter or an interpolation filter). Offset occurs when filtering steps are skipped or performed incorrectly. So, to show the smoothing effect, I suggest that you simply drop or insert samples as needed, and then create a new WAV file with a new sampling rate. To drop the samples, you can do:

 DownSampleRatio = 2; %# Normally apply a low pass filter here leftDown = left(1:DownSampleRatio:end); %# extract every N'th sample fsDown = fs/DownSampleRatio; wavwrite(leftDown, fsDown, filename); 

To create samples, you can do:

 UpSampleRatio = 2; leftUp = zeros(length(left)*UpSampleRatio, 1); leftUp(1:UpSampleRatio:end) = left; %# fill in every N'th sample %# Normally apply a low pass filter here fsUp = fs*UpSampleRatio; wavwrite(leftUp, fsUp, filename); 

You can simply play back recorded WAV files to listen to effects.

As to the side, you asked to improve your code - I prefer to initialize the vector t as t = (0:(length(left)-1))/fs; .

+4
source

The required DSP technique is called decimation .

0
source

Source: https://habr.com/ru/post/1333525/


All Articles