我的csdn会员即将到期

核心内容摘要

未来5年,AI领域最吃香的5类工作(月薪10万起,非科班也能入局)
揭秘C++27原子操作底层重构:LL/SC指令对齐优化、TSO-to-RCU内存模型桥接、以及被ISO删减但GCC 14已实装的__atomic_fence_hint

智能客服小程序的设计与实现:从零搭建高可用对话系统

模拟信号与数字信号转换在信号处理中模拟信号与数字信号的转换是一个非常重要的步骤。

模拟信号是连续变化的信号而数字信号是由离散的数字值组成的信号。

模拟信号与数字信号之间的转换主要涉及两个过程模数转换Analog-to-Digital Conversion, ADC和数模转换Digital-to-Analog Conversion, DAC。

这两个过程在通信系统、音频处理、图像处理等领域中广泛使用。

本节将详细介绍模数转换和数模转换的原理和方法并通过具体实例进行说明。

模数转换 (ADC)模数转换是将连续的模拟信号转换为离散的数字信号的过程。

这个过程通常包括三个步骤采样、量化和编码。

采样 (Sampling)采样是将连续时间的模拟信号转换为离散时间信号的过程。

根据奈奎斯特采样定理Nyquist Sampling Theorem采样频率必须至少是信号最高频率的两倍以避免采样引起的失真即混叠Aliasing现象。

奈奎斯特采样定理采样频率f s f_sfs​必须满足f s ≥ 2 f max f_s \geq 2f_{\text{max}}fs​≥2fmax​其中f max f_{\text{max}}fmax​是模拟信号的最高频率。

采样过程假设我们有一个连续时间的模拟信号x ( t ) x(t)x(t)采样过程可以用一个周期性的冲激函数δ ( t ) \delta(t)δ(t)来表示x s ( t ) x ( t ) ⋅ δ ( t ) x_s(t) x(t) \cdot \delta(t)xs​(t)x(t)⋅δ(t)其中δ ( t ) \delta(t)δ(t)的周期为T s 1 f s T_s \frac{1}{f_s}Ts​fs​1​。

量化 (Quantization)量化是将采样后的离散时间信号转换为有限个离散电平的过程。

量化过程通常会导致量化误差即量化后的信号与原始采样信号之间的差异。

量化步骤确定量化级别选择合适的量化级别N NN。

量化器设计设计一个量化器通常是一个量化函数Q ( x ) Q(x)Q(x)。

量化误差量化误差e ( n ) e(n)e(n)为e ( n ) x ( n ) − Q ( x ( n ) ) e(n) x(n) - Q(x(n))e(n)x(n)−Q(x(n))

编码 (Encoding)编码是将量化后的信号转换为二进制码的过程。

编码过程可以使用不同的编码方案常见的编码方案包括自然二进制编码、二进制补码编码等。

编码步骤确定编码方案选择合适的编码方案。

编码器设计设计一个编码器将量化后的电平转换为二进制码。

例子模数转换假设我们有一个正弦信号x ( t ) sin ⁡ ( 2 π f t ) x(t) \sin(2\pi f t)x(t)sin(2πft)其中f 100 f 100f100Hz。

我们将这个信号进行采样、量化和编码。

采样importnumpyasnpimportmatplotlib.pyplotasplt# 模拟信号参数f100# 信号频率tnp.linspace(0,1,

# 时间向量xnp.sin(2*np.pi*f*t)# 模拟信号# 采样频率fs2*f# 满足奈奎斯特采样定理ts1/fs# 采样周期# 采样时间向量ts_samplesnp.arange(0,1,ts)x_samplesnp.sin(2*np.pi*f*ts_samples)# 绘制原始信号和采样信号plt.figure(figsize(10,

)plt.plot(t,x,label原始信号,colorblue)plt.stem(ts_samples,x_samples,linefmtr-,markerfmtro,basefmtk-,label采样信号)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(模拟信号采样)plt.legend()plt.show()

量化假设我们使用 8 位量化器量化级别N 2 8 256 N 2^8 256N28256。

# 量化器参数N256# 量化级别max_value1# 信号的最大幅度min_value-1# 信号的最小幅度step(max_value-min_value)/(N-

# 量化步长# 量化函数defquantize(x):returnnp.round((x-min_value)/step)*stepmin_value# 量化采样信号x_quantizedquantize(x_samples)# 绘制量化信号plt.figure(figsize(10,

)plt.stem(ts_samples,x_samples,linefmtr-,markerfmtro,basefmtk-,label采样信号)plt.stem(ts_samples,x_quantized,linefmtg-,markerfmtgo,basefmtk-,label量化信号)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(信号量化)plt.legend()plt.show()

编码使用自然二进制编码将量化后的信号转换为二进制码。

# 编码函数defencode(x,N):codenp.zeros((len(x),N),dtypeint)foriinrange(len(x)):code[i]np.binary_repr(int((x[i]-min_value)/step),widthN)returncode# 编码量化信号x_encodedencode(x_quantized,

# 打印前几个编码结果foriinrange(

:print(f采样点{ts_samples[i]}: 量化值{x_quantized[i]}, 编码值{x_encoded[i]})数模转换 (DAC)数模转换是将离散的数字信号转换为连续的模拟信号的过程。

这个过程通常包括两个步骤解码和重构。

解码 (Decoding)解码是将数字信号的二进制码转换为量化电平的过程。

解码过程可以使用不同的解码方案常见的解码方案包括自然二进制解码、二进制补码解码等。

解码步骤确定解码方案选择合适的解码方案。

解码器设计设计一个解码器将二进制码转换为量化电平。

重构 (Reconstruction)重构是将量化后的离散电平信号转换为连续时间信号的过程。

常见的重构方法包括零阶保持Zero-Order Hold, ZOH和一阶保持First-Order Hold, FOH。

重构方法零阶保持每个采样点保持相同的值直到下一个采样点。

一阶保持使用线性插值在采样点之间重构信号。

例子数模转换假设我们有一个 8 位编码的数字信号我们将这个信号进行解码和重构。

解码# 解码函数defdecode(code,N,min_value,max_value):xnp.zeros(len(code))foriinrange(len(code)):x[i]int(code[i],

*stepmin_valuereturnx# 解码编码信号x_decodeddecode(x_encoded,8,min_value,max_value)# 绘制解码信号plt.figure(figsize(10,

)plt.stem(ts_samples,x_quantized,linefmtg-,markerfmtgo,basefmtk-,label量化信号)plt.plot(ts_samples,x_decoded,label解码信号,colororange)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(信号解码)plt.legend()plt.show()

重构使用零阶保持和一阶保持方法进行信号重构。

# 零阶保持重构defzoh_reconstruction(x,fs,t):ynp.zeros_like(t)foriinrange(len(x)):y[i*fs:(i

*fs]x[i]returny# 一阶保持重构deffoh_reconstruction(x,fs,t):ynp.zeros_like(t)foriinrange(len(x)-

:y[i*fs:(i

*fs]np.linspace(x[i],x[i1],fs)y[(len(x)-

*fs:]x[-1]returny# 重构时间向量t_reconstructionnp.linspace(0,1,

# 零阶保持重构x_zohzoh_reconstruction(x_decoded,fs,t_reconstruction)# 一阶保持重构x_fohfoh_reconstruction(x_decoded,fs,t_reconstruction)# 绘制重构信号plt.figure(figsize(10,

)plt.plot(t,x,label原始信号,colorblue)plt.plot(t_reconstruction,x_zoh,label零阶保持重构信号,colorred,linestyle--)plt.plot(t_reconstruction,x_foh,label一阶保持重构信号,colorgreen,linestyle:)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(信号重构)plt.legend()plt.show()模拟信号与数字信号转换的应用模数转换和数模转换在通信系统中有着广泛的应用例如音频处理音频信号通常以模拟信号形式存在通过 ADC 转换为数字信号后可以进行存储、传输和处理。

在播放时通过 DAC 将数字信号转换回模拟信号。

图像处理图像信号通常是模拟信号通过 ADC 转换为数字图像后可以进行各种处理如滤波、压缩等。

在显示时通过 DAC 将数字图像转换回模拟信号。

数据通信在数据通信系统中模拟信号通过 ADC 转换为数字信号后进行调制和传输。

接收端通过 DAC 将接收到的数字信号转换回模拟信号。

例子音频信号处理假设我们有一个音频信号我们将这个信号进行模数转换和数模转换。

音频信号的模数转换importscipy.io.wavfileaswavfile# 读取音频文件fs,datawavfile.read(audio.wav)# 选择一个声道假设是单声道iflen(data.shape)1:datadata[:,0]# 采样时间向量t_audionp.arange(len(data))/fs# 绘制原始音频信号plt.figure(figsize(10,

)plt.plot(t_audio,data,label原始音频信号,colorblue)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(原始音频信号)plt.legend()plt.show()# 量化音频信号x_quantized_audioquantize(data)# 绘制量化音频信号plt.figure(figsize(10,

)plt.plot(t_audio,data,label原始音频信号,colorblue)plt.stem(t_audio,x_quantized_audio,linefmtg-,markerfmtgo,basefmtk-,label量化音频信号)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(音频信号量化)plt.legend()plt.show()# 编码量化音频信号x_encoded_audioencode(x_quantized_audio,

8)

音频信号的数模转换# 解码编码音频信号x_decoded_audiodecode(x_encoded_audio,8,min_value,max_value)# 绘制解码音频信号plt.figure(figsize(10,

)plt.plot(t_audio,data,label原始音频信号,colorblue)plt.plot(t_audio,x_decoded_audio,label解码音频信号,colororange)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(音频信号解码)plt.legend()plt.show()# 重构音频信号x_zoh_audiozoh_reconstruction(x_decoded_audio,fs,t_audio)x_foh_audiofoh_reconstruction(x_decoded_audio,fs,t_audio)# 绘制重构音频信号plt.figure(figsize(10,

)plt.plot(t_audio,data,label原始音频信号,colorblue)plt.plot(t_audio,x_zoh_audio,label零阶保持重构信号,colorred,linestyle--)plt.plot(t_audio,x_foh_audio,label一阶保持重构信号,colorgreen,linestyle:)plt.xlabel(时间 (s))plt.ylabel(幅度)plt.title(音频信号重构)plt.legend()plt.show()小结模数转换和数模转换是信号处理中的基本步骤涉及采样、量化、编码、解码和重构等多个环节。

通过上述例子我们详细介绍了这些过程的原理和实现方法并展示了如何在实际应用中进行音频信号的模数转换和数模转换。

这些技术在通信系统、音频处理、图像处理等领域中具有重要的应用价值。

大叔爱上十九岁丫头-大叔爱上十九岁丫头应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123