C#读取DZT 瞬变电磁

public DztReaderResult Read(string path)
        {
            //最小头部长度
            int MINHEADSIZE = 1024;
            DztReaderResult result = null;
            //雷达数据
            List<float> dztData = new List<float>();
            using (FileStream fileStream = File.Open(path, FileMode.Open))
            {
                // 打开文件并创建一个 BinaryReader 对象
                BinaryReader reader = new BinaryReader(fileStream);
                // 读取文件内容
                //读取header

                fileStream.Seek(2, SeekOrigin.Begin);
                //数据偏移量
                int rh_data = reader.ReadUInt16();
                
                //数据长度
                fileStream.Seek(4, SeekOrigin.Begin);
                int rh_nsamp = reader.ReadUInt16();
                fileStream.Seek(52, SeekOrigin.Begin);
                //通道数
                int rh_nchan = reader.ReadUInt16();
                fileStream.Seek(40, SeekOrigin.Begin);
                int rh_rgain = reader.ReadUInt16();
                fileStream.Seek(6, SeekOrigin.Begin);
                //数据类型,每个数据所占位数
                int rh_bits = reader.ReadUInt16();
                //whether or not the header is normal or big-->determines offset to data array
                int data_offset = rh_data < MINHEADSIZE ? MINHEADSIZE * rh_data : MINHEADSIZE * rh_nchan;
                int offset = data_offset - MINHEADSIZE * rh_nchan;
                int data_start = MINHEADSIZE * rh_nchan + offset;
                fileStream.Seek(data_start, SeekOrigin.Begin);
                int dataLength = 0;
                if (rh_bits == 8)
                {
                    dataLength = (int)(fileStream.Length - data_start);
                }else if (rh_bits == 16)
                {
                    dataLength = (int)((fileStream.Length - data_start) /2);
                }
                else
                {
                    dataLength = (int)((fileStream.Length - data_start) / 4);
                }
                for (int i = 0; i < dataLength; i++)
                {
                    switch (rh_bits)
                    {
                        case 8:
                            dztData.Add(reader.ReadByte());
                            break;
                        case 16:
                            dztData.Add(reader.ReadUInt16());
                            break;
                        default:
                            dztData.Add(reader.ReadInt32());
                            break;
                    }
                }
                NDArray dztOutData = np.array(dztData);
                dztOutData = dztOutData.reshape(-1, rh_nsamp * rh_nchan);
                dztOutData = dztOutData.T;
                List<NDArray> arr = new List<NDArray>();
                //如果是多通道数据,返回数组
                for (int i = 0; i < rh_nchan; i++)
                {
                    arr.Add(dztOutData[new Slice(i * rh_nsamp, (i + 1) * rh_nsamp)]);
                }
                result = new DztReaderResult(arr, rh_data, rh_nchan, rh_nsamp, rh_rgain,rh_bits);
            }
            return result;
        }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值