MATLAB 信号数据转换

数据转换是指改变音频格式中的采样频率或量化位数 

转换原理:

先用矩阵插值或抽取技术实现变量变换

如果是抽取数据还需在变换前作滤波处理使之满足采样定理

变量变换完成后再用

audioread函数重新定义量化位数和采样频率即可实现数据转换

数据转换过程中,要注意采样频率与原始采样频率及插值或抽取系数的关系 

MATLAB 实现插值或抽取的函数有 decimate ,interp 和 resample

这里以 倍抽取为例 将012617137-scuba-diver-3Filter.WAV 文件进行数据转换处理 具体程序如下

clear; 
close all; 
clc;
[x,FS]=audioread('012617137-scuba-diver-3Filter.WAV'); % 将 WAV 文件转换成变量
N=length(x); % 计算数据点数
% 不是偶数点化成偶数点
if mod(N,2)==0; N=N; else x(N)=[]; N=N-1; end;
% 原信号波形频谱分析
tx=(0:N-1)/FS; % 计算原信号数据点时刻
subplot(3,2,1);plot(tx,x); % 绘制原信号波形
title(' 原信号波形图 '); % 加标题
xf=fft(x); % 求原信号频谱
fx=(0:N/2)*FS/N; % 确定频谱图频率刻度
subplot(3,2,2);plot(fx,abs(xf(1:N/2+1))); % 绘制原信号频谱
title(' 原信号频谱图 '); % 加标题
% 实现数据抽取
k=[1:N/2]; % 确定抽取位置
y=x(2*k); % 实现抽取后的数据
M=length(y); % 计算抽取后数据点数
% 抽取数据在原采样频率 FS 下的波形频谱分析
ty=(0:M-1)/FS; % 计算数据点时刻
subplot(3,2,3);plot(ty,y); % 绘制信号波形图
title(' 原采样率下新波形图 '); % 加标题
yf=fft(y); % 求频谱
fy=(0:M/2)*FS/M; % 确定频谱图频率刻度
subplot(3,2,4);plot(fy,abs(yf(1:M/2+1))); % 绘制频谱图
title(' 原采样率下新频谱图 '); % 加标题
% 抽取数据在 FS/2 采样频率下的波形频谱分析
tz=(0:M-1)/(FS/2); % 计算数据点时刻
subplot(3,2,5);plot(tz,y); % 绘制信号波形图
title(' 新采样率下新波形图 '); % 加标题
fz=(0:M/2)*(FS/2)/M; % 确定频谱图频率刻度
subplot(3,2,6);plot(fz,abs(yf(1:M/2+1))); % 绘制频谱图
title(' 新采样率下新频谱图 '); % 加标题
% 实现数据转换
audiowrite ('XPquit16B.WAV',y,FS/2); % 音频格式 PCM


运行程序 在得到的图形窗口中 执行 Edit/Axes Properties命令 再把各分图下 标签中的 Limits 设为 0,0.01 和 0, 1000 得到 0--0.01 秒的波形和 0 --1000Hz 的频谱如图所示 

由图可知在满足采样定律条件下,实现数据抽取 

在原采样率下波形变密频谱变宽且幅度减半 

但在新采样率下波形和频谱都很好 

通过试听输出文件还可感受处理效果


  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值