36 : mInput(
"Input", this ),
37 mOutput(
"Output", this )
43 : mInput(
"Input", this ),
44 mOutput(
"Output", this )
88 InitSynthSpec(mConfig.GetSpectrumSize());
89 FillSynthSineSpectrum(peakArray,gain);
99 spectralSize = mSynthSineSpectrum.
Size();
100 Scfg.SetType(sflags);
101 Scfg.SetSize(spectralSize);
102 Scfg.SetSpectralRange(residualSpectrumOut.GetSpectralRange());
104 residualSpectrumOut.SetComplexArray(mSynthSineSpectrum);
108 void SynthSineSpectrum::FillSynthSineSpectrum (
const SpectralPeakArray& peakArray,
double gain)
115 double currMag,currBinPos,Sin,Cos,approxMag,fIndex,currFreq,phase;
117 SpecPeakEnvelope.SetSize(mainLobeBins);
118 DataArray& peakFreqBuffer=peakArray.GetFreqBuffer();
119 DataArray& peakMagBuffer=peakArray.GetMagBuffer();
120 DataArray& peakPhaseBuffer=peakArray.GetPhaseBuffer();
122 TData samplingRate=mConfig.GetSamplingRate();
123 TSize spectrumSize=mConfig.GetSpectrumSize();
126 TData binPosFactor=2*(spectrumSize-1)/samplingRate;
129 int incr=
int(
CLAM_pow(2.0,9.0-mConfig.GetZeroPadding()));
130 int lastBin=4096-incr;
132 for(i=0;i<numPeaks;i++)
136 currMag =
CLAM_pow(10.0,(peakMagBuffer[i]/20.0));
138 else currMag = peakMagBuffer[i];
139 currFreq = peakFreqBuffer[i];
140 phase = peakPhaseBuffer[i];
144 currBinPos = currFreq*binPosFactor;
146 double Loc = currBinPos;
147 TIndex firstBin =
TIndex(
int( Loc ) - firstBinFactor );
148 double BinRemainder = Loc - floor (Loc);
149 fIndex = (1.0 - BinRemainder);
157 for (n=0; currBin<=lastBin;n++)
159 approxMag = currMag * mainLobe;
161 SpecPeakEnvelope[n].SetReal(
TData(approxMag*Cos));
162 SpecPeakEnvelope[n].SetImag(
TData(approxMag*Sin));
169 SpecPeakEnvelope[mainLobeBins-1].SetReal(0);
170 SpecPeakEnvelope[mainLobeBins-1].SetImag(0);
175 SpecPeakEnvelope[mainLobeBins-1].SetReal(
TData(approxMag*Cos));
176 SpecPeakEnvelope[mainLobeBins-1].SetImag(
TData(approxMag*Sin));
180 for (k = 0, l = firstBin; k < mainLobeBins ; k++,l++)
182 if (l > 0 && l < mConfig.GetSpectrumSize()-1)
184 mSynthSineSpectrum[l] += SpecPeakEnvelope[k];
190 mSynthSineSpectrum[b].SetReal(mSynthSineSpectrum[b].Real()+SpecPeakEnvelope[k].Real());
191 mSynthSineSpectrum[b].SetImag(mSynthSineSpectrum[b].Imag()-SpecPeakEnvelope[k].Imag());
196 mSynthSineSpectrum[0].SetReal(mSynthSineSpectrum[0].Real()+2*(SpecPeakEnvelope[k].Real()));
199 else if (l > mConfig.GetSpectrumSize()-1&&(l<mConfig.GetSpectrumSize()*2-1))
201 b = 2 * (spectrumSize-1) - l;
202 mSynthSineSpectrum[b].SetReal(mSynthSineSpectrum[b].Real()+SpecPeakEnvelope[k].Real());
203 mSynthSineSpectrum[b].SetImag(mSynthSineSpectrum[b].Imag()-SpecPeakEnvelope[k].Imag());
206 else if (l == spectrumSize-1)
208 mSynthSineSpectrum[l].SetReal(mSynthSineSpectrum[l].Real()+2*(SpecPeakEnvelope[k].Real()));
214 void SynthSineSpectrum::InitSynthSpec(
TSize size)
217 mSynthSineSpectrum.
Resize(size);
218 mSynthSineSpectrum.
SetSize(size);
221 mSynthSineSpectrum[i] =
Complex(0,0);