%(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调制解调。解调出的噪声太大 如果我把要调制的信号换成一个确定的正弦波信号,就正常了,求大神们帮忙看下 为什么