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 浏览: 114
正弦信号的matlab代码-Spectrum-estimation:频谱估计
这是一段 MATLAB 代码,主要是实现了一个基于锁相环的频率调制(FM)解调器。代码的主要流程如下:
1. 定义基本参数:包括消息信号频率、采样率、采样点数、采样时间等。
2. 生成 FM 调制信号:根据消息信号进行 FM 调制,生成已调信号。
3. 定义锁相环参数:包括环路滤波器的增益、积分时间、比例时间等。
4. 实现锁相环:根据锁相环的基本工作原理,计算环路滤波器的输出、鉴相器的输出和压控振荡器的输出等。
5. 绘制结果图形:通过 MATLAB 绘图函数,绘制消息信号、已调信号、环路滤波器的输出、压控振荡器的输出、鉴相器的输出和载波等信号的波形图。
该代码的主要作用是演示锁相环在 FM 解调中的应用,通过调整锁相环的参数,可以实现不同的解调效果。
阅读全文