1.产生FM信号并绘制频域波形

%% 产生FM信号并绘制时域波形
fm = 500; % 调制信号频率
Am = 0.5; % 调制信号幅度
fc = 5e3; % 载波频率
Ac = 1; % 载波幅度
kf = 10000*pi; % 调频灵敏度
fs = 75e3; % 采样率
N = 3000; % 样点总数
t = (0:N-1)'/fs; % 时间t
m_t = Am*sin(2*pi*fm*t); % 调制信号
phi_t = kf*cumsum(m_t)/fs; % 相位积分
s_t = cos(2*pi*fc*t + phi_t); % 已调信号
plot(t, s_t , 'b'); % 绘波形
xlabel('time');
xlim('auto');
ylabel('amplitude');
ylim('auto');

2.绘制频谱图

%% 绘制频谱图
L = length(s_t); % 取得序列长度 
u = fftshift(fft(s_t )); % 离散傅里叶变换,求频谱
w = (0:L-1)'*fs/L - 1/2*fs; % 横坐标-频率
figure(2)
plot(w, abs(u)); % 绘制频谱图 
grid on; 
xlabel('frequency(Hz)'); 
ylabel('magnitude(dB)');

3.贝塞尔函数值

%% 贝塞尔函数值
b=500*N/fs;%计算频域上间隔500Hz对应的点数
c=1500+10*b+1;%计算fc在频域上对应的位置
for i=0:1:10
   a(i+1)=abs(u(c+b*i)/N*2);%计算fc+i*fm对应的频谱值
   bessel(i+1)=besselj(i,5);%计算对应的贝塞尔函数值,mf=5
end
a
bessel

4.FM信号非相干解调

%FM信号非相干解调
fc = 5e3; % 载波频率
fs = 100e3; % 采样率
N = length(s_t); % 样点数
[lpf_b,lpf_a] = butter(10, (fc/2)/(fs/2)); % 设计低通滤波器
t = (0:N-1)'/fs; % 时间t
r_t = s_t;
r_d_t = [0;diff(r_t)]; % 求微分
r_e_t = abs(hilbert(r_d_t)); % 包络检波
demod_t = filter(lpf_b, lpf_a, r_e_t); % 滤波
plot(t, demod_t , 'b'); % 绘图

5.解调调频立体声广播

%% 调频立体声广播解调 
clear all;clc;close all
load 'fm_cap.mat';  %载入FM信号
fc = 200e3; % 载波频率
fs = 2e6; % 采样率
r_t = fm_cap;
N = length(r_t); % 样点数
[lpf_b,lpf_a] = butter(10, (fc/2)/(fs/2)); % 设计低通滤波器
t = (0:N-1)'/fs; % 时间t
%% 解调
r_d_t = [0;diff(r_t)]; % 求微分
r_e_t = abs(hilbert(r_d_t)); % 包络检波
demod_t = filter(lpf_b, lpf_a, r_e_t); % 滤波
plot(t, demod_t , 'b'); % 绘图
%% 信号抽取,使声卡能够播放音频
demod_t2 = resample(demod_t,48e3,2e6);%按比例降低采样率
demod_t2=demod_t2/max(demod_t2);%归一化,限制音频幅度范围,否则无法播放
fs2=48e3;%新采样率
N2 = length(demod_t2); % 新样点数
t2 = (0:N2-1)'/fs2; % 新时间t
plot(t2, demod_t2 , 'b'); % 绘图
sound(demod_t2,fs2);%播放音频

 

posted on 2015-10-26 20:54  planet  阅读(1554)  评论(0编辑  收藏  举报