东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1370|回复: 1
打印 上一主题 下一主题

[C/C++] 模拟连续波CW信号生成block的work函数

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14441
QQ
跳转到指定楼层
楼主
发表于 2021-7-5 16:42:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



模拟连续波CW信号生成block的work函数


  1. #include <iostream>
  2. #include <complex>
  3. #include <vector>
  4. #include <unistd.h>
  5. #include <string.h>

  6. #define GR_M_PI 3.14159265358979323846            /* pi */


  7. //complex 头文件定义了用于处理复数的功能。complex<T> 模板类型的实例表示的是复数,这里定义了 3 个特化类型:
  8. //complex<float>、complex<double>、complex<long double>

  9. typedef std::vector<void*> gr_vector_void_star;
  10. //typedef std::vector<const void*> gr_vector_const_void_star;
  11. typedef std::complex<float> gr_complex;


  12. int work(int noutput_items, gr_vector_void_star& output_items)
  13. {
  14.     // 谁调这个函数,谁就来决定output_items的数目
  15.     //std::cout << "python里的tb.start()来调work()吗?noutput_items=" << noutput_items << std::endl;
  16.     //std::cout << "到底谁来反复调这个work函数开始?这个值noutput_items输出数目谁定的?=" << noutput_items << std::endl;
  17.     //std::cout << "1个包的长度d_packet_len界面参数定的=" << d_packet_len << std::endl;
  18.     //output_items[0]指向模块的输出缓冲区

  19.     gr_complex* out = (gr_complex*)output_items[0];  // out就是一个复数数组了
  20.     //out = new gr_complex[4096];  
  21.     std::cout << "输出缓冲区数组长度(这里的out还是首元素地址)=" << sizeof(out) / sizeof(out[0]) << std::endl;

  22.     //我加一句 需要重新编译并安装 make  sudo make install 起作用了
  23.     //sizeof(gr_complex)=8
  24.     //std::cout << "sizeof(gr_complex)=" << sizeof(gr_complex) << std::endl;
  25.     //noutput_items=4096   noutput_items=3072  noutput_items=3073  noutput_items=4095
  26.     // std::cout << "输出样点数noutput_items=" << noutput_items << std::endl;

  27.     // Set output to zero 每次都清空一下
  28.     memset(out, 0, noutput_items * sizeof(gr_complex));
  29.    
  30.     int d_samp_rate=32000;   //采样率  32k
  31.     float d_amplitude=1.0;   //振幅
  32.     std::vector<float> d_frequency;
  33.     d_frequency.push_back(1000);  //频率1k
  34.     int d_num_freq = d_frequency.size();// 频点个数
  35.     std::vector<gr_complex> d_phase;   //相位
  36.     d_phase.resize(d_num_freq);
  37.    

  38.     // Integrate phase for iq signal iq信号的集成相位
  39.     for (int i = 0; i < noutput_items; ++i) {
  40.         
  41.         // Write sample  这里才是真正的写样本
  42.         for (int k = 0; k < d_num_freq; ++k) { // Go through frequencies
  43.             //std::cout << i << "----" << k << "----" << d_phase[k] << std::endl;
  44.             // 遍历 所有的频率
  45.             out[i] += d_amplitude / (float)d_num_freq * exp(d_phase[k]);
  46.             // output amplitude is normed on d_amplitude
  47.             d_phase[k] = gr_complex(0, std::fmod(imag(d_phase[k]) + 2 * GR_M_PI * d_frequency[k] /
  48.                                                                (float)d_samp_rate,
  49.                                         2 * GR_M_PI));
  50.             //std::cout << "相位(只改变虚部):" << d_phase[k] << std::endl;
  51.         }
  52.         //std::cout << "输出的值out(复数形式)=" << out[i] << std::endl;
  53.     }

  54.     // Tell runtime system how many output items we produced.
  55.     // 告诉运行时系统我们生成了多少输出项
  56.     return noutput_items;
  57. }



  58. int main(){
  59.     //模拟连续波CW信号生成block的work函数
  60.     int noutput_items = 4096;   //这个值在框架里会波动 4095 4096
  61.     gr_complex out[noutput_items];  //复数数组 栈  int a[10];
  62.     std::cout << "sizeof(gr_complex)=" << sizeof(gr_complex) << std::endl;

  63.     //模拟一下 定时调用work
  64.     for(int i=0;i<5;i++){
  65.         //work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items)
  66.         //gr_vector_const_void_star input;
  67.         gr_vector_void_star output;  
  68.         output.push_back(out);//代表1个输出端口
  69.         work(noutput_items, output);
  70.         sleep(1); //停留n秒
  71.     }

  72.     return 0;
  73. }
复制代码


让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

98

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
沙发
发表于 2021-11-23 19:37:17 | 只看该作者
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-27 18:19 , Processed in 0.174272 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表