matlab - Matlab FM解调和消除相位折叠效应
问题描述
我有一个用于频率调制和解调信号的 matlab 代码。我的代码适用于调制部分。我的消息信号是m
,调制信号是u
,代码将消息信号及其积分绘制在一张图中绘制1。然后用载波调制的信号和程序在时域绘制调制信号以绘制2。然后,借助一些代码块程序找到频谱调制信号和消息信号绘制它们的图形用于绘制 3. 在解调部分程序中对 FM 检测进行一些基本计算,然后使用滤波器获得消息信号。最后一部分程序绘制了恢复信号与消息信号的图表以进行比较。我总结了所有代码,因为我不知道问题出在哪里。当我制作缩放图 3 时,关于绘制 3 的问题我看到一些相位折叠或喜欢它。根据 y 轴,图形不是对称的。我没有解决这个问题,我研究了它们,我决定使用unwrap()
. 尽管我尝试了很多,但我无法成功。unwrap()
我怎样才能用函数摆脱这个阶段折叠。谢谢你。我的matlab代码是;
ts = 0.0001;% Sampling interval
t0 = 0.15; % Duration
t = 0:ts:t0;% define time vector
%% OTHER PARAMETERS
fc = 200; % Carrier signal frequency
kf =50; % Frequency deviation constant
fs = 1/ts; % Sampling frequency
%% MESSAGE SIGNAL SIMPLY
m = 1*(t<t0/3)-2*(t<2*t0/3).*(t>=t0/3);
%% Integration of m
int_m(1) = 0;
for k =1:length(m)-1
int_m(k+1) = int_m(k) + m(k)*ts;
end
%% PLOTTING 1
figure; subplot(211); % Message signal
plot(t,m);grid on;xlabel('time');ylabel('Amplitude');
title('m(t)');ylim([-3 2]);
subplot(212);plot(t,int_m);% Integral of message signal
grid on; xlabel('time');ylabel('Amplitude');title('integral of m(t)');
ylim([-0.07 0.07]);
%% FM MODULATED SIGNAL
u = cos(2*pi*fc*t + 2*pi*kf*int_m);
%% PLOTTING 2
figure; plot(t,u); % Modulated signal in time domain
grid on;xlabel('time');
ylabel('Amplitude');title('FM :u(t)');
ylim([-1.2 1.2]);
%% FINDING FREQUENCY SPECTRUM AND PLOTTING 3
% Frequency spectrum of m(t)
f=linspace(-1/(2*ts),1/(2*ts),length(t));
M=fftshift(fft(m))./length(t); % Taking fourier transform for m(t)
U=fftshift(fft(u))./length(t); % Taking fourier transform for u(t)
figure;subplot(211); % Frequence spectrum of m(t)
plot(f,abs(M)); grid;
xlabel('Frequency in Hz');xlim([-500 500]);
ylabel('Amplitude');title('Double sided Magnitude spectrum of m(t)');
subplot(212);plot(f,abs(U)); % Frequency spectrum of u(t)
grid;xlabel('Frequency in Hz');xlim([-500 500]);
ylabel('Amplitude');title('Double sided Magnitude spectrum of u(t)');
%% DEMODULATION (Using Differentiator)
dem = diff(u);
dem = [0,dem];
rect_dem = abs(dem);
%% Filtering out High Frequencies
N = 80; % Order of Filter
Wn = 1.e-2; % Pass Band Edge Frequency.
a = fir1(N,Wn);% Return Numerator of Low Pass FIR filter
b = 1; % Denominator of Low Pass FIR Filter
rec = filter(a,b,rect_dem);
%% Finding frequency Response of Signals
fl = length(t);
fl = 2^ceil(log2(fl));
f = (-fl/2:fl/2-1)/(fl*1.e-4);
mF = fftshift(fft(m,fl)); % Frequency Response of Message Signal
fmF = fftshift(fft(u,fl)); % Frequency Response of FM Signal
rect_demF = fftshift(fft(rect_dem,fl));% Frequency Response of Rectified FM Signal
recF = fftshift(fft(rec,fl)); % Frequency Response of Recovered Message Signal
%% PLOTTING 4
figure;subplot(211);plot(t,m);grid on;
xlabel('time');ylabel('Amplitude');
title('m(t)');ylim([-3 2]);
subplot(212);plot(t,rec);
title('Recovered Signal');xlabel('{\it t} (sec)');
ylabel('m(t)');grid;
解决方案
k = -(length(X)-1)/2:1:length(X)/2;
你的 k 不是对称的。如果你使用对称 k 工作正常吗?
推荐阅读
- google-maps - kml 模糊背景,除了多边形
- node.js - puppeteer - centos7 - 找不到符号
- flutter - 在颤振中使用模型类(飞镖)
- javascript - Redux 以前的状态已经有新的状态值无法理解为什么
- php - 如何从 url 获取信息
- excel - 在 vlookup 中以 dd/mm/yy 格式显示日期,而不是整数
- c# - 将俄语语言环境实现为 Android 的 Unity 文本到语音识别插件
- r - 金县地图未正确显示边界
- .net-core-3.0 - 如何在 EF Core 3.0 中使用带有 SqlParameters 的存储过程
- javascript - 无法使用 nightwatch js 验证模式内的详细信息