matlab pm解调,求助 如何对一个语音信号进行FM和PM调制解调

%(1)获取录音文件

pause

fs=44100;                          %声音的采样频率为44.1Khz

duration=3;                        %录音时间为3s

fprintf('按任意键开始录音1:\n');

pause

fprintf('录音中•••\n');

sd1=wavrecord(duration*fs,fs);  %duration*fs每次获得总的采样数为132300,保存声音文件名为sd1

fprintf('放音中•••\n');

wavplay(sd1,fs);

fprintf('录音1播放完毕。\n');

wavwrite(sd1,fs,'sound1.wav');     %将录音文件保存为WAV格式的声音文件

%(2)声音样本的时域和频域分析

fprintf('按任意键开始声音样本的时域分析:\n');

pause

fs=44100;                                    %声音的采样频率为44.1Khz

duration=3;

t=0:duration*fs-1;                           %总的采样数

[sd1,fs]=wavread('sound1.wav');              %打开保存的录音文件

figure(1)                                  %图一为三个声音样本的时域波形

subplot(311)

plot(t,sd1);xlabel('单位:s');ylabel('幅度');

title('三个声音样本的时域波形');

fprintf('按任意键开始声音样本的频域分析:\n');

pause

figure(2)                               %图二为三个声音样本的频谱分析

subplot(311)

stem(t,abs(fft(sd1)));                   %fft对声音信号进行快速傅里叶变换

xlabel('单位:Hz');ylabel('幅度');

title('三个声音样本的频谱分析');

%****************FM调制*******************

fprintf('按任意键开始已调信号的时域分析: \n');

pause

dt=1/44100;

t=0:dt:(duration*fs-1)/fs;

fc=4000;      %设定载波频率

mt=sd1;

ct=cos(2*pi*fc*t);                             %生成载波

kf=10;                                      %设定调频指数

int_mt(1)=0;

for i=1:length(t)-1

int_mt(i+1)=int_mt(i)+mt(i)*dt;               %求信号m(t)的积分

end                                          %调制,产生已调信号

sfm=cos(2*pi*fc*t+2*pi*kf*int_mt);            %调制信号

figure(3)

subplot(311)

plot(mt);xlabel('单位:s');ylabel('幅度');

subplot(312)

plot(t,ct);

xlabel('单位:s');ylabel('幅度');

subplot(313)

plot(t,sfm);xlabel('时间');ylabel('幅值')

nsfm=sfm;                                %生成含高斯白躁声的已调信号(信号通

%过信道传输)

%*****************************************

%•*•*•*•*•*•*•*•*•*•*•*•*•*•*•*•

%****************FM解调*******************

for i=1:length(t)-1                             %接受信号通过微分器处理

diff_nsfm(i)=(nsfm(i+1)-nsfm(i))./dt;

end

diff_nsfmn = abs(hilbert(diff_nsfm));     %hilbert变换,求绝对值得到瞬时幅度(包络检波)

zero=(max(diff_nsfmn)-min(diff_nsfmn))/2;

diff_nsfmn1=diff_nsfmn-zero;

%*****************************************

fprintf('按任意键播放解调后的声音文件');

pause

wavplay(diff_nsfmn1,fs);

上面的程序是对一个语音信号进行fm调制解调。解调出的噪声太大 如果我把要调制的信号换成一个确定的正弦波信号,就正常了,求大神们帮忙看下 为什么

你可能感兴趣的:(matlab,pm解调)