www.gusucode.com > signal 案例源码程序 matlab代码 > signal/ChangeSignalSampleRateExample.m
%% Changing Signal Sample Rate % This example shows how to change the sample rate of a signal. The % example has two parts. Part one changes the sample rate of a sinusoidal % input from 44.1 kHz to 48 kHz. This workflow is common in audio % processing. The sample rate used on compact discs is 44.1 kHz, while % the sample rate used on digital audio tape is 48 kHz. Part two changes % the sample rate of a recorded speech sample from 7418 Hz to 8192 Hz. %% % Create an input signal consisting of a sum of sine waves sampled at 44.1 % kHz. The sine waves have frequencies of 2, 4, and 8 kHz. Fs = 44.1e3; t = 0:1/Fs:1-1/Fs; x = cos(2*pi*2000*t)+1/2*sin(2*pi*4000*(t-pi/4))+1/4*cos(2*pi*8000*t); %% % To change the sample rate from 44.1 to 48 kHz, you have to determine a % rational number (ratio of integers), |P/Q|, such that |P/Q| times the % original sample rate, 44100, is equal to 48000 within some specified % tolerance. % % To determine these factors, use |rat|. Input the ratio of the new % sample rate, 48000, to the original sample rate, 44100. [P,Q] = rat(48e3/Fs); abs(P/Q*Fs-48000) %% % You see that |P/Q*Fs| only differs from the desired sample rate, 48000, % on the order of $10^{-12}$. % % Use the numerator and denominator factors obtained with |rat| as inputs % to |resample| to output a waveform sampled at 48 kHz. xnew = resample(x,P,Q); %% % If your computer can play audio, you can play the two waveforms. Set the % volume to a comfortable level before you play the signals. Execute the % |play| commands separately so that you can hear the signal with the two % different sample rates. % P44_1 = audioplayer(x,44100); % P48 = audioplayer(xnew,48000); % play(P44_1) % play(P48) %% % Change the sample rate of a speech sample from 7418 Hz to 8192 Hz. The % speech signal is a recording of a speaker saying "MATLAB(R)". % % Load the speech sample. load mtlb %% % Loading the file |mtlb.mat| brings the speech signal, |mtlb|, and the % sample rate, |Fs|, into the MATLAB workspace. % % Determine a rational approximation to the ratio of the new sample rate, % 8192, to the original sample rate. Use |rat| to determine the % approximation. [P,Q] = rat(8192/Fs); %% % Resample the speech sample at the new sample rate. Plot the two signals. mtlb_new = resample(mtlb,P,Q); subplot(2,1,1) plot((0:length(mtlb)-1)/Fs,mtlb) subplot(2,1,2) plot((0:length(mtlb_new)-1)/(P/Q*Fs),mtlb_new) %% % If your computer has audio output capability, you can play the two % waveforms at their respective sample rates for comparison. Set the % volume on your computer to a comfortable listening level before playing % the sounds. Execute the |play| commands separately to compare the speech % samples at the different sample rates. % Pmtlb = audioplayer(mtlb,Fs); % Pmtlb_new = audioplayer(mtlb_new,8192); % play(Pmtlb) % play(Pmtlb_new)