- 日志
- 28
- 好友
- 17
- 阅读权限
- 150
- 收听
- 1
- 在线时间
- 1867 小时
- 最后登录
- 2025-7-25

超级版主
教育辅助界扛把子
- 精华
- 1
- 热心
- 10
- 听众
- 1
- 威望
- 7
- 贡献
- 16984
- 违规
- 0
- 书币
- 55599
- 注册时间
- 2020-4-8
 
|
计算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")
|
|