how to extract data from a sound file and do calculations with the data?

I have a sound file named “message.txt” containing the waveform of a voice message embedded in a sinusoid with frequency of 220 Hz, and the sampling frequency is 22000 Hz.
file content consisting of 65120 rows of item as following shows
load the file, and the speech heard
load message.txt
soundsc(message, 22000)
Now what I want to do is do some mathematical calculations of these data.
where r[k] corresponds to message. say for example: r[k] corresponds to the floating point number in first row of the file for k=0. r[k] corresponds to the floating point number in second row of the file for k=1. r[k] corresponds to the floating point number in third row of the file for k=2. and so on. finally, r[k] corresponds to the floating point number in last row of the file for k=65119.
(the lenght of the message/signal length is 65120, obtained using length(message))
how to do that? does anyone get what i mean?

3 Comments

(file is a column list of floating point numbers in text representation.)
I am not sure what you mean about r[k] ?
Once you have loaded the data into the array "message" it will just be a numeric array and you can do any mathematical processing you want on it.
r[k] corresponds to file massage. Say, r[k] corresponds to the floating point number in first row of the file for k=1.
i really dun know how to do the mathematical processing with matlab, could u write down the code? (plz note sin(3.6k) should be in degree)

Sign in to comment.

 Accepted Answer

sum( message .* sind(3.6 * (0:length(message)-1))

7 Comments

sry to bother u again. just have program run, but nothing outputs. it says Error in ==> Untitled4 at 3 sum( message .* sind(3.6 * (0:length(message)-1)));
load message.txt
soundsc(message, 22000)
sum( message .* sind(3.6 * (0:length(message)-1)));
where r[k] corresponds to message. say for example:
r[k] corresponds to the floating point number in first row of the file for k=0.
r[k] corresponds to the floating point number in second row of the file for k=1.
r[k] corresponds to the floating point number in third row of the file for k=2. and so on.
finally, r[k] corresponds to the floating point number in last row of the file for k=65119.
There would have been more of an error message than that.
I guess your message vector gets loaded as a column vector; that makes sense now that I think about it. The code fix is
sum( message .* sind(3.6 * (0:length(message)-1).'))
Note: if you put the semicolon on the end of the line then it will perform the calculation and discard the result. Either leave off the semicolon or assign the result to a variable.
it is a column vector, i think.
and good to see that the code fix really works, thx again!!
last question, sry for bother u again. i want to plot s[k] using the following equation, where r[k] again corresponds to message.
s[k]=r[k]-56.97cos(3.6k)-31.98sin(3.6k)
for k=0:length(message)-1
i tried, but again failed.
load message.txt
N=65120;
k=0:N-1;
s = message - 56.97*cosd(3.6*k)-31.98*sind(3.6*k);
s
k=0:N-1;
plot(k,s)
xlabel('k');
could u fit it, if u dun mind and are available. ylabel('s[k]');
Already answered in the Question you created for this.

Sign in to comment.

More Answers (0)

Categories

Find more on Audio I/O and Waveform Generation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!