首页 > 解决方案 > 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;

图一 图 2

我的问题是在第三张图中显示得很好我放了大图 图3 图4

标签: matlabmodulation

解决方案


k = -(length(X)-1)/2:1:length(X)/2;

你的 k 不是对称的。如果你使用对称 k 工作正常吗?


推荐阅读