matlab保存、读取文件等常规代码

保存为.wav文件

if(0)    %当需要生成wav信号时,将0改为1
Tlfm=0.1;%lfm持续时间
tlfm=0:Ts:Tlfm;
lfm=chirp(tlfm,8e3,Tlfm,12e3);
nlfm=length(lfm);

ft1=[lfm,zeros(1,0.2*fs),ft,zeros(1,0.2*fs),lfm,zeros(1,0.3*fs)];
figure;plot(ft1);title('带通信号时域波形');
axis tight;

filename = 'E:\毕业设计\通信\通信实验\2021-05-10 水池移动实验\发射信号\lfm_8-12k_0.1s_zeros_0.2s_30bit_dpowerAdvanced_zeros_0.2s_lfm_zeros_0.3s.wav';
audiowrite(filename,ft1,fs,'BitsPerSample',16);
end

或者

audiowrite('MW02.wav',signal_FC_move,fs);

1)保存为.wav文件,信号幅度整体乘0.7
2)善用cooledit看一下,发射信号的频率与换能器频带是否匹配

保存为.mat文件

%save('pqfile.mat','p','q') 将特定变量保存在mat中
save ('powerAdvanced_ft1.mat','ft1')%将变量ft1保存在名为powerAdvanced_ft1的.mat文件里
ft1=[lfm,zeros(1,0.2*fs),ft,zeros(1,0.2*fs),lfm,zeros(1,0.3*fs)];
save ft1;
%其实是保存了整个工作区的变量到ft1.mat里,此ft1非彼ft1

实验原始数据的提取注意事项

1)重采样:需要注意实验的采样率与处理采样率是否相同,首先看原始数据的时间长度能否跟发射的对得上。笔者就是因为没注意采样率的问题,导致后续处理结果都奇奇怪怪,最后发现还是最基础的错误。

2)注意提取数据的维度。n1与1n的,信号处理程序习惯用哪个,提取数据就要做相应的调整。

clc;clear all;close all;
load CCY
Fs=256e3;
fs_target=96e3;%重采样目标采样率
ch1= resample(ch,fs_target,Fs);
ch1=ch1’;
figure;plot(ch1);

%提取数据
if(1)

sig1=ch1(23160:845700);
figure;plot((0:length(sig1)-1)/fs_target,sig1);
sig2=ch1(845700:1671000);
figure;plot((0:length(sig2)-1)/fs_target,sig2);
sig3=ch1(1671000:2496000);
figure;plot((0:length(sig3)-1)/fs_target,sig3);

if(0)
save ('sig1.mat','sig1'); 
save ('sig2.mat','sig2'); 
save ('sig3.mat','sig3'); 
end
end

清除除了某变量之外的所有变量

load ('parameters.mat')
clearvars -except signal_sequence;

重采样

clc;clear all;close all;

% (1)upsample函数

factor = 5;
x = [1:4];
x_upsample1 = upsample(x,5);
figure;subplot(4,1,1);stem(1:length(x),x);title('原信号x');
subplot(4,1,2);stem(1:length(x_upsample1),x_upsample1);title('upsample(x,5)');


% (2)resample函数

x_resample1 = upsample(x,factor*length(x),length(x));
subplot(4,1,3);stem(1:length(x_resample1),x_resample1); title('resample(x,20,4)');

x_resample2 = upsample(x,factor,1);
subplot(4,1,4);stem(1:length(x_resample2),x_resample2); title('resample(x,5,1)');


% 总结
% (1)upsample函数:x_upsample1 = upsample(x,N)
%      信号长度变为原来的N倍,每N个点为一组,补N-1个0
% (2)resample函数:upsample(x,p,q)
%      信号长度由原来的q点/采样率,变成p点/采样率
%      且不化成最简比,还有不同(这个不知道为啥,没研究)
% (3)得出结论:这个上采样,目前看来都是按冲激补零的形式弄的。
% (4)重采样,不论是上采样还是下采样,信号的点数会变化,但是时间维度是不变的。

在这里插入图片描述

resample函数与upsample函数在上采样的区别

% 基带信道
N_base = 2; % 信道阶数/滤波器长度
H_base = zeros(N_base,1);
H_base(1) = 1; H_base(2) = 0.5;
figure;stem(H_base);

% 通带信道
H_pass_re = resample(H_base,N_pn,1);
H_pass_up = upsample(H_base,N_pn);
hold on; stem(H_pass_re);
hold on; stem(H_pass_up);

% 总结
% (1)resample函数可能会拟合和猜想函数的形状,而upsample是纯粹的插零
% (2)对多径信道进行上采样时,选择upsample更好

在这里插入图片描述

读取多个sheet表的excel表格

close all;clear all;clc;

% 读取一个Excel表格中多个Sheet中的数据

num=12; % 读取的sheet的序号
A = cell(num,1); 
for i=1:num
    Temp=xlsread('\S1_train_data',i); % 读取每个Sheet中的数据
    % 按个人需求划分数据为两组,如果只提取数据,不分组,写成: A{i}=Temp;
    A{i}=Temp;
end

% x = A{3,1}
% 取第三个sheet表的矩阵

% 总结
% (1)为了读取xlsx电子表中的多个sheet表,也就是同时读取多个矩阵,可以用元胞去存。
% (2)Temp=xlsread('\S1_train_data',i);第i个,是sheet表的索引,可以不用写sheet表的名称。
x=xlsread('S1_train_data', 'char01(B)','A1:T3125');% 读取一个sheet里特定区域
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值