GNU Radio Companion导出信号到CSV文件显示乱码的原因咨询
问题原因与解决办法
核心原因
你遇到的乱码问题,根源是GNU Radio的File Sink模块默认以二进制格式写入数据,而非文本格式的CSV。信号源输出的是浮点型或复数型的原始二进制数据,直接用Excel或文本编辑器打开自然会显示乱码——因为这些工具把二进制数据当成了文本编码解析,完全不匹配。
另外,你对File Sink的用途理解有误:它的作用是保存原始的信号流二进制数据(比如用于后续信号处理、重放),不是直接生成可读的CSV文本文件。
解决方法
方案1:用Vector Sink + Python脚本导出CSV
- 在GNU Radio Companion中,把原来的File Sink换成Vector Sink模块,设置合适的
Number of samples(比如你需要导出的样本数量)。 - 生成Python代码后,在代码末尾添加读取Vector Sink数据并写入CSV的逻辑:
import csv # 获取Vector Sink收集到的数据(假设你的Vector Sink变量名为vector_sink_0) data = vector_sink_0.data() # 写入CSV文件 with open('signal_output.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) # 写入表头 if isinstance(data[0], complex): writer.writerow(['Real Part', 'Imaginary Part']) for sample in data: writer.writerow([sample.real, sample.imag]) else: writer.writerow(['Sample Value']) for sample in data: writer.writerow([sample]) - 运行生成的Python脚本,就能得到Excel可正常识别的CSV文件。
方案2:使用专门的CSV Sink模块
如果你的GNU Radio版本较新,或者安装了扩展模块,可以直接使用CSV Sink(在模块库中搜索csv sink)。这个模块会自动将每个采样值转换成文本格式,按行写入CSV文件,无需额外编写代码。
注意:如果你的信号是复数类型,记得在CSV Sink的设置中勾选Output complex as two columns,这样Excel里会分成实部和虚部两列显示。
内容的提问来源于stack exchange,提问作者Roby
相关产品推荐
相关产品推荐

