autoMixingMatrix Sound_to_MixingMatrix (Sound me, double startTime, double endTime, long ncovars, double lagStep, long maxNumberOfIterations, double tol, int method) { try { autoCrossCorrelationTableList ccs = Sound_to_CrossCorrelationTableList (me, startTime, endTime, lagStep, ncovars); autoMixingMatrix thee = MixingMatrix_create (my ny, my ny); MixingMatrix_and_CrossCorrelationTableList_improveUnmixing (thee.peek(), ccs.peek(), maxNumberOfIterations, tol, method); return thee; } catch (MelderError) { Melder_throw (me, U": no MixingMatrix created."); } }
autoCrossCorrelationTableList EEG_to_CrossCorrelationTableList (EEG me, double startTime, double endTime, double lagStep, long ncovars, const char32 *channelRanges) { try { // autowindow if (startTime == endTime) { startTime = my xmin; endTime = my xmax; } // don't allow times outside domain if (startTime < my xmin) { startTime = my xmin; } if (endTime > my xmax) { endTime = my xmax; } autoEEG thee = EEG_extractPart (me, startTime, endTime, true); long numberOfChannels; autoNUMvector <long> channels (NUMstring_getElementsOfRanges (channelRanges, thy numberOfChannels, & numberOfChannels, nullptr, U"channel", true), 1); autoSound soundPart = Sound_copyChannelRanges (thy sound.get(), channelRanges); autoCrossCorrelationTableList him = Sound_to_CrossCorrelationTableList (soundPart.get(), startTime, endTime, lagStep, ncovars); return him; } catch (MelderError) { Melder_throw (me, U": no CrossCorrelationTables calculated."); } }