Matlab實(shí)現(xiàn)讀寫txt文件數(shù)據(jù)與進(jìn)制轉(zhuǎn)換
前言
本文中讀與寫的txt數(shù)據(jù)格式適用于一行一個(gè)數(shù)據(jù)的情況,其他情況請(qǐng)自行結(jié)合修改。如下圖所示:

讀txt文件
讀txt中的十進(jìn)制數(shù)據(jù)到MATLAB
%% 此代碼用于讀取TXT文件的十進(jìn)制數(shù)據(jù)到MATLAB
% 指定txt文件路徑
file_path = 'F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_decimal.txt';%單引號(hào)中放文件地址
% 讀取txt文件
data = load(file_path)';%根據(jù)需要加單引號(hào)轉(zhuǎn)置
disp('讀取數(shù)據(jù)完成');
讀txt數(shù)據(jù)的其他進(jìn)制數(shù)據(jù)轉(zhuǎn)為十進(jìn)制到MATLAB
修改txt的讀取地址,修改txt中的數(shù)據(jù)進(jìn)制txt_radix,修改txt中數(shù)據(jù)對(duì)應(yīng)的二進(jìn)制位數(shù)bits
默認(rèn)是有符號(hào)數(shù)轉(zhuǎn)換,無(wú)符號(hào)時(shí)注釋掉標(biāo)注部分。
%% 讀txt數(shù)據(jù)的其他進(jìn)制數(shù)據(jù)轉(zhuǎn)為十進(jìn)制到MATLAB
%讀取地址與參數(shù)設(shè)置
txtdatacell = textscan(fopen( 'F:\Add Window_and_FFT Module Design\Vivado_project\rtl\bin_Signal.txt'),'%s');
txt_radix = 2 ; %讀取的txt數(shù)據(jù)的進(jìn)制
bits = 16; % 信號(hào)對(duì)應(yīng)的二進(jìn)制位數(shù),讀取補(bǔ)碼數(shù)據(jù)時(shí)使用
%用于存儲(chǔ)數(shù)據(jù)的變量聲明
txtdata = txtdatacell{1};
length_txtdata = length(txtdata);% txt中的數(shù)據(jù)個(gè)數(shù)
decdata = zeros(length_txtdata,1);
%讀取主體部分
for i=1:length_txtdata
decdata(i) = base2dec( txtdata{i},txt_radix ); %將所有進(jìn)制數(shù)轉(zhuǎn)換為無(wú)符號(hào)十進(jìn)制數(shù)
%begin:無(wú)符號(hào)時(shí)注釋此部分
if(decdata(i)>= 2^(bits-1)) % 如果補(bǔ)碼對(duì)應(yīng)的十進(jìn)制結(jié)果大于等于一半
decdata(i)=base2dec(txtdata{i},txt_radix )-2^bits;% 轉(zhuǎn)換為負(fù)數(shù)
end
%end:無(wú)符號(hào)時(shí)注釋此部分
end
disp('讀取轉(zhuǎn)換完成');
讀txt內(nèi)容到MATLAB
txtdatacell = textscan(fopen( 'F:\Add Window_and_FFT Module Design\Vivado_project\rtl\bin_Signal.txt'),'%s');
txtdata = txtdatacell{1};
disp('讀取完成');
寫txt文件
總:將MATLAB生成的10進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制和radix進(jìn)制寫入txt
此代碼包含了生成信號(hào)數(shù)據(jù),輸出十進(jìn)制txt,輸出其他進(jìn)制txt。后兩小節(jié)的"分"為該總部分的一小部分。
%本代碼用于將MATLAB生成的十進(jìn)制數(shù)據(jù)轉(zhuǎn)為radix進(jìn)制生成txt文件,radix可設(shè)為2的次方,如:2 4 8 16...
%根據(jù)需要設(shè)置生成信號(hào)和參數(shù)設(shè)置部分,修改寫txt主體部分文件輸出地址
%參數(shù)設(shè)置中radix表示將Signal轉(zhuǎn)換成該進(jìn)制數(shù)據(jù),默認(rèn)生成10進(jìn)制和radix進(jìn)制的兩個(gè)txt數(shù)據(jù)
%工作區(qū)中Signal是txt中對(duì)應(yīng)的十進(jìn)制數(shù)據(jù);radix_data_cell是txt中對(duì)應(yīng)的其他進(jìn)制數(shù)據(jù)
clear all;close all;clc; %清理工作區(qū),關(guān)閉所有窗口,清空文本
%% 信號(hào)生成與參數(shù)設(shè)置
%生成信號(hào)
fs = 128; %采樣率
f_Signal = 5; %信號(hào)頻率
Signal_N = 128; %信號(hào)點(diǎn)數(shù)
t = 0:1/fs:(Signal_N-1)/fs; %取Signal_N點(diǎn)信號(hào)觀察
scale = 2^15; %擴(kuò)大倍數(shù)
Signal1 = cos(2*pi*f_Signal*t)*scale;
Signal = round(Signal1)';%取整
%參數(shù)設(shè)置
bits = 16; %信號(hào)被量化后的二進(jìn)制位數(shù)
radix = 2; %轉(zhuǎn)換成'2的次方進(jìn)制可選'的數(shù)據(jù)輸出,如:2 4 8 16...
radix_bitnum = log2(radix);%進(jìn)制對(duì)應(yīng)的二進(jìn)制位數(shù),例16進(jìn)制對(duì)應(yīng)4位二進(jìn)制
Converte_bits = ceil(bits/radix_bitnum);%信號(hào)轉(zhuǎn)換成radix進(jìn)制的位數(shù),如14bits二進(jìn)制可轉(zhuǎn)為4位十六進(jìn)制數(shù)
%% 寫txt主體部分
%將生成的十進(jìn)制數(shù)據(jù)寫入txt文件中
fid=fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_decimal.txt','w');
for i = 1:numel(Signal)-1
fprintf(fid, '%8d\r\n', Signal(i));
end
fprintf(fid, '%8d', Signal(end));
fclose(fid);
disp('十進(jìn)制數(shù)據(jù)已寫入到txt文件。');
%將生成的進(jìn)制數(shù)據(jù)寫入txt文件中
% 初始化一個(gè) cell 數(shù)組用于存儲(chǔ)轉(zhuǎn)換后的進(jìn)制字符串
radix_data_cell = cell(length(Signal), 1);
% 循環(huán)處理每個(gè)元素
for i=1:length(Signal)
if (Signal(i) == 2^(bits-1))
radix_data_cell{i}= dec2base((Signal(i)-1),radix,Converte_bits);%補(bǔ)碼范圍不包括+2^(bits-1)
else
radix_data_cell{i}= dec2base(Signal(i)+(Signal(i)<0)*2^bits,radix,Converte_bits);%(Signal(i)<0用于量化為負(fù)數(shù)補(bǔ)碼的情況
end
end
% 打開(kāi)一個(gè)文本文件以寫入模式
fid = fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_radix.txt', 'w');
% 循環(huán)遍歷 cell 數(shù)組并將每個(gè)元素寫入文件
for i = 1:numel(radix_data_cell)-1
fprintf(fid, '%s\n', radix_data_cell{i});
end
fprintf(fid, '%s', radix_data_cell{end});
%fprintf(fid,';'); %最后一行分號(hào)結(jié)尾
% 關(guān)閉文件
fclose(fid);
disp('其他進(jìn)制數(shù)據(jù)已寫入到txt文件。');
分:將MATLAB中十進(jìn)制數(shù)據(jù)以’radix進(jìn)制’數(shù)據(jù)格式寫入txt文件
%% 將MATLAB中十進(jìn)制數(shù)據(jù)以'radix進(jìn)制'數(shù)據(jù)格式寫入txt文件
Signal = decdata;%修改decdata為需要轉(zhuǎn)換的數(shù)據(jù),需要為整數(shù),用round等取整
bits = 16; %信號(hào)對(duì)應(yīng)的二進(jìn)制位數(shù)
radix = 16; %轉(zhuǎn)換成'2的次方進(jìn)制可選'的數(shù)據(jù)輸出,如:2 4 8 16...
radix_bitnum = log2(radix);%進(jìn)制對(duì)應(yīng)的二進(jìn)制位數(shù),例16進(jìn)制對(duì)應(yīng)4位二進(jìn)制
Converte_bits = ceil(bits/radix_bitnum);%信號(hào)轉(zhuǎn)換成radix進(jìn)制的位數(shù),如14bits二進(jìn)制可轉(zhuǎn)為4位十六進(jìn)制數(shù)
% 初始化一個(gè) cell 數(shù)組用于存儲(chǔ)轉(zhuǎn)換后的進(jìn)制字符串
radix_data_cell = cell(length(Signal), 1);
% 循環(huán)處理每個(gè)元素
for i=1:length(Signal)
if (Signal(i) == 2^(bits-1))
radix_data_cell{i}= dec2base((Signal(i)-1),radix,Converte_bits);%補(bǔ)碼范圍不包括+2^(bits-1)
else
radix_data_cell{i}= dec2base(Signal(i)+(Signal(i)<0)*2^bits,radix,Converte_bits);%(Signal(i)<0用于量化為負(fù)數(shù)補(bǔ)碼的情況
end
end
% 打開(kāi)一個(gè)文本文件以寫入模式
fid = fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_radix.txt', 'w');
% 循環(huán)遍歷 cell 數(shù)組并將每個(gè)元素寫入文件
for i = 1:numel(radix_data_cell)-1
fprintf(fid, '%s\n', radix_data_cell{i});
end
fprintf(fid, '%s', radix_data_cell{end});
%fprintf(fid,';'); %最后一行分號(hào)結(jié)尾
% 關(guān)閉文件
fclose(fid);
disp('其他進(jìn)制數(shù)據(jù)已寫入到txt文件。');
分:將MATLAB中十進(jìn)制數(shù)據(jù)寫入txt文件
%% 將生成的十進(jìn)制數(shù)據(jù)寫入txt文件中
Signal = decdata;%修改decdata為需要寫入txt的數(shù)據(jù)
fid=fopen('F:\Add Window_and_FFT Module Design\Vivado_project\rtl\data_decimal.txt','w');
for i = 1:numel(Signal)-1
fprintf(fid, '%8d\r\n', Signal(i));
end
fprintf(fid, '%8d', Signal(end));
fclose(fid);
disp('十進(jìn)制數(shù)據(jù)已寫入到txt文件。');
讀txt數(shù)據(jù)進(jìn)制轉(zhuǎn)換后寫入新的txt
將上面小節(jié)的讀txt數(shù)據(jù)的其他進(jìn)制數(shù)據(jù)轉(zhuǎn)為十進(jìn)制到MATLAB和分:將MATLAB中十進(jìn)制數(shù)據(jù)以'radix進(jìn)制'數(shù)據(jù)格式寫入txt文件組合即可實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換。修改對(duì)應(yīng)參數(shù)設(shè)置與地址。
到此這篇關(guān)于Matlab實(shí)現(xiàn)讀寫txt文件數(shù)據(jù)與進(jìn)制轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Matlab讀寫txt與進(jìn)制轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ros項(xiàng)目調(diào)試:vscode下配置開(kāi)發(fā)ROS項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了ros項(xiàng)目調(diào)試:vscode下配置開(kāi)發(fā)ROS項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
C++有符號(hào)和無(wú)符號(hào)之間的轉(zhuǎn)換問(wèn)題
在開(kāi)發(fā)中經(jīng)常會(huì)遇到有符號(hào)和無(wú)符號(hào)之間的轉(zhuǎn)換問(wèn)題,如果不清楚問(wèn)題根源,很難解決bug,今天小編通過(guò)本文給大家分享c++有符號(hào)無(wú)符號(hào)轉(zhuǎn)換問(wèn)題,需要的朋友參考下2021-07-07
如何將編譯過(guò)的C++庫(kù)迅速部署在Visual?Studio新項(xiàng)目中
本文介紹在Visual?Studio中,通過(guò)屬性表,使得一個(gè)新建解決方案中的項(xiàng)目可以快速配置已有解決方案的項(xiàng)目中各類已編譯好的C++第三方庫(kù)的方法,感興趣的朋友跟隨小編一起看看吧2024-05-05
C語(yǔ)言數(shù)組與地址、數(shù)組名到底是什么詳解
在寫代碼的時(shí)候,我們經(jīng)常用到數(shù)組,那么有沒(méi)有想過(guò)數(shù)組名是什么呢?這篇文章主要給大家介紹了關(guān)于C語(yǔ)言數(shù)組與地址、數(shù)組名到底是什么的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
C語(yǔ)言實(shí)現(xiàn)掃雷游戲詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷游戲的具體步驟和詳細(xì)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

