clear all; close all; f=1000; fs=100000; N=5000; Ts=1/fs; t=(0:Ts:(N*Ts)-Ts); f1=100; msg=sin(2*pi*f1*t); kf=.0628; Signal=exp(j*(2*pi*f*t+2*pi*kf*cumsum(msg))); Signal1=exp(j*(2*pi*f*t)); phi_hat(1)=30; e(1)=0; phd_output(1)=0; vco(1)=0; kp=0.15; ki=0.1; for n=2:length(Signal) vco(n)=conj(exp(j*(2*pi*n*f/fs+phi_hat(n-1)))); phd_output(n)=imag(Signal(n)*vco(n)); e(n)=e(n-1)+(kp+ki)*phd_output(n)-ki*phd_output(n-1); phi_hat(n)=phi_hat(n-1)+e(n); end; startplot=1; endplot=1000; figure(1); subplot(3,2,1); plot(t(startplot:endplot),msg(startplot:endplot)); title('消息信号(频率100Hz)'); ylabel('幅度'); grid; figure(1); subplot(3,2,2); plot(t(startplot:endplot),real(Signal(startplot:endplot))); title('FM已调信号(用100Hz的消息信号调制1KHz的载波)'); ylabel('幅度'); grid; figure(1); subplot(3,2,3); plot(t(startplot:endplot),e(startplot:endplot)); title('环路滤波器的输出'); ylabel('幅度'); grid; subplot(3,2,4); plot(t(startplot:endplot),real(vco(startplot:endplot))); title('压控振荡器'); ylabel('幅度'); grid; subplot(3,2,5); plot(t(startplot:endplot),phd_output(startplot:endplot)); title('鉴相器的输出'); xlabel('时间(seconds)'); ylabel('幅度'); grid; subplot(3,2,6); plot(t(startplot:endplot),real(Signal(startplot:endplot))); title('载波(频率)'); xlabel('时间(seconds)'); ylabel('幅度'); grid;
时间: 2024-04-26 16:22:03 浏览: 4
这是一段 MATLAB 代码,主要是实现了一个基于锁相环的频率调制(FM)解调器。代码的主要流程如下:
1. 定义基本参数:包括消息信号频率、采样率、采样点数、采样时间等。
2. 生成 FM 调制信号:根据消息信号进行 FM 调制,生成已调信号。
3. 定义锁相环参数:包括环路滤波器的增益、积分时间、比例时间等。
4. 实现锁相环:根据锁相环的基本工作原理,计算环路滤波器的输出、鉴相器的输出和压控振荡器的输出等。
5. 绘制结果图形:通过 MATLAB 绘图函数,绘制消息信号、已调信号、环路滤波器的输出、压控振荡器的输出、鉴相器的输出和载波等信号的波形图。
该代码的主要作用是演示锁相环在 FM 解调中的应用,通过调整锁相环的参数,可以实现不同的解调效果。
相关问题
clear all; close all; clc; M=10; L=100; Ts=1; Rb=1/Ts; dt=Ts/L; fs=1/dt; TotalT=M*Ts; t=0:dt:TotalT-dt; wave=randint(1,M); fz=ones(1,L); x1=wave(fz,:); dnrz=reshape(x1,1,L*M); fc=2*Rb; kf=0.3; sfm=modulate(dnrz,fc,fs,'fm',kf); subplot(121); plot(t,dnrz); axis([0 TotalT -0.1 1.1]); subplot(122); plot(t,sfm);
这段代码实现了一个随机数据生成的FM数字调制信号,并绘制了时域波形。其中,代码的基本思路是:首先生成随机数据,然后将数据转换为数字调制信号。具体实现包括以下几个步骤:
1. 清空工作区、关闭所有图形窗口以及清空命令窗口,以避免变量或者图形的干扰。
2. 设置调制方式参数:M 表示数据比特数,L 表示每个比特的采样数,Ts 表示每个比特的持续时间,Rb 表示比特率,dt 表示采样时间间隔,fs 表示采样率,TotalT 表示信号持续时间,t 表示时间序列。
3. 生成随机数据。这里使用 `randint` 函数生成 M 个随机比特数据。
4. 将比特数据转换为数字调制信号。这里使用 `modulate` 函数实现数字调制,其中参数包括比特数据、载波频率、采样率、调制方式以及调制指数等。
5. 绘制数字调制信号时域波形。这里使用 `subplot` 函数将图像分成两个部分,分别绘制随机数据和FM数字调制信号的时域波形。
需要注意的是,这段代码中使用的是频率调制(FM)数字调制方式,与之前提到的幅度调制(AM)和相位调制(PM)不同。对于不同的数字调制方式,需要针对性地选择合适的调制算法和参数。
clc;clear all;close all; fs = 500; % 采样频率 Ts = 1 / fs; % 采样间隔 N=400;%观测时长 由于滤波需要时间稳定,多空余一些点数 Nt = 2N; % 总时长 t = (0 : Nt-1) * Ts; w0 = 50; % 信号频率 xt =10sin(1 * pi * w0 * t)+0.3sin(2 * pi * w0 * t)+0.5sin(3 * pi * w0 * t)+0.2sin(4 * pi * w0 * t)+0.4sin(5 * pi * w0 * t)+ 0.1sin(6 * pi * w0 * t)+ 0.01randn(1, Nt); % 周期函数叠加噪声 figure(); plot(xt(end-N+1:end));title('原始信号');ylim([-10 10]); output=xt; 伪代码
这段代码的伪代码如下:
1. 设置采样频率和采样间隔
2. 设置观测时长和总时长
3. 定义信号频率和周期函数,包括6个正弦波和噪声
4. 绘制原始信号图像
5. 将输出信号先赋值为原始信号
6. 进入循环,循环1000次进行周期陷波处理
7. 定义周期陷波处理函数
8. 取后面N个点的信号
9. 计算自相关函数
10. 截取一半自相关函数,去掉R(0)
11. 将自相关函数的最低频率设为25Hz
12. 寻找除R(0)以外的最大值索引,作为周期
13. 如果周期小于等于2,则输出原始信号
14. 如果周期大于2,则计算截止频率和带宽,使用iirnotch滤波器进行陷波
15. 输出陷波后的信号