Witam
Pisze aktualnie prace mgr Zastosowanie predykcji liniowej w procesie syntezy mowy i mam juz algorytmy do analizy LPC i filtr FIR. Jednak cos nie dziala tak jak powinno. Czyli zamiast ladnej mowy mam szum
.
Dla kazdej gloski wykonuje analize LPC ( kazda gloske dziele na segmenty 240 probek i dla nich licze wspolczynniki LPC) Po analizcie wrzucam kolejne dane do FIR (generuje szum oraz pobieram kolejne wspolczynniki predykcji i liczy mi sie kolejna probka wyjsciowa). Tak w skrocie:) W wyniku (przebieg) mozna zauwazyc pewne podobienswo do wyniku w ktorym sklejam kolejne gloski nic z nimi nie robiac:)
Czy prosty filtr FIR wysarcza do syntezy??
class FIR2
{
private int length;
private double[] delayLine;
private double[] impulseResponse;
private int count = 0;
public FIR2(double[] coefs)
{
length = coefs.Length;
impulseResponse = coefs;
delayLine = new double[length];
}
public double getOutputSample(double inputSample)
{
delayLine[count] = inputSample;
double result = 0.0;
int index = count;
for (int i=0; i<length; i++)
{
result += impulseResponse[i] * delayLine[index--];
if (index < 0) index = length-1;
}
if (++count >= length) count = 0;
return result;
}
}
Pisze aktualnie prace mgr Zastosowanie predykcji liniowej w procesie syntezy mowy i mam juz algorytmy do analizy LPC i filtr FIR. Jednak cos nie dziala tak jak powinno. Czyli zamiast ladnej mowy mam szum
Dla kazdej gloski wykonuje analize LPC ( kazda gloske dziele na segmenty 240 probek i dla nich licze wspolczynniki LPC) Po analizcie wrzucam kolejne dane do FIR (generuje szum oraz pobieram kolejne wspolczynniki predykcji i liczy mi sie kolejna probka wyjsciowa). Tak w skrocie:) W wyniku (przebieg) mozna zauwazyc pewne podobienswo do wyniku w ktorym sklejam kolejne gloski nic z nimi nie robiac:)
Czy prosty filtr FIR wysarcza do syntezy??
class FIR2
{
private int length;
private double[] delayLine;
private double[] impulseResponse;
private int count = 0;
public FIR2(double[] coefs)
{
length = coefs.Length;
impulseResponse = coefs;
delayLine = new double[length];
}
public double getOutputSample(double inputSample)
{
delayLine[count] = inputSample;
double result = 0.0;
int index = count;
for (int i=0; i<length; i++)
{
result += impulseResponse[i] * delayLine[index--];
if (index < 0) index = length-1;
}
if (++count >= length) count = 0;
return result;
}
}