Audio Signal eval() Error (for Fourier Series Approximation)
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
enrique128
le 10 Nov 2020
Commenté : Rena Berman
le 7 Mai 2021
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
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));
Réponse acceptée
Walter Roberson
le 10 Nov 2020
syms Data
assume(n, 'integer');
aSym(n) = subs( simplify(int(Data*cos(n.*wo.*t),t,0,To)/(To/2)), Data, data);
bSym(n) = subs( simplify(int(data*sin(n.*wo.*t),t,0,To)/(To/2)), Data, data);
n = 1:nMax;
an = double( aSym(n) );
bn = double( bSym(n) );
However, you will find that with that particular To that all of your a entries and all of your b entries are exactly 0.
7 commentaires
Stephen23
le 16 Nov 2020
Modifié(e) : Stephen23
le 16 Nov 2020
"The code should be private"
By submitting your question on this forum you consented to the terms and conditions given here
which clearly state that you release your code under the Creative Commons Attribution Share Alike 3.0 license. So you have already given everyone on the entire planet permission to copy, distribute, and reuse your code (with appropriate attribution, of course, following the requirements of that license).
"I can not understand why u share all of my code again sir."
Because this answer does not make sense without it.
Because all of the volunteers on public internet forums volunteer their time on the understanding that their time helping one person might also be of interest and use to other people. This is the nature of such public forums.
By deleting the content of your question you treat those volunteers as your own unpaid private consultants. You unilaterally decide to reject one of the reasons for taking part in a public forum, which is that it is public.
If you want private help then you can find plenty of private consultants who will be happy to sign an NDA.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Spectral Measurements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!