How can convert .wav file to .mat file ?
1 次查看(过去 30 天)
显示 更早的评论
Hello, I am trying to covert .w to .mat file and I should to using it in my program Help me plezzzzzzz :(
1 个评论
sanjana
2025-1-9
% Load the audio file
[input_audio_file, input_audio_path] = uigetfile({'*.wav', 'Audio Files (*.wav)'}, 'Select an Audio File');
if isequal(input_audio_file, 0)
disp('User canceled the file selection.');
return; % Exit if no file is selected
else
% Construct the full file path
full_audio_path = fullfile(input_audio_path, input_audio_file);
[primary, fs] = audioread(full_audio_path); % Read the audio file
disp(['Audio file ', input_audio_file, ' successfully loaded.']);
end
% Assuming 'reference' is another signal you have (you need to define it)
% For demonstration, let's create a dummy reference signal
reference = rand(size(primary)); % Replace this with your actual reference signal
% Parameters
primary_size = size(primary, 1); % Number of samples in primary signal
Epsilon = 0.0001;
AllData = zeros(1, 3);
order = 30; % Filter order
W_1 = zeros(order, 1);
W_2 = zeros(order, 1);
performance_curve1 = zeros(primary_size, 1);
performance_curve2 = zeros(primary_size, 1);
primary_wrt_filter = primary(order + 1:end); % Truncate primary
reference_wrt_filter = zeros((primary_size - order), order);
% Create reference_wrt_filter according to filter
for update = order:primary_size
reference_wrt_filter((update - order + 1), :) = reference(update - (1:order));
end
disp(size(reference_wrt_filter, 1));
% Learning rate
Nu = 0.05;
for iterateReference = 1:size(reference_wrt_filter, 1)
MSE = 0;
X = reference_wrt_filter(iterateReference, :);
% Calculate error for W_1
Error = primary_wrt_filter(iterateReference) - (reference_wrt_filter(iterateReference, :) * W_1);
Nu_by_Epsilon = Nu / (Epsilon + (X * X'));
W_1 = W_1 + (Nu_by_Epsilon * (Error * X)');
errorSquare = (primary_wrt_filter(1:iterateReference) - (reference_wrt_filter(1:iterateReference, :) * W_1)).^2;
MSE = sum(errorSquare) / iterateReference;
performance_curve1(iterateReference) = MSE;
% Calculate error for W_2
if iterateReference >= 46501
Error = primary_wrt_filter(iterateReference) - (reference_wrt_filter(iterateReference, :) * W_2);
W_2 = W_2 + (Nu_by_Epsilon * (Error * X)');
errorSquare1 = (primary_wrt_filter(46501:iterateReference) - (reference_wrt_filter(46501:iterateReference, :) * W_2)).^2;
MSE = sum(errorSquare1) / (iterateReference - 46500);
performance_curve2(iterateReference - 46500) = MSE;
end
end
% Output signals
Out = (primary_wrt_filter(1:46500) - (reference_wrt_filter(1:46500, :) * W_1));
Out1 = (primary_wrt_filter(46501:end) - (reference_wrt_filter(46501:end, :) * W_2));
Out3 = vertcat(Out, Out1);
% Calculate SNR
SNR_parameter = mean(primary_wrt_filter.^2) / mean(Out3.^2);
SNR_After = 10 * log10(SNR_parameter);
% Plotting results
figure;
plot(performance_curve1);
title('Learning Curve For Filter Order = 30 and Iteration < 46.5K');
xlabel('Iteration -->');
ylabel('MSE -->');
legend('Nu = 0.05');
figure;
plot(performance_curve2);
title('Learning Curve For Filter Order = 30 and Iteration > 46.5K');
xlabel('Iteration -->');
ylabel('MSE -->');
legend('Nu = 0.05 ');
figure;
plot(Out3);
title('Error Signal After Applying NLMS For Filter Order = 30');
xlabel('Iteration -->');
ylabel('Error (Desired Output Signal) -->');
legend('Nu = 0.05');
% Optionally play the output sound
soundsc(Out3, fs);
采纳的回答
Wayne King
2011-11-25
Use wavread to read the file into MATLAB. Then, use save to save the file as a .mat file.
See the help for wavread and save
6 个评论
Wayne King
2011-11-25
So it's just a Nx1 vector. Then just use wavelet 1-D. All noisy signals are "content-mixed signals". By the way, on any wavemenu subitem, you can always use Import from Workspace, you don't have to save the data as a .mat file.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Audio I/O and Waveform Generation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!