信号处理趣学D11——怎么避免信号调质过程的时候重叠失真?
重叠失真(alisasing)或者混叠失真是在信号调制的时候,载波频率小于原信号最高频率导致的。下面小虎就带大家用MATLAB仿真理解一下。
仿真结果
原始信号如下:
y
1
=
s
i
n
(
200
π
t
)
y_1=sin(200\pi t)
y1=sin(200πt)
调质频率分别是300Hz和50Hz
下面一组图中,从左到右、上到下依次是原始信号1、调幅波1,2、解调波1,2的时域图像。
- 可以看到,由于调制频率50Hz比原始信号的频率100Hz小,所以调幅波出现波峰混乱的情况。
- 解调后,由于重叠失真,导致解调后的波形与原始信号极大偏离。
- 为了避免重叠失真,参考信号采样中的采样定理,载波频率应该比原始信号的频率大。实际使用中,载波频率至少数倍甚至数十倍大于原始信号的最高频率。
代码分析
参数设置
采样频率是44100,采样间隔1/44100。调质波为:
y
=
s
i
n
(
200
π
t
)
y=sin(200\pi t)
y=sin(200πt)
Fs=44100;
dt=1.0/Fs;
T=1; N=T/dt;
t=[0:N-1]/N;
x1=sin(2*pi*100*t);
调制
% fz=300Hz
subplot(2,2,1)
x2=ammod(x1,300,Fs,0);
plot(t,x2);
axis([0,0.2,-1.2,1.2]);
% fz=50Hz
subplot(2,2,2)
x4=ammod(x1,50,Fs,0);
plot(t,x4);
axis([0,0.2,-1.2,1.2]);
解调
% fz=300Hz
subplot(2,2,3)
x3=amdemod(x2,300,Fs,0);
plot(t,x3);
axis([0,0.2,-1.2,1.2]);
% fz=50Hz
subplot(2,2,4)
x5=amdemod(x4,50,Fs,0);
plot(t,x5);
axis([0,0.2,-1.2,1.2]);
完整代码
Fs=44100;
dt=1.0/Fs;
T=1; N=T/dt;
t=[0:N-1]/N;
x1=sin(2*pi*100*t);
% fz=300Hz
subplot(2,2,1)
x2=ammod(x1,300,Fs,0);
plot(t,x2);
axis([0,0.2,-1.2,1.2]);
subplot(2,2,3)
x3=amdemod(x2,300,Fs,0);
plot(t,x3);
axis([0,0.2,-1.2,1.2]);
% fz=50Hz
subplot(2,2,2)
x4=ammod(x1,50,Fs,0);
plot(t,x4);
axis([0,0.2,-1.2,1.2]);
subplot(2,2,4)
x5=amdemod(x4,50,Fs,0);
plot(t,x5);
axis([0,0.2,-1.2,1.2]);
参考资料
[1] 张春华等,工程测试技术基础(第二版),华中科技大学出版社
[2] 何岭松等,中国大学MOOC——工程测试技术基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)