找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 文档 工具 设计
查看: 27|回复: 0

计算SNR的Python脚本

[复制链接]

2万

主题

1506

回帖

3万

积分

超级版主

教育辅助界扛把子

附加身份标识
精华
1
热心
10
听众
1
威望
7
贡献
16984
违规
0
书币
55599
注册时间
2020-4-8

论坛元老灌水之王

发表于 2025-7-21 23:42 | 显示全部楼层 |阅读模式
计算SNR的Python脚本


import numpy as np
import sys
def calculate_snr(adc_output, fs, f_signal):
    """
    计算 ADC 输出的信噪比 (SNR)。
    参数:
    adc_output (array-like): ADC 输出的数据序列。
    fs (float): 采样频率。
    f_signal (float): 输入信号的频率。
    返回:
    float: 计算得到的 SNR,单位为 dB。
    """
    # 转换为 numpy 数组
    adc_output = np.array(adc_output)
    # 计算信号的长度
    N = len(adc_output)
    # 执行快速傅里叶变换 (FFT)
    fft_result = np.fft.fft(adc_output)
    frequencies = np.fft.fftfreq(N, 1/fs)
    # 找到信号频率对应的索引
    signal_index = np.argmin(np.abs(frequencies - f_signal))
    # 计算信号功率
    signal_power = np.abs(fft_result[signal_index])**2 / (N**2)
    # 计算噪声功率
    noise_power = np.sum(np.abs(fft_result)**2) / (N**2) - signal_power
    # 计算 SNR
    snr = 10 * np.log10(signal_power / noise_power)
    return snr
# 示例使用
if __name__ == "__main__":
    # 模拟 ADC 输出数据
    fs = 1000  # 采样频率 (Hz)
    f_signal = 50  # 信号频率 (Hz)
    t = np.arange(0, 1, 1/fs)
    adc_output = np.sin(2 * np.pi * f_signal * t) + 0.1 * np.random.randn(len(t))
    # 计算 SNR
    snr = calculate_snr(adc_output, fs, f_signal)
    print(f"SNR: {snr:.2f} dB")

Great works are not done by strength, but by persistence! 历尽艰辛的飞升者,成了围剿孙悟空的十万天兵之一。
相信我 学习就是不断的重复 不需要什么技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号


免责声明:
本站所发布的第三方软件及资源(包括但不仅限于文字/图片/音频/视频等仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢某程序或某个资源,请支持正版软件及版权方利益,注册或购买,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To: admin@cdsy.xyz

QQ|Archiver|手机版|小黑屋|城东书院 ( 湘ICP备19021508号-1|湘公网安备 43102202000103号 )

GMT+8, 2025-7-25 21:15 , Processed in 0.035067 second(s), 27 queries .

Powered by Discuz! CDSY.XYZ

Copyright © 2019-2025, Tencent Cloud.

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