Audio Signal eval() Error (for Fourier Series Approximation)
Afficher commentaires plus anciens
Hello everyone, I am trying to calculate the fourier series of my voice but I cannot do it. My code works for square wave, sine wave everything else but for audio file it gives error. What is my mistake and how can I converge by different methods. Thanks.
My code is:
recorder= audiorecorder(16000,8,1);
disp('please record your voice');
drawnow();
pause(1);
recordblocking(recorder, 2);
play(recorder);
data=getaudiodata(recorder);
subplot(4,1,1);
plot(data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
syms n aSym(n) bSym(n) x(t) t A(t)
To=2;
f=1/To;
wo=2*pi*f;
a=trapz(data);
a0= 4.08*a;
aSym(n)=simplify(int(data*cos(n.*wo.*t),t,0,To)/(To/2))
bSym(n)=simplify(int(data*sin(n.*wo.*t),t,0,To)/(To/2))
nMax = 9;
n = 1:nMax;
an = eval(aSym(n));
bn = eval(bSym(n));
converge = a0;
for m = 1:nMax
converge = converge + an(m)*cos(m*wo*t) + bn(m)*sin(m*wo*t);
end
t = 0:0.0001:2;
subplot(4,1,2);
last = eval(converge);
plot(t,last, 'linewidth', 2)
Error using eval
Argument must contain a character vector.
Error in Untitled2 (line 25)
an = eval(aSym(n));
8 commentaires
Mathieu NOE
le 10 Nov 2020
hello
I doubt that matlab can solve your symbolic equation for data measured. It works if data has an analytical solution
you have to come back to a purely numerical DFT method
enrique128
le 10 Nov 2020
Mohamad
le 10 Nov 2020
Fourier Series for periodic signals .
You should apply Fourier Transform to your Audio signal , you will use fft to compute the DFT .
enrique128
le 10 Nov 2020
Walter Roberson
le 10 Nov 2020
you should never eval() a symbolic expression. Symbolic expressions display in a language that is not MATLAB and which is not mupad (the symbolic engine).
If you have symbolic variables in an expression that you want to replace with numeric values then use subs(). If you have a symbolic expression that you want to evaluate numerically if feasible then you can use vpa()
enrique128
le 10 Nov 2020
Rik
le 16 Nov 2020
Audio Signal eval() Error (for Fourier Series Approximation)
Hello everyone, I am trying to calculate the fourier series of my voice but I cannot do it. My code works for square wave, sine wave everything else but for audio file it gives error. What is my mistake and how can I converge by different methods. Thanks.
My code is:
recorder= audiorecorder(16000,8,1);
disp('please record your voice');
drawnow();
pause(1);
recordblocking(recorder, 2);
play(recorder);
data=getaudiodata(recorder);
subplot(4,1,1);
plot(data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
syms n aSym(n) bSym(n) x(t) t A(t)
To=2;
f=1/To;
wo=2*pi*f;
a=trapz(data);
a0= 4.08*a;
aSym(n)=simplify(int(data*cos(n.*wo.*t),t,0,To)/(To/2))
bSym(n)=simplify(int(data*sin(n.*wo.*t),t,0,To)/(To/2))
nMax = 9;
n = 1:nMax;
an = eval(aSym(n));
bn = eval(bSym(n));
converge = a0;
for m = 1:nMax
converge = converge + an(m)*cos(m*wo*t) + bn(m)*sin(m*wo*t);
end
t = 0:0.0001:2;
subplot(4,1,2);
last = eval(converge);
plot(t,last, 'linewidth', 2)
Error using eval
Argument must contain a character vector.
Error in Untitled2 (line 25)
an = eval(aSym(n));
Rena Berman
le 7 Mai 2021
(Answers Dev) Restored edit
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Correlation and Convolution dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!