华南理工大学电信信号与系统实验5——语音信号的分析与处理

(1)通过对实际采集的语音信号进行分析和处理,获得数字信号处理实际应用的认识。

(2)熟悉信号的运算,包括平移与反转、相加、相乘等,掌握在MATLAB中进行信号频谱分析的基本方法;

(3)理解信号抽样的概念和抽样定理,掌握在MATLAB中处理语音信号的方法。

(4)掌握数字滤波器设计的知识,并通过对语音信号的去噪处理获得数字滤波器实际应用的知识。

(1)语音信号的获取;用麦克风自行采集两段语音信号高频噪声人声+高频噪声(wav格式)0

(2)通过Matlab读入采集信号,观察其采样频率,并绘图采样信号语音信号的运算,包括平移和反褶、相加、相乘;3)周期信号的有限项傅里叶级数合成; (可用作仿真高频噪声

源)

(4)通过Matlab对语音信号进行谱分析,分析出噪声的频带

(5)连续时间信号的抽样;语音信号的抽样

(6)设计两种滤波器(频域、时域),对叠加入噪声的语音信号进行去噪处理。绘图并发声去噪后的信号。

下面是复制到word的代码,代码源码链接如下:

链接:https://pan.baidu.com/s/14jfXJ9Py9Ko8TQqu1ocmFQ?pwd=5y2v

提取码:5y2v

--来自百度网盘超级会员V4的分享

2、导入信号并画出原信号频谱图

% 导入语音文件

voice, Fs = audioread('myspeech.wav');

% 对语音信号进行谱分析

N = length(voice);

f = (0:N-1)*Fs/N;

Y = abs(fft(voice)/N).^2;

% 绘制原信号频谱图

figure(1)

plot(f, Y);

xlim(0, Fs/2);

xlabel('Frequency (Hz)');

ylabel('Power Spectral Density');

title('Spectrum of Voice Signal');

% 观察采样频率

Fs

% 绘制采样信号的图形

t = (0:length(voice_noise)-1)/Fs;

figure(2)

plot(t, voice_noise);

xlabel('Time (s)');

ylabel('Amplitude');

figure(3)

title('Sampled Signal with Noise_add');%绘制带加性噪声的信号

plot(t, voice);

xlabel('Time (s)');

ylabel('Amplitude');

title('Sampled Signal');%绘制原信号

平移

%信号平移

% 将语音信号向右平移 5s

shift = 5*Fs; % 平移 5s,单位为采样点

voice_shifted = zeros(shift,1); voice(1:end);

% 播放平移后的语音信号

sound(voice_shifted, Fs);

% 绘制采样信号的图形

t = (0:length(voice_shifted)-1)/Fs;

figure(5)

plot(t, voice_shifted);

xlabel('Time (s)');

ylabel('Amplitude');

title('Shifted Signal');

反褶

%信号反褶

% 对语音信号进行反褶

voice_flipped = flip(voice);

% 播放反褶后的语音信号

sound(voice_flipped, Fs);

% 绘制采样信号的图形

t = (0:length(voice_flipped)-1)/Fs;

figure(6)

plot(t, voice_flipped);

xlabel('Time (s)');

ylabel('Amplitude');

title('Flipped Signal');

sound(voice_flipped, Fs);

相加

% 生成高频噪声

noise = 0.03*randn(length(voice),1);

% 叠加噪声到语音信号上

%信号运算------相加

voice_noise = voice + noise;

% 播放带加性噪声的语音信号

sound(voice_noise, Fs);

相乘

% 生成 5s 的乘性噪声

t = 0:1/Fs:5-1/Fs;

f1 = 1000; % 第一个正弦波的频率

f2 = 3000; % 第二个正弦波的频率

noise_mul = sin(2*pi*f1*t).*sin(2*pi*f2*t);

% 将乘性噪声与语音信号相乘

voice_noise_mul = voice .* noise_mul';

% 播放乘性噪声信号

sound(voice_noise_mul, Fs);

% 绘制采样信号的图形

t = (0:length(voice)-1)/Fs;

figure(4)

plot(t, voice_noise_mul);

xlabel('Time (s)');

ylabel('Amplitude');

title('Multiplicative Noise Signal');

sound(voice_noise_mul, Fs);%绘制带乘性噪声的信号,信号运算------相乘

3、周期信号的有限项傅里叶级数合成

% 信号参数

f = 5000; % 基频

fs = 100000; % 采样频率

T = 1/f; % 周期

N = 50; % 傅里叶级数项数

% 生成信号

t = 0:1/fs:T-1/fs; % 时间向量

x = sawtooth(2*pi*f*t); % 锯齿波信号

% 计算傅里叶系数

a0 = mean(x);

an = zeros(1,N);

bn = zeros(1,N);

for n = 1:N

an(n) = 2/T * trapz(t, x .* cos(2*pi*n*f*t));

bn(n) = 2/T * trapz(t, x .* sin(2*pi*n*f*t));

end

% 合成信号

x_hat = a0/2;

for n = 1:N

x_hat = x_hat + an(n)*cos(2*pi*n*f*t) + bn(n)*sin(2*pi*n*f*t);

end

% 绘制原始信号和合成信号

figure(1);

plot(t, x, 'r', t, x_hat, 'b');

xlabel('时间 (s)');

ylabel('幅值');

legend('原始信号', '合成信号');

这里我们生成了一个 5000 Hz 的锯齿波信号,并用有限项傅里叶级数合成生成了一个类似于高频噪声的信号。

4、对语音信号谱分析

% 对语音信号乘法噪声后的信号进行谱分析

N = length(voice_noise_mul);

f = (0:N-1)*Fs/N;

Y = abs(fft(voice_noise_mul)/N).^2;

% 绘制谱图

figure(7)

plot(f, Y);

xlim(0, Fs/2);

xlabel('Frequency (Hz)');

ylabel('Power Spectral Density');

title('Spectrum of Voice Signal with Noise');

对比原信号频谱图和有噪声的频谱图,可看出噪声的频率区间。

5、探究不同抽样频率对采样信号的影响

% 读取语音信号

filename = 'myspeech.wav';

x, fs = audioread(filename);

x = x(:, 1); % 取左声道

% 抽样频率

fs1 = 1000;

fs2 = 2000;

fs3 = 4000;

fs4 = 8000;

% 抽样

y1 = resample(x, fs1, fs);

y2 = resample(x, fs2, fs);

y3 = resample(x, fs3, fs);

y4 = resample(x, fs4, fs);

% 绘制信号

t1 = (0:length(y1)-1)/fs1;

t2 = (0:length(y2)-1)/fs2;

t3 = (0:length(y3)-1)/fs3;

t4 = (0:length(y4)-1)/fs4;

figure(1);

subplot(5,1,1);

plot(t1, y1);

title(sprintf('抽样频率 %d Hz', fs1));

ylabel('幅值');

subplot(5,1,2);

plot(t2, y2);

title(sprintf('抽样频率 %d Hz', fs2));

ylabel('幅值');

subplot(5,1,3);

plot(t3, y3);

title(sprintf('抽样频率 %d Hz', fs3));

ylabel('幅值');

subplot(5,1,4);

plot(t4, y4);

title(sprintf('抽样频率 %d Hz', fs4));

ylabel('幅值');

subplot(5,1,5);

plot((0:length(x)-1)/fs, x);

title('原始信号');

xlabel('时间 (s)');

ylabel('幅值');

% 绘制频谱图

figure(2);

subplot(5,1,1);

spectrogram(y1, \[\], \[\], \[\], fs1, 'yaxis');

title(sprintf('抽样频率 %d Hz', fs1));

subplot(5,1,2);

spectrogram(y2, \[\], \[\], \[\], fs2, 'yaxis');

title(sprintf('抽样频率 %d Hz', fs2));

subplot(5,1,3);

spectrogram(y3, \[\], \[\], \[\], fs3, 'yaxis');

title(sprintf('抽样频率 %d Hz', fs3));

subplot(5,1,4);

spectrogram(y4, \[\], \[\], \[\], fs4, 'yaxis');

title(sprintf('抽样频率 %d Hz', fs4));

subplot(5,1,5);

spectrogram(x, \[\], \[\], \[\], fs, 'yaxis');

title('原始信号');

% 播放声音

sound(x, fs);

pause(length(x)/fs);

sound(y1, fs1);

pause(length(y1)/fs1);

sound(y2, fs2);

pause(length(y2)/fs2);

sound(y3, fs3);

pause(length(y3)/fs3);

sound(y4, fs4);

6、时域和频域滤波器滤去噪声

% 设计时域滤波器

b, a = butter(6, 0.2, 0.4, 'bandpass'); % 滤波器阶数为6,截止频率范围为0.2~0.4

voice_noise_mul_filtered_1 = filter(b, a, voice_noise_mul); % 对混叠信号进行滤波

% 绘制时域图

t = (0:length(voice_noise_mul_filtered_1)-1)/Fs;

figure(8);

subplot(2,1,1);

plot(t, voice_noise_mul_filtered_1);

title('去除乘性噪声后的信号(时域)');

xlabel('时间 (s)');

ylabel('幅值');

% 绘制频谱图

N = length(voice_noise_mul_filtered_1); % 信号长度

f = linspace(0, Fs/2, N/2+1); % 构造频域坐标轴

Y = fft(voice_noise_mul_filtered_1); % 进行傅里叶变换

P = abs(Y(1:N/2+1)).^2/N; % 计算功率谱密度

subplot(2,1,2);

plot(f, P);

title('频谱图');

xlabel('频率 (Hz)');

ylabel('功率谱密度');

% 播放处理后的信号

soundsc(voice_noise_mul_filtered_1, Fs);

Fs = 8000; % 采样率为8kHz

f = linspace(0, Fs, length(voice_noise_mul)); % 构造频域坐标轴

Hd = design(fdesign.lowpass('N,Fc', 6, 3000, Fs)); % 设计低通滤波器,截止频率为3000Hz

voice_noise_mul_filtered_2 = filter(Hd, voice_noise_mul); % 对混叠信号进行滤波

% 绘制时域图

t = (0:length(voice_noise_mul_filtered_2)-1)/Fs;

figure(9);

subplot(2,1,1);

plot(t, voice_noise_mul_filtered_2);

title('去除乘性噪声后的信号(频域)');

xlabel('时间 (s)');

ylabel('幅值');

% 绘制频谱图

N = length(voice_noise_mul_filtered_2); % 信号长度

f = linspace(0, Fs/2, N/2+1); % 构造频域坐标轴

Y = fft(voice_noise_mul_filtered_2); % 进行傅里叶变换

P = abs(Y(1:N/2+1)).^2/N; % 计算功率谱密度

subplot(2,1,2);

plot(f, P);

title('频谱图');

xlabel('频率 (Hz)');

ylabel('功率谱密度');

% 播放处理后的信号

soundsc(voice_noise_mul_filtered_2, Fs);

相关推荐
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
Seoyoneh2 天前
呼叫中心系统上云还是本地部署?架构、成本与运维全维度技术对比
人工智能·信息与通信·通信
agicall.com2 天前
SIP协议IP话机的通话抓包录音实现
语音识别·信创电话助手·ip话机
2601_955662462 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
CoderYanger2 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
企业通信技术笔记2 天前
私有化即时通讯软件有哪些?商用IM、开源IM与安全通信方案对比
信息与通信·即时通讯·企业im·企业即时通信·通讯软件
Julien20042 天前
Docker 容器存储原理(一)
linux·运维·服务器·ssh·学习方法
江屿风2 天前
【认识深度学习】【深度学习分类与计算机视觉任务要点解析】流食般投喂
大数据·人工智能·深度学习·计算机视觉·目标跟踪·自然语言处理·语音识别
daxiongbaodian242 天前
会议纪要工具怎么选?微信小程序加持的智能记录方案实测
语音识别
童园管理札记2 天前
从政策驱动到课堂落地:2026年“人工智能+教育”全景解读与技术实践指南
人工智能·python·深度学习·职场和发展·学习方法