vector<vector<string>>双层vector使用

 1 using namespace std;
 2 
 3 vector<vector<string>>& vAllRow;
 4 while(读取数据到r中)
 5 {
 6     vector<string> vRow;
 7     vRow.clear();
 8     
 9     vRow.push_back(r[0]);
10     vRow.push_back(r[1]);
11     vRow.push_back(r[2]);
12     vRow.push_back(r[3]);
13     vRow.push_back(r[4]);
14     vRow.push_back(r[5]);
15     
16     vAllRow.push_back(vRow);
17 }
18 //数据存储到了vAllRow中,下面将数据显示出来
19 vector<vector<string>>::iterator item2v=vAllRow.begin();
20 while(item2v!=vAllRow.end())
21 {
22     vector<string>::iterator item=(*item2v).begin();
23     while(item!=(*item2v.end())
24     {
25         cout<<*item<<"\t";
26         item++;
27     }
28     cout<<endl;
29     item2v++;
30 }

 

转载于:https://www.cnblogs.com/JiaoZha/p/7922737.html

#include <iostream> #include <fstream> #include <vector> #include <cmath> #include <complex> // WAV文件头结构(44字节) #pragma pack(push, 1) struct WAVHeader { char riff[4]; // "RIFF" uint32_t fileSize; // 文件总大小-8 char wave[4]; // "WAVE" char fmt[4]; // "fmt " uint32_t fmtSize; // fmt块大小(16) uint16_t format; // 1=PCM uint16_t channels; // 通道数 uint32_t sampleRate; // 采样率 uint32_t byteRate; // 每秒字节数 uint16_t blockAlign; // 数据块对齐 uint16_t bitsPerSample; // 位深度 char data[4]; // "data" uint32_t dataSize; // 数据块大小 }; #pragma pack(pop) // 读取IQ WAV文件(假设32位浮点双通道) std::vector<std::complex<float>> readIQWav(const std::string& filename) { std::ifstream file(filename, std::ios::binary); if (!file) { throw std::runtime_error("无法打开文件"); } WAVHeader header; file.read(reinterpret_cast<char*>(&header), sizeof(header)); // 验证头信息 if (memcmp(header.riff, "RIFF", 4) != 0 || memcmp(header.wave, "WAVE", 4) != 0 || header.format != 3) { // 3表示浮点格式 throw std::runtime_error("不支持的WAV格式"); } const size_t numSamples = header.dataSize / (sizeof(float) * 2); std::vector<std::complex<float>> iqData(numSamples); // 读取IQ数据(交替存储的I和Q) for (size_t i = 0; i < numSamples; ++i) { float I, Q; file.read(reinterpret_cast<char*>(&I), sizeof(float)); file.read(reinterpret_cast<char*>(&Q), sizeof(float)); iqData[i] = std::complex<float>(I, Q); } return iqData; } // 频率搬移(复数混频) void frequencyShift(std::vector<std::complex<float>>& data, float sampleRate, float shiftFreq) { const float phaseStep = 2 * M_PI * shiftFreq / sampleRate; float phase = 0.0f; for (auto& sample : data) { // 生成复数指数 std::complex<float> mixer(std::cos(phase), -std::sin(phase)); sample *= mixer; // 相位累积 phase = fmod(phase + phaseStep, 2 * M_PI); } } // 生成汉宁窗FIR低通滤波器系数 std::vector<float> designHanningLPF(float cutoffFreq, float sampleRate, int numTaps) { std::vector<float> coeffs(numTaps); const float normCutoff = cutoffFreq / sampleRate; for (int n = 0; n < numTaps; ++n) { // 理想低通冲激响应 float h = 2 * normCutoff * sinc(2 * M_PI * normCutoff * (n - (numTaps-1)/2.0f)); // 应用汉宁窗 float window = 0.5 - 0.5 * cos(2 * M_PI * n / (numTaps - 1)); coeffs[n] = h * window; } return coeffs; } // FIR滤波器实现 std::vector<std::complex<float>> applyFIRFilter( const std::vector<std::complex<float>>& input, const std::vector<float>& coeffs) { std::vector<std::complex<float>> output(input.size(), 0); const int numTaps = coeffs.size(); for (size_t i = 0; i < input.size(); ++i) { for (int j = 0; j < numTaps; ++j) { if (i >= j) { output[i] += input[i - j] * coeffs[j]; } } } return output; } // 示例使用 int main() { try { // 1. 读取IQ数据 auto iqData = readIQWav("input.wav"); // 2. 频率搬移(示例:下变频2MHz) const float sampleRate = 10e6; // 假设采样率10MHz frequencyShift(iqData, sampleRate, -2e6); // 3. 设计滤波器(截止频率1MHz,101阶) auto coeffs = designHanningLPF(1e6, sampleRate, 101); // 4. 应用滤波 auto filtered = applyFIRFilter(iqData, coeffs); // 可添加保存结果的代码... } catch (const std::exception& e) { std::cerr << "错误: " << e.what() << std::endl; return 1; } return 0; }修复错误
最新发布
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值