Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:mW数组SEHException publicstaticvoidenergyandentropy(列表数据、字符串\u文件名、OpenFileDialog打开) { NAudio.Wave.WaveChannel32 Wave=新的NAudio.Wave.WaveChannel32(新的NAudio.Wave.waveilereader(open.FileName)); 字节[]主缓冲区=新字节[波长]; int sampleRate=wave.WaveFormat.sampleRate; int window_ms=200; int窗口; int fs=取样器; window=window_ms*fs/1000; float[]fbuffer=新的float[mainBuffer.Length/8]; wave.Read(mainBuffer,0,mainBuffer.Length); 对于(int i=0;i_C#_Arrays_Matlab_Multidimensional Array - Fatal编程技术网

C#:mW数组SEHException publicstaticvoidenergyandentropy(列表数据、字符串\u文件名、OpenFileDialog打开) { NAudio.Wave.WaveChannel32 Wave=新的NAudio.Wave.WaveChannel32(新的NAudio.Wave.waveilereader(open.FileName)); 字节[]主缓冲区=新字节[波长]; int sampleRate=wave.WaveFormat.sampleRate; int window_ms=200; int窗口; int fs=取样器; window=window_ms*fs/1000; float[]fbuffer=新的float[mainBuffer.Length/8]; wave.Read(mainBuffer,0,mainBuffer.Length); 对于(int i=0;i

C#:mW数组SEHException publicstaticvoidenergyandentropy(列表数据、字符串\u文件名、OpenFileDialog打开) { NAudio.Wave.WaveChannel32 Wave=新的NAudio.Wave.WaveChannel32(新的NAudio.Wave.waveilereader(open.FileName)); 字节[]主缓冲区=新字节[波长]; int sampleRate=wave.WaveFormat.sampleRate; int window_ms=200; int窗口; int fs=取样器; window=window_ms*fs/1000; float[]fbuffer=新的float[mainBuffer.Length/8]; wave.Read(mainBuffer,0,mainBuffer.Length); 对于(int i=0;i,c#,arrays,matlab,multidimensional-array,C#,Arrays,Matlab,Multidimensional Array,我有这段代码,并使用一个名为entropy.m的MatLab函数(我将其转换为dll)。我正在计算数据段的能量和熵。为此,我在列表中填充数据。当我的数据达到行数时,我清除列表和数组。然后继续处理下一段 这是我的问题。在计算小文件的熵时,它工作得很好。然而,当我试图计算大于10兆字节的文件的熵时arr1=cba.ToArray()此行引发异常SEHExException未处理-外部组件引发异常。我尝试放置一些断点,然后观察代码。它在循环开始时工作,但随后给了我这个异常。如何解决此问题?NAudio

我有这段代码,并使用一个名为entropy.m的MatLab函数(我将其转换为dll)。我正在计算数据段的能量和熵。为此,我在
列表中填充数据。当我的数据达到行数时,我清除列表和数组。然后继续处理下一段

这是我的问题。在计算小文件的熵时,它工作得很好。然而,当我试图计算大于10兆字节的文件的熵时
arr1=cba.ToArray()此行引发异常<代码>SEHExException未处理
-
外部组件引发异常。
我尝试放置一些断点,然后观察代码。它在循环开始时工作,但随后给了我这个异常。如何解决此问题?

NAudio.Wave.WaveChannel32 Wave=new NAudio.Wave.WaveChannel32(new NAudio.Wave.waveilereader(open.FileName));
public static void EnergyandEntropy(List<float> data, string _filename, OpenFileDialog open)
        {
    NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
            byte[] mainBuffer = new byte[wave.Length];
            int sampleRate = wave.WaveFormat.SampleRate;

            int window_ms = 200;
            int window;
            int fs = sampleRate;
            window = window_ms * fs / 1000;

            float[] fbuffer = new float[mainBuffer.Length / 8];
            wave.Read(mainBuffer, 0, mainBuffer.Length);

            for (int i = 0; i < fbuffer.Length; i++)
            {
                fbuffer[i] = (BitConverter.ToSingle(mainBuffer, i * 8));
            }

            data.AddRange(fbuffer);
            int dataRange = data.Count - (data.Count % window);
            data.RemoveRange(dataRange, data.Count - dataRange);
            var rows = window;
            var cols = data.Count / window;
            float[,] array2D = new float[window, data.Count / window];
            var current = 0;   
            List<double> abc = new List<double>();
            List<double> cba = new List<double>();
            List<double> vuv = new List<double>();
            List<MWArray> ent = new List<MWArray>();
            MWNumericArray arr1;
            EntropyCalculation obj = new EntropyCalculation();
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    array2D[i, j] = data[current++];
                    double a = array2D[i, j] * array2D[i, j];
                    abc.Add(a);
                    cba.Add(array2D[i, j]);
                    arr1 = cba.ToArray();
                    if (abc.Count % rows == 0 && abc.Count > 0)
                    {
                          double energies = Math.Sqrt(abc.Sum());
                          MWArray result = obj.entropy(arr1);
                          abc.Clear();
                          cba.Clear();
                          arr1 = null;
                          vuv.Add(energies);
                          ent.Add(result);
                    }
                }
            }
    }
WaveFileReader wavFile=新的WaveFileReader(open.FileName); int sampleRate=wave.WaveFormat.sampleRate; 字节[]主缓冲区=新字节[wave.WaveFormat.AverageBytesPerSecond/5]; #区域约束 int window_ms=200; int窗口; int fs=取样器; window=window_ms*fs/1000; #端区 int-read; int length=(int)波长; 列表能源=新列表(); List ent=新列表(); MWNumericArray arr1=null; EntropyCalculation obj=新EntropyCalculation(); if(波长%mainBuffer.Length!=0) { int值=(int)(wave.Length/mainBuffer.Length); 长度=主缓冲区。长度*值; } while(wave.Position!=长度) { 列表段=新列表(); List listOfSquaredSegment=新列表(); read=wave.read(mainBuffer,0,mainBuffer.Length); 对于(int i=0;i
我有点不舒服。它源于“由于先前的功能评估超时,功能评估被禁用”。我找到了它的资源。如果尝试在
for
循环中填写
MWNumericArray
,则无法完成该过程,因此评估超时。我还更改了代码以处理更大的文件。它仍然有点慢,但它现在可以正常工作

        NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
        WaveFileReader wavFile = new WaveFileReader(open.FileName);

        int sampleRate = wave.WaveFormat.SampleRate;
        byte[] mainBuffer = new byte[wave.WaveFormat.AverageBytesPerSecond / 5];

        #region Constraints
        int window_ms = 200;
        int window;
        int fs = sampleRate;
        window = window_ms * fs / 1000;
        #endregion

        int read;
        int length = (int)wave.Length;
        List<double> listOfEnergies = new List<double>();
        List<MWArray> ent = new List<MWArray>();
        MWNumericArray arr1 = null;
        EntropyCalculation obj = new EntropyCalculation();
        if (wave.Length % mainBuffer.Length != 0)
        {
            int value = (int)(wave.Length / mainBuffer.Length);
            length = mainBuffer.Length * value;
        }
        while (wave.Position != length)
        {
            List<double> segment = new List<double>();
            List<double> listOfSquaredSegment = new List<double>();
            read = wave.Read(mainBuffer, 0, mainBuffer.Length);
            for (int i = 0; i < read / 8; i++)
            {
                segment.Add((BitConverter.ToSingle(mainBuffer, i * 8)));
                double segmentSquare = segment[i] * segment[i];
                listOfSquaredSegment.Add(segmentSquare);
                //arr1 = segment.ToArray();
            }
            arr1 = segment.ToArray();
            double energy = Math.Sqrt(listOfSquaredSegment.Sum());
            listOfEnergies.Add(energy);
            MWArray result = obj.entropy(arr1);
            ent.Add(result);
            arr1 = null;
        }