I'm trying to join 2 functions together in one matlab file it simply says
"function result = DTFMdetect(filenumber), Error: Function definitions are not permitted in this context"
The code where working earlier when I had the 2 functions in separate files and called detectSK in the other one, but now when I try to get them together, I get this error. Does anyone here know what it's about or have ran into it and can help maybe?
Thanks in advance
function result = DTMFdetect(filenumber)
%
% Funktion som avkodar DTMF signaler
%
% Funktionen generate_secret_data.p samt DTMFgen.m måste finnas i samma
% filkatalog som denna funktionen (eller i path)
%
% Insignaler
% filenumber = signalfilsnummer (0-99)
%
% Utsignal
% Sträng-array med detekterade symboler
% ex. result(3,2) är 2:a symbolen som detekterades i 3:e signalen
signals = generate_secret_data(filenumber);
for sig_idx = 1:6, % 6 signaler ska analyseras
figure;
plot(signals(:,sig_idx));
signals(:,sig_idx);
detected_symbol = detectSK(signals(:,sig_idx)); % Dålig algoritm som alltid gissar 'A'!
for sym_idx=1:4, % varje signal innehåller 4 symboler
% Här fyller du i din detektionsalgoritm för symbol sym_idx
% i signal sig_idx
%
% signals(:,sig_idx) är signalvektorn med alla 4 symboler
result(sig_idx,sym_idx) = detected_symbol(sym_idx); % tilldela resultat
end
end
end
function detectedSignals=detectSK(data)
% Vårat program delar in inkommande data till en array med signalerna
% uppdelade
%Sedan filtrerar den signalerna med motsvarande bandpassfilter för
%frekvenserna och behåller sådan de frekvenser där den hittade mest data,
%dessa används sedan för att jämföra med vilken symbol kombinationen
%motsvarar. Brus är inte riktigt tagit i beaktning utan vi resonarade att
%in a perfect world så filtreras orelevant brus bort och vi kan med denna
%metod fortfarande få ut rätt data.
% data=DTMFgen('16544',40,40,0.5); %% Läser in data
numberOfTones=(length(data)-320)/640; %%Räknar ut hur många toner det är, tar bort de första 40ms då det verkar vara en väntedel
individualSignals=zeros(numberOfTones,320); %%Variabel för att hålla de olika signalerna
IndividualSymbols=[];
%booleans för att hålla värdena för hittade frekvenser
B1209=false;
B1336=false;
B1477=false;
B1633=false;
B697=false;
B770=false;
B852=false;
B941=false;
% Forloop som itererar genom signalen för att dela upp den
for i=1:1:numberOfTones
for k=1:1:320;
individualSignals(i,k)=data((320+(i-1)*640)+(k-1));
end
end
for i=1:1:numberOfTones
% 697Hz-Bandpass filter
Fs = 8E+3; Fc1 = 687; Fc2 = 707; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data697=filtfilt(sos,g,individualSignals(i,:));%filtrerar datan
N=length(data697);%längden på signalen
Y=fft(data697);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value697=sum(P1);
% 770Hz-Bandpass filter
Fs = 8E+3; Fc1 = 760; Fc2 = 780; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data770=filtfilt(sos,g,individualSignals(i,:));
N=length(data770);%längden på signalen
Y=fft(data770);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value770=sum(P1);
% 852Hz-Bandpass filter
Fs = 8E+3; Fc1 = 842; Fc2 = 862; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data852=filtfilt(sos,g,individualSignals(i,:));
N=length(data852);%längden på signalen
Y=fft(data852);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value852=sum(P1);
% 941Hz-Bandpass filter
Fs = 8E+3; Fc1 = 931; Fc2 = 951; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data941=filtfilt(sos,g,individualSignals(i,:));
N=length(data941);%längden på signalen
Y=fft(data941);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value941=sum(P1);
% 1209Hz-Bandpass filter
Fs = 8E+3; Fc1 = 1199; Fc2 = 1219; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data1209=filtfilt(sos,g,individualSignals(i,:));
N=length(data1209);%längden på signalen
Y=fft(data1209);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value1209=sum(P1);
% 1336Hz-Bandpass filter
Fs = 8E+3; Fc1 = 1326; Fc2 = 1346; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data1336=filtfilt(sos,g,individualSignals(i,:));
N=length(data1336);%längden på signalen
Y=fft(data1336);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value1336=sum(P1);
% 1477Hz-Bandpass filter
Fs = 8E+3; Fc1 = 1467; Fc2 = 1487; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data1477=filtfilt(sos,g,individualSignals(i,:));
N=length(data1477);%längden på signalen
Y=fft(data1477);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value1477=sum(P1);
% 1633Hz-Bandpass filter
Fs = 8E+3; Fc1 = 1623; Fc2 = 1643; Fs1 = Fc1*0.8; Fs2 = Fc2/0.8; Rp = 1; Rs = 20;
[n,Wn] = buttord([Fc1 Fc2]/4000, [Fs1 Fs2]/4000, Rp, Rs);
[b,a] = butter(2*n,Wn);
[sos,g] = tf2sos(b,a);
data1633=filtfilt(sos,g,individualSignals(i,:));
N=length(data1633);%längden på signalen
Y=fft(data1633);%fft:ar den
P2=abs(Y);%hela spektrumet (negativa OCH positiva)
P1=P2(1:N/2+1);%ser till att vi endast tittar för positiva frekvenser
P1(2:end-1)=2*P1(2:end-1);%gångrar den med 2?
f=8000*(0:(N/2))/N;%definerar frekvensspektrumet
value1633=sum(P1);
big=sort([value1209 value1336 value1477 value1633]);
small=sort([value697 value770 value852 value941]);
if value1209==big(4)
B1209=true;
else B1209=false;
end
if value1336==big(4)
B1336=true;
else B1336=false;
end
if value1477==big(4)
B1477=true;
else B1477=false;
end
if value1633==big(4)
B1633=true;
else B1633=false;
end
if value697==small(4)
B697=true;
else B697=false;
end
if value770==small(4)
B770=true;
else B770=false;
end
if value852==small(4)
B852=true;
else B852=false;
end
if value941==small(4)
B941=true;
else B941=false;
end
% Kollar vilka siffror det motsvarar
if B1209 & B697
Digit1=true;
else
Digit1=false;
end
if B1209 & B770
Digit4=true;
else
Digit4=false;
end
if B1209 & B852
Digit7=true;
else
Digit7=false;
end
if B1209 & B941
DigitStar=true;
else
DigitStar=false;
end
if B1336 & B697
Digit2=true;
else
Digit2=false;
end
if B1336 & B770
Digit5=true;
else
Digit5=false;
end
if B1336 & B852
Digit8=true;
else
Digit8=false;
end
if B1336 & B941
Digit0=true;
else
Digit0=false;
end
if B1477 & B697
Digit3=true;
else
Digit3=false;
end
if B1477 & B770
Digit6=true;
else
Digit6=false;
end
if B1477 & B852
Digit9=true;
else
Digit9=false;
end
if B1477 & B941
DigitSharp=true;
else
DigitSharp=false;
end
if B1633 & B697
DigitA=true;
else
DigitA=false;
end
if B1633 & B770
DigitB=true;
else
DigitB=false;
end
if B1633 & B852
DigitC=true;
else
DigitC=false;
end
if B1633 & B941
DigitD=true;
else
DigitD=false;
end
if Digit1
individualSymbols(i)='1';
end
if Digit2
individualSymbols(i)='2';
end
if Digit3
individualSymbols(i)='3';
end
if Digit4
individualSymbols(i)='4';
end
if Digit5
individualSymbols(i)='5';
end
if Digit6
individualSymbols(i)='6';
end
if Digit7
individualSymbols(i)='7';
end
if Digit8
individualSymbols(i)='8';
end
if Digit9
individualSymbols(i)='9';
end
if Digit0
individualSymbols(i)='0';
end
if DigitA
individualSymbols(i)='A';
end
if DigitB
individualSymbols(i)='B';
end
if DigitC
individualSymbols(i)='C';
end
if DigitD
individualSymbols(i)='D';
end
if DigitSharp
individualSymbols(i)='#';
end
if DigitStar
individualSymbols(i)='*';
end
end
detectedSignals=individualSymbols;