Ultrasonic Audio File Player

Dependencies:   mbed

Fork of TAU_ZOOLOG_Chirp_Generator by Yossi_Students

Committer:
Arkadi
Date:
Wed Apr 25 08:54:23 2018 +0000
Revision:
24:0b683b3ff39e
added matlab script

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 24:0b683b3ff39e 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Arkadi 24:0b683b3ff39e 2 % Generate Signal coeficients - 23/04/2018 %
Arkadi 24:0b683b3ff39e 3 % Arkadi Rafalovich - % Arkadiraf@gmail.com %
Arkadi 24:0b683b3ff39e 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Arkadi 24:0b683b3ff39e 5 clc
Arkadi 24:0b683b3ff39e 6 clear
Arkadi 24:0b683b3ff39e 7
Arkadi 24:0b683b3ff39e 8 %% Generate coeficients from wav file:
Arkadi 24:0b683b3ff39e 9 filename= 'audio.001531.wav';
Arkadi 24:0b683b3ff39e 10
Arkadi 24:0b683b3ff39e 11 % signal Generator sample rate:
Arkadi 24:0b683b3ff39e 12 %sampleFreq=1*10^6;
Arkadi 24:0b683b3ff39e 13 sampleFreq=375*10^3;
Arkadi 24:0b683b3ff39e 14
Arkadi 24:0b683b3ff39e 15 % Max samples
Arkadi 24:0b683b3ff39e 16 maxNumSamples=200*10^3; % Max allowed samples
Arkadi 24:0b683b3ff39e 17
Arkadi 24:0b683b3ff39e 18 % read WAVE file
Arkadi 24:0b683b3ff39e 19 [signalSamples,signalFreq] = audioread(filename);
Arkadi 24:0b683b3ff39e 20
Arkadi 24:0b683b3ff39e 21 % plot signal
Arkadi 24:0b683b3ff39e 22 figure(1);
Arkadi 24:0b683b3ff39e 23 plot (signalSamples);
Arkadi 24:0b683b3ff39e 24 title(['Audio file: ',filename, ' Sample Rate: ',num2str(signalFreq/1000),'KHz']);
Arkadi 24:0b683b3ff39e 25
Arkadi 24:0b683b3ff39e 26
Arkadi 24:0b683b3ff39e 27 % how many sample in signal : Verify not to exceed max samokes
Arkadi 24:0b683b3ff39e 28 signalNumSamples=size(signalSamples,1);
Arkadi 24:0b683b3ff39e 29
Arkadi 24:0b683b3ff39e 30 % adjusting sample rates to fit the system sample rat
Arkadi 24:0b683b3ff39e 31 sampleRateRatio = sampleFreq / signalFreq;
Arkadi 24:0b683b3ff39e 32
Arkadi 24:0b683b3ff39e 33 % for improved performace, add signal interpolation - sometime may actually happen
Arkadi 24:0b683b3ff39e 34 if (sampleRateRatio > 1) %extending samples
Arkadi 24:0b683b3ff39e 35 % basicly creating a vector to indicate which sample to take from the
Arkadi 24:0b683b3ff39e 36 % signals samples based on the frequencies ratio
Arkadi 24:0b683b3ff39e 37 samplesIndexVector = round((1:1/sampleRateRatio:(signalNumSamples)));
Arkadi 24:0b683b3ff39e 38 else % downsampling signal
Arkadi 24:0b683b3ff39e 39 samplesIndexVector = round((1:1/sampleRateRatio:(signalNumSamples)));
Arkadi 24:0b683b3ff39e 40 end
Arkadi 24:0b683b3ff39e 41 % generated signal number of samples
Arkadi 24:0b683b3ff39e 42 newSignalNumSamples = size(samplesIndexVector,2);
Arkadi 24:0b683b3ff39e 43 % generate a new vector for the data set based on the samplesIndexVector
Arkadi 24:0b683b3ff39e 44 newSignalSamples = zeros(newSignalNumSamples,1);
Arkadi 24:0b683b3ff39e 45 for ii=1:newSignalNumSamples
Arkadi 24:0b683b3ff39e 46 newSignalSamples(ii) = signalSamples(samplesIndexVector(ii));
Arkadi 24:0b683b3ff39e 47 end
Arkadi 24:0b683b3ff39e 48
Arkadi 24:0b683b3ff39e 49 % normalize signal
Arkadi 24:0b683b3ff39e 50 newSignalSamples = newSignalSamples / (max(abs(newSignalSamples)));
Arkadi 24:0b683b3ff39e 51
Arkadi 24:0b683b3ff39e 52 % plot signal
Arkadi 24:0b683b3ff39e 53 figure(2);
Arkadi 24:0b683b3ff39e 54 plot (newSignalSamples);
Arkadi 24:0b683b3ff39e 55 title([num2str(sampleFreq/1000),' KHz sample rate signal: ',filename]);
Arkadi 24:0b683b3ff39e 56
Arkadi 24:0b683b3ff39e 57 % scale signal to 75%
Arkadi 24:0b683b3ff39e 58 newSignalSamples = newSignalSamples * 0.75;
Arkadi 24:0b683b3ff39e 59 % plot signal
Arkadi 24:0b683b3ff39e 60 figure(3);
Arkadi 24:0b683b3ff39e 61 plot (newSignalSamples);
Arkadi 24:0b683b3ff39e 62 title(['Scaled signal: ',filename]);
Arkadi 24:0b683b3ff39e 63
Arkadi 24:0b683b3ff39e 64 %% cast data to 12bit (dac resolution)
Arkadi 24:0b683b3ff39e 65 sig_12bit=cast(((newSignalSamples+1)*4095/2),'UINT16');
Arkadi 24:0b683b3ff39e 66
Arkadi 24:0b683b3ff39e 67 figure(4);
Arkadi 24:0b683b3ff39e 68 plot(sig_12bit)
Arkadi 24:0b683b3ff39e 69 title(['12bit signal: ',filename]);
Arkadi 24:0b683b3ff39e 70
Arkadi 24:0b683b3ff39e 71 %% trim to max samples
Arkadi 24:0b683b3ff39e 72 if (newSignalNumSamples > maxNumSamples)
Arkadi 24:0b683b3ff39e 73 numSamples = maxNumSamples;
Arkadi 24:0b683b3ff39e 74 else
Arkadi 24:0b683b3ff39e 75 numSamples = newSignalNumSamples;
Arkadi 24:0b683b3ff39e 76 end
Arkadi 24:0b683b3ff39e 77
Arkadi 24:0b683b3ff39e 78 %plot trimed signal
Arkadi 24:0b683b3ff39e 79 figure(5);
Arkadi 24:0b683b3ff39e 80 plot(sig_12bit(1:numSamples));
Arkadi 24:0b683b3ff39e 81 title(['trimmed signal: ',filename]);
Arkadi 24:0b683b3ff39e 82
Arkadi 24:0b683b3ff39e 83 %% generate header file with desire coeficients
Arkadi 24:0b683b3ff39e 84 % check if file exists, delete if so.
Arkadi 24:0b683b3ff39e 85 if exist('signal.h', 'file')==2
Arkadi 24:0b683b3ff39e 86 delete('signal.h');
Arkadi 24:0b683b3ff39e 87 end
Arkadi 24:0b683b3ff39e 88
Arkadi 24:0b683b3ff39e 89 % creat new file
Arkadi 24:0b683b3ff39e 90 file_id=fopen('signal.h','w');
Arkadi 24:0b683b3ff39e 91
Arkadi 24:0b683b3ff39e 92 % file heading
Arkadi 24:0b683b3ff39e 93 fprintf(file_id,'/*\r\n');
Arkadi 24:0b683b3ff39e 94 fprintf(file_id,'Header File Generated by Matlab Script: WAVE_Generator.m \r\n');
Arkadi 24:0b683b3ff39e 95 fprintf(file_id,'file:%s \r\n' , filename);
Arkadi 24:0b683b3ff39e 96 fprintf(file_id,'Number of Samples: %d \r\n', numSamples);
Arkadi 24:0b683b3ff39e 97 fprintf(file_id,'Sample Rate: %d kHz \r\n', sampleFreq/1000);
Arkadi 24:0b683b3ff39e 98 fprintf(file_id,'*/\r\n');
Arkadi 24:0b683b3ff39e 99
Arkadi 24:0b683b3ff39e 100 %init variable
Arkadi 24:0b683b3ff39e 101 fprintf(file_id,'#define NUM_SAMPLES %d\r\n', numSamples);
Arkadi 24:0b683b3ff39e 102 fprintf(file_id,'const uint16_t chirpData[NUM_SAMPLES] = { \r\n');
Arkadi 24:0b683b3ff39e 103
Arkadi 24:0b683b3ff39e 104 for i =1:(numSamples-1)
Arkadi 24:0b683b3ff39e 105 fprintf(file_id,' %d, ', sig_12bit(i));
Arkadi 24:0b683b3ff39e 106 if (mod(i,10)==0) %insert spaces
Arkadi 24:0b683b3ff39e 107 fprintf(file_id,'\r\n');
Arkadi 24:0b683b3ff39e 108 end
Arkadi 24:0b683b3ff39e 109 end
Arkadi 24:0b683b3ff39e 110 fprintf(file_id,' %d}; \r\n', sig_12bit(end));
Arkadi 24:0b683b3ff39e 111 % add last sample
Arkadi 24:0b683b3ff39e 112
Arkadi 24:0b683b3ff39e 113 % close file
Arkadi 24:0b683b3ff39e 114 fclose(file_id);
Arkadi 24:0b683b3ff39e 115
Arkadi 24:0b683b3ff39e 116