Electronic tongue-based rum pot type distillation wine cutting decision-making method and equipment
By measuring the bitterness and richness of rum distillate using an electronic tongue, a decision-making model was constructed, which solved the problem of rum cutting relying on human experience, achieved the standardization of cutting and the uniqueness of base spirit flavor, and improved the blending and stability of rum.
Patent Information
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Filing Date
- 2025-12-29
- Publication Date
- 2026-03-31
AI Technical Summary
The current method of cutting rum relies on the experience of the operators, resulting in inconsistent cutting standards, which affects the flavor of the base spirit and the stability of subsequent blending.
By employing an electronic tongue-based method, a decision model is constructed to determine the optimal cut range of the liquor by acquiring distillate samples, measuring bitterness and richness indicators, and then dividing the liquor into portions.
This eliminates the subjective influence of operators, ensures uniformity in rum cutting standards, guarantees the unique flavor of different segments of base spirit, and is beneficial to the blending and stability of rum.
Smart Images

Figure CN121768508A_ABST
Abstract
Description
Technical Field
[0001] This invention relates to the field of brewing, and specifically to a method and device for making rum pot distillation and cutting decisions based on an electronic tongue. Background Technology
[0002] Rum production requires distillation, with pot distillation being a common method. Pot distillation typically involves distilling fermented mash (single distillation) or the distillate obtained from fermented mash through continuous column distillation (double distillation). During pot distillation, the composition of the distillate changes continuously, leading to variations in flavor. Therefore, fractional distillation is usually performed to collect the distillate in segments, yielding base spirits with different flavor profiles.
[0003] The core of rum cutting lies in determining the number of segments and the timing of the start and end of each segment. Currently, there are generally three methods for cutting rum in the industry. The first is observing the foam, which involves judging the timing of cutting by observing the size, persistence, and shape of the foam (bubbles) that form in the rum. The second is smelling and tasting, which involves taking a small amount of rum and judging the timing of cutting by smelling and tasting it. The third is temperature monitoring, which involves judging the timing of cutting by monitoring the steam temperature.
[0004] Existing wine cutting methods all suffer from problems such as reliance on operator experience, significant subjective influence from operators, and the inability to establish unified standards, thus failing to guarantee the quality of wine cutting. Summary of the Invention
[0005] The purpose of this invention is to overcome the shortcomings of the prior art and provide a rum pot distillation cutting decision method and equipment based on an electronic tongue. This method avoids reliance on operator experience, ensures uniform cutting standards, and makes the base spirits of different segments have unique flavors, which is beneficial to the subsequent blending and stability of rum.
[0006] To achieve the above objectives, the technical solution of the present invention is as follows:
[0007] In a first aspect, the present invention provides a rum pot distillation method for decision-making based on an electronic tongue, comprising:
[0008] Obtain several distillate samples;
[0009] Each distillate sample was measured using an electronic tongue to obtain the raw data sequences of two taste indicators: bitterness and richness.
[0010] The original data sequence is processed to obtain processed data;
[0011] The feature points are identified from the processed data, including the lowest bitterness point, the highest richness point, the bitterness inflection point, and the richness inflection point.
[0012] A decision model is established based on the aforementioned feature points to determine the optimal wine cutting interval and achieve wine portion division.
[0013] Optionally, a decision model can be established based on the feature points to determine the optimal wine cutting range, including:
[0014] The feature points are incorporated into a candidate point set to construct a feature point pool;
[0015] Given the weights of each feature point, a sliding window is used to traverse the entire sequence with the sample number as the horizontal axis; within each window, the sum of the weights of all feature points falling into the window is calculated to obtain the decision score of the window.
[0016] The starting edge of the first peak region of the decision score sequence is determined as the starting point of the second alcoholic beverage; the ending edge of the last peak region of the decision score sequence is determined as the ending point of the second alcoholic beverage.
[0017] Optionally, the wine portioning can be achieved in the following way:
[0018] All samples from the beginning of the first portion to the end of the second portion are called the first portion; all samples between the beginning and end of the second portion are called the second portion; and all samples after the end of the second portion are called the third portion.
[0019] Optionally, the processing of the original data sequence includes smoothing filtering and first-order derivative calculation; the smoothing filtering uses a Savitzky-Golay filter, and the first-order derivative calculation calculates the first derivative of the smoothed sequence.
[0020] Optionally, the lowest bitterness point is the trough of the bitterness smooth sequence; the highest richness point is the peak of the richness smooth sequence; the bitterness inflection point is the maximum and minimum of the first-order differential sequence of bitterness; and the richness inflection point is the maximum and minimum of the first-order differential sequence of richness.
[0021] Optionally, several distillate samples can be obtained in the following manner:
[0022] First, determine the volume of the object to be distilled, then begin distillation. Start collecting samples as soon as distillate comes out, with each sample containing 0.2%-1.0% of the volume of the object to be distilled. Measure the alcohol content of the distillate sample at an opportune time (the alcohol content of the distillate will be very high at first, then gradually decrease). Stop collecting samples when the alcohol content is <20% vol. The number of samples collected should be ≥50.
[0023] Optionally, the weights of each given feature point include: the weight of the point with the highest richness is 0.4, the weight of the point with the lowest bitterness is 0.3, and the weights of the bitterness inflection point and the richness inflection point are both 0.15.
[0024] Optionally, the size of the sliding window is 5% of the total number of samples.
[0025] In a second aspect, the present invention provides an electronic device, including a processor, a communication interface, a memory, and a communication bus, wherein the processor, the communication interface, and the memory communicate with each other through the communication bus;
[0026] Memory, used to store computer programs;
[0027] A processor, when executing a program stored in memory, implements the steps of the method as described in any of the preceding items.
[0028] Thirdly, the present invention provides a computer-readable storage medium storing a computer program that, when executed by a processor, implements the steps of any of the methods described above.
[0029] Compared with the prior art, the advantages of this invention are as follows:
[0030] This invention uses an electronic tongue to measure the raw data sequence of two taste indicators, bitterness and richness, in each distillate sample. Then, a decision model is constructed to determine the optimal cutting range for the liquor, thereby eliminating the subjective influence of operators and ensuring uniformity in liquor cutting standards. Attached Figure Description
[0031] Figure 1 The main flowchart of the rum pot distillation cut decision method based on electronic tongue provided in the embodiments of this application;
[0032] Figure 2 This is a schematic diagram of the results of Example 1;
[0033] Figure 3 This is a schematic diagram of the results in Example 2;
[0034] Figure 4 This is a schematic diagram illustrating the composition of an electronic device provided in an embodiment of this application. Detailed Implementation
[0035] The technical solution of the present invention will be further described below with reference to the accompanying drawings and embodiments.
[0036] See Figure 1 As shown, the rum pot distillation cut decision method based on electronic tongue provided in this embodiment mainly includes the following steps:
[0037] 110. Obtain several distillate samples;
[0038] Specifically, in this step, first determine the volume of the object to be distilled, then begin distillation. Start collecting samples from the point where distillate begins to flow out, with each sample containing 0.2%-1.0% of the object's volume. Measure the alcohol content of the distillate sample at an opportune time (the alcohol content will initially be very high, then gradually decrease). Stop collecting samples when the alcohol content is <20% vol. A minimum of 50 samples should be collected.
[0039] 120. Each distillate sample was measured using an electronic tongue to obtain the raw data sequences of the two taste indicators: bitterness and richness.
[0040] 130. The original data sequence is processed to obtain the processed data;
[0041] Specifically, in this step, the original data sequences of the two flavor indicators are subjected to smoothing filtering and first-order differential calculation. The smoothing filtering uses a Savitzky-Golay filter, and the first-order differential calculation is to calculate the first derivative (difference) of the smoothed sequence.
[0042] 140. Identify and determine feature points from the processed data, including the lowest bitterness point, the highest richness point, the bitterness inflection point, and the richness inflection point.
[0043] Specifically, in this step, we find the trough (minimum) of the bitterness smoothing sequence, where the bitterness is lowest; and we find the peak (maximum) of the richness smoothing sequence, where the richness is highest. We then find the maxima and minima of the bitterness first-order differential sequence, as these inflection points mark the transition from rapid decline to slow decline / stable state, and from slow rise to rapid rise. Similarly, we find the maxima and minima of the richness first-order differential sequence, as these inflection points mark the transition from rapid rise to slow rise / stable state, and from slow decline to rapid decline.
[0044] 150. Based on the aforementioned feature points, a decision model is established to determine the optimal wine cutting interval and achieve wine portion division.
[0045] Therefore, this method uses an electronic tongue to measure the raw data sequence of two taste indicators, bitterness and richness, in each distillate sample. Then, a decision model is constructed to determine the optimal cutting range and achieve the division of alcohol, thereby eliminating the subjective influence of operators and ensuring the uniformity of the cutting standard.
[0046] In one specific embodiment, a decision model is established based on the feature points to determine the optimal wine cutting interval, including:
[0047] Feature points are incorporated into a candidate point set to construct a feature point pool;
[0048] Given the weights of each feature point, the point with the highest richness is 0.4, the point with the lowest bitterness is 0.3, and the remaining inflection points are 0.15.
[0049] Using the sample number as the horizontal axis, a sliding window is used to traverse the entire sequence (the window size can be set to 5% of the total number of samples, rounded to the nearest even number); within each window, the sum of the weights of all feature points falling into the window is calculated to obtain the decision score of the window;
[0050] The starting edge of the first significant and sustained peak region in the decision score sequence was identified as the starting point of the second alcohol content, marking the point at which multiple indicators unanimously agreed that the flavor was beginning to enter its optimal stage. The ending edge of the last significant and sustained peak region in the decision score sequence was identified as the ending point of the second alcohol content, marking the end of the optimal flavor.
[0051] In this way, the above methods and steps can efficiently divide the wine into portions, thereby eliminating the subjective influence of operators and ensuring uniform wine cutting standards.
[0052] In one specific embodiment, the wine portioning is achieved in the following manner:
[0053] All samples from the beginning of the first fraction to the end of the second fraction are the first fraction (heads); all samples between the beginning and end of the second fraction are the second fraction (heart, of the highest quality); and all samples after the end of the second fraction are the third fraction (tails).
[0054] The following examples and comparative studies further validate and illustrate the electronic tongue-based rum pot distillation cut-off method provided in this embodiment:
[0055] Example 1:
[0056] Take molasses, add inorganic salts, and adjust the pH. Add yeast and ferment for a certain period of time to obtain rum fermented mash. Take 10L of fermented mash, heat and distill, and start collecting samples from the point where distillate begins to flow out, with each sample being 20mL (0.2% of the volume of the distillate). Measure the alcohol content of the 50th sample, which is 20.1% vol; measure the alcohol content of the 51st sample, which is 19.7% vol. Stop collecting samples and take samples 1-50 for subsequent operations (the required number of samples collected is ≥50).
[0057] Each sample was tested using an electronic tongue to determine two taste indicators: bitterness and richness. The response values are as follows:
[0058] Using MATLAB R2023a software, the data is processed programmatically. The specific code is as follows: % Input data bitterness = [0.936, 0.82, 0.816, 0.784, 0.781, 0.767, 0.758, 0.725,0.724, 0.668, 0.629, 0.61, 0.532, 0.458, 0.33, 0.309, 0.278, 0.067, 0.018,0.031, 0.032, 0.137, 0.279, 1.443, 1.62, 2.286, 2.472, 2.526, 2.537, 2.56,2.612, 2.654, 2.751, 2.782, 3.105, 3.119, 3.302, 3.344, 3.484, 3.936, 4.222, 4.82, 4.888, 4.902, 4.943, 4.946, 5.107, 5.38, 5.417, 5.417]; richness = [0.137, 0.196, 0.21, 0.21, 0.23, 0.251, 0.257, 0.302,0.309, 0.31, 0.329, 0.31, 0.327, 0.346, 0.345, 0.331, 0.361, 0.357, 0.344,0.374, 0.369, 0.354, 0.371, 0.383, 0.381, 0.402, 0.404, 0.408, 0.411, 0.419,0.457, 0.462, 0.475, 0.478, 0.5, 0.469, 0.443, 0.416, 0.414, 0.413, 0.384, 0.37, 0.363, 0.31, 0.309, 0.302, 0.257, 0.251, 0.23, 0.21]; %% 1. Smoothing filtering and first-order differential calculation order = 2; % Polynomial order framelen = 5; % Window length % Smoothing bitterness_smoothed = sgolayfilt(bitterness, order, framelen); richness_smoothed = sgolayfilt(richness, order, framelen); First-order differential calculation (central difference) bitterness_diff = gradient(bitterness_smoothed); richness_diff = gradient(richness_smoothed); 2. Finding the maximum / minimum point % Find the lowest point (minimum) of bitterness. [bitter_valleys, bitter_valley_locs] = islocalmin(bitterness_smoothed, 'MinProminence', 0.1); if ~any(bitter_valleys) [~, bitter_valley_locs] = min(bitterness_smoothed); else bitter_valley_locs = find(bitter_valleys); [~, idx] = min(bitterness_smoothed(bitter_valley_locs)); bitter_valley_locs = bitter_valley_locs(idx); end % Find the peak point (maximum point) of richness. [rich_peaks, rich_peak_locs] = islocalmax(richness_smoothed, 'MinProminence', 0.1); if ~any(rich_peaks) [~, rich_peak_locs] = max(richness_smoothed); else rich_peak_locs = find(rich_peaks); [~, idx] = max(richness_smoothed(rich_peak_locs)); rich_peak_locs = rich_peak_locs(idx); end 3. Finding the inflection point % Finding the extreme point of the first derivative of bitterness [bitter_diff_maxima, bitter_diff_max_locs] = islocalmax(bitterness_diff, 'MinProminence', 0.05); [bitter_diff_minima, bitter_diff_min_locs] = islocalmin(bitterness_diff, 'MinProminence', 0.05); % Find the extreme points of the first derivative of richness. [rich_diff_maxima, rich_diff_max_locs] = islocalmax(richness_diff, 'MinProminence', 0.05); [rich_diff_minima, rich_diff_min_locs] = islocalmin(richness_diff, 'MinProminence', 0.05); % Only retain significant extreme points bitter_diff_max_locs = find(bitter_diff_maxima); bitter_diff_min_locs = find(bitter_diff_minima); rich_diff_max_locs = find(rich_diff_maxima); rich_diff_min_locs = find(rich_diff_minima); 4. Establish a decision-making model % a. Construct a feature point pool % Ensure all are column vectors rich_peak_locs = rich_peak_locs(:); bitter_valley_locs = bitter_valley_locs(:); bitter_diff_max_locs = bitter_diff_max_locs(:); bitter_diff_min_locs = bitter_diff_min_locs(:); rich_diff_max_locs = rich_diff_max_locs(:); rich_diff_min_locs = rich_diff_min_locs(:); % Handle empty arrays default_loc = round(length(bitterness) / 2); % Default to the middle point if isempty(rich_peak_locs), rich_peak_locs = default_loc; end if isempty(bitter_valley_locs), bitter_valley_locs = default_loc; end if isempty(bitter_diff_max_locs), bitter_diff_max_locs = default_loc;end if isempty(bitter_diff_min_locs), bitter_diff_min_locs = default_loc;end if isempty(rich_diff_max_locs), rich_diff_max_locs = default_loc; end if isempty(rich_diff_min_locs), rich_diff_min_locs = default_loc; end % Vertically concatenate feature_points = vertcat(... rich_peak_locs, ... bitter_valley_locs, ... bitter_diff_max_locs, ... bitter_diff_min_locs, ... rich_diff_max_locs, ... rich_diff_min_locs ...); % Remove duplicates and sort feature_points = unique(feature_points); feature_points = feature_points(feature_points >= 1 & feature_points<= length(bitterness)); % b. Set the weights for each point weights = zeros(size(feature_points)); for i = 1:length(feature_points) if feature_points(i) == rich_peak_locs weights(i) = 0.4; elseif feature_points(i) == bitter_valley_locs weights(i) = 0.3; else weights(i) = 0.15; end end % c. Calculate decision scores using a sliding window. window_percentage = 0.05; window_size = round(length(bitterness) * window_percentage); Rounding down to the nearest even number (e.g., rounding to the nearest even number). last_digit = mod(window_size, 10); if last_digit == 5 if mod(floor(window_size / 10), 2) == 0 % The previous digit is even. window_size = window_size - 1; % Keep even numbers in the five-element rule else window_size = window_size + 1; % Keep even numbers in the five-element range end end window_size = max(3, window_size); % Ensures the window size is at least 3 if mod(window_size, 2) == 0 window_size = window_size + 1; % Ensures the window size is an odd number end decision_scores = zeros(1, length(bitterness)); for i = 1:length(bitterness) window_start = max(1, i - floor(window_size / 2)); window_end = min(length(bitterness), i + floor(window_size / 2)); % Calculate the sum of the weights of feature points within the window in_window = ismember(feature_points, window_start:window_end); decision_scores(i) = sum(weights(in_window)); end % d. Determine the optimal cutting range for the wine. % Calculate the moving average as the baseline mov_avg = movmean(decision_scores, window_size); threshold = mov_avg + 0.5*std(decision_scores); % Find regions exceeding the threshold above_threshold = decision_scores > threshold; regions = bwconncomp(above_threshold); if regions.NumObjects == 0 warning('No obvious peak region found, using the global maximum range'); [~, best_start] = max(decision_scores); best_end = best_start; else % Calculate the statistics for each region region_stats = regionprops(regions, 'Area', 'PixelIdxList'); % Sort by area [~, idx] = sort([region_stats.Area], 'descend'); % The starting point is the beginning of the first significant region. first_region = region_stats(idx(1)).PixelIdxList; best_start = first_region(1); The end of the last significant region is taken as the endpoint. last_region = region_stats(idx(end)).PixelIdxList; best_end = last_region(end); end %% Visualization Results figure('Position', [100, 100, 800, 1000]); % Bitterness data visualization subplot(4,1,1); plot(bitterness, 'b-'); hold on; plot(bitterness_smoothed, 'r-', 'LineWidth', 2); plot(bitter_valley_locs, bitterness_smoothed(bitter_valley_locs), 'go', 'MarkerSize', 10, 'MarkerFaceColor', 'g'); plot(bitter_diff_max_locs, bitterness_smoothed(bitter_diff_max_locs),'m^', 'MarkerSize', 8); plot(bitter_diff_min_locs, bitterness_smoothed(bitter_diff_min_locs),'cv', 'MarkerSize', 8); title('Analysis of Bitterness Indicators'); legend('Original data', 'Smoothed data', 'Trough point', 'Inflection point', 'Inflection point', 'Location', 'northwest'); % Richness data visualization subplot(4,1,2); plot(richness, 'b-'); hold on; plot(richness_smoothed, 'r-', 'LineWidth', 2); plot(rich_peak_locs, richness_smoothed(rich_peak_locs), 'mo', 'MarkerSize', 10, 'MarkerFaceColor', 'm'); plot(rich_diff_max_locs, richness_smoothed(rich_diff_max_locs), 'g^','MarkerSize', 8); plot(rich_diff_min_locs, richness_smoothed(rich_diff_min_locs), 'yv','MarkerSize', 8); title('Richness Index Analysis'); legend('original data', 'smoothed data', 'peak point', 'rising inflection point', 'falling inflection point', 'Location', 'northwest'); % Decision Score Visualization subplot(4,1,3); plot(decision_scores, 'k-', 'LineWidth', 2); hold on; plot([best_start, best_start], [0, max(decision_scores)], 'r--'); plot([best_end, best_end], [0, max(decision_scores)], 'r--'); title('Decision Model Results'); legend('Decision Score', 'Wine Cutting Zone', 'Location', 'northwest'); xlabel('sample number'); ylabel('score');
[0059] The result after the code is run Figure 2 As shown, based on the results, the wine cutting method can be concluded as follows: wine samples 1-18 are the first portion, wine samples 19-36 are mixed to form the second portion, and wine samples 37-50 are mixed to form the third portion.
[0060] Comparative Example 1
[0061] Take 10L of fermented mash from Example 1, and use the same distillation method as in Example 1. Have experienced operators perform the distillation by combining experiential operations such as smelling, tasting, and temperature monitoring to obtain three portions of the liquor.
[0062] Example 2
[0063] Take molasses, add inorganic salts, and adjust the pH. Add yeast for fermentation, and after a certain period of time, obtain rum fermented mash. Continuously distill the rum fermented mash using a distillation column to obtain column distillate. Take 10L of column distillate for pot distillation, starting from when distillate begins to flow out, with each sample being 100mL (i.e., 1.0% of the volume of the distillate). Measure the alcohol content of the 60th sample, which is 20.3% vol; measure the alcohol content of the 61st sample, which is 19.2% vol. Stop sampling, and take samples 1-60 for subsequent operations (the required number of samples collected is ≥50).
[0064] Each sample was tested using an electronic tongue to determine two taste indicators: bitterness and richness. The response values are as follows:
[0065] Using MATLAB R2023a software, the data is processed programmatically. The specific code is as follows: % Input data bitterness = [2.183, 1.792, 1.507, 1.278, 1.106, 0.964, 0.848, 0.739,0.652, 0.577, 0.532, 0.482, 0.453, 0.408, 0.371, 0.341, 0.313, 0.282, 0.26,0.238, 0.204, 0.478, 0.613, 0.719, 0.878, 0.937, 0.998, 1.064, 1.145, 1.216,1.269, 1.325, 1.387, 1.44, 1.511, 1.57, 1.635, 1.722, 1.784, 1.882, 2.091, 2.182, 2.29, 2.387, 2.489, 2.583, 2.692, 2.79, 2.92, 3.002, 3.15, 3.272, 3.378, 3.495, 3.612, 3.73, 3.866, 4.025, 4.156, 4.342]; richness = [0.083, 0.14, 0.242, 0.252, 0.279, 0.286, 0.309, 0.338,0.356, 0.379, 0.414, 0.459, 0.585, 0.579, 0.621, 0.645, 0.682, 0.688, 0.695,0.7, 0.697, 0.786, 0.782, 0.791, 0.791, 0.784, 0.794, 0.78, 0.795, 0.788,0.782, 0.853, 0.849, 0.845, 0.839, 0.829, 0.817, 0.803, 0.778, 0.755, 0.705, 0.732, 0.712, 0.704, 0.694, 0.679, 0.663, 0.643, 0.622, 0.499, 0.44, 0.433, 0.405, 0.397, 0.382, 0.364, 0.353, 0.333, 0.312, 0.294]; %% 1. Smoothing filtering and first-order differential calculation order = 2; % Polynomial order framelen = 5; % Window length % Smoothing bitterness_smoothed = sgolayfilt(bitterness, order, framelen); richness_smoothed = sgolayfilt(richness, order, framelen); First-order differential calculation (central difference) bitterness_diff = gradient(bitterness_smoothed); richness_diff = gradient(richness_smoothed); 2. Finding the maximum / minimum point % Find the lowest point (minimum) of bitterness. [bitter_valleys, bitter_valley_locs] = islocalmin(bitterness_smoothed, 'MinProminence', 0.1); if ~any(bitter_valleys) [~, bitter_valley_locs] = min(bitterness_smoothed); else bitter_valley_locs = find(bitter_valleys); [~, idx] = min(bitterness_smoothed(bitter_valley_locs)); bitter_valley_locs = bitter_valley_locs(idx); end % Find the peak point (maximum point) of richness. [rich_peaks, rich_peak_locs] = islocalmax(richness_smoothed, 'MinProminence', 0.1); if ~any(rich_peaks) [~, rich_peak_locs] = max(richness_smoothed); else rich_peak_locs = find(rich_peaks); [~, idx] = max(richness_smoothed(rich_peak_locs)); rich_peak_locs = rich_peak_locs(idx); end 3. Finding the inflection point % Finding the extreme point of the first derivative of bitterness [bitter_diff_maxima, bitter_diff_max_locs] = islocalmax(bitterness_diff, 'MinProminence', 0.05); [bitter_diff_minima, bitter_diff_min_locs] = islocalmin(bitterness_diff, 'MinProminence', 0.05); % Find the extreme points of the first derivative of richness. [rich_diff_maxima, rich_diff_max_locs] = islocalmax(richness_diff, 'MinProminence', 0.05); [rich_diff_minima, rich_diff_min_locs] = islocalmin(richness_diff, 'MinProminence', 0.05); % Only retain significant extreme points bitter_diff_max_locs = find(bitter_diff_maxima); bitter_diff_min_locs = find(bitter_diff_minima); rich_diff_max_locs = find(rich_diff_maxima); rich_diff_min_locs = find(rich_diff_minima); 4. Establish a decision-making model % a. Construct a feature point pool % Ensure all are column vectors rich_peak_locs = rich_peak_locs(:); bitter_valley_locs = bitter_valley_locs(:); bitter_diff_max_locs = bitter_diff_max_locs(:); bitter_diff_min_locs = bitter_diff_min_locs(:); rich_diff_max_locs = rich_diff_max_locs(:); rich_diff_min_locs = rich_diff_min_locs(:); % Handle empty arrays default_loc = round(length(bitterness) / 2); % Default to the middle point if isempty(rich_peak_locs), rich_peak_locs = default_loc; end if isempty(bitter_valley_locs), bitter_valley_locs = default_loc; end if isempty(bitter_diff_max_locs), bitter_diff_max_locs = default_loc;end if isempty(bitter_diff_min_locs), bitter_diff_min_locs = default_loc;end if isempty(rich_diff_max_locs), rich_diff_max_locs = default_loc; end if isempty(rich_diff_min_locs), rich_diff_min_locs = default_loc; end % Vertically concatenate feature_points = vertcat(... rich_peak_locs, ... bitter_valley_locs, ... bitter_diff_max_locs, ... bitter_diff_min_locs, ... rich_diff_max_locs, ... rich_diff_min_locs ...); % Remove duplicates and sort feature_points = unique(feature_points); feature_points = feature_points(feature_points >= 1 & feature_points<= length(bitterness)); % b. Set the weights for each point weights = zeros(size(feature_points)); for i = 1:length(feature_points) if feature_points(i) == rich_peak_locs weights(i) = 0.4; elseif feature_points(i) == bitter_valley_locs weights(i) = 0.3; else weights(i) = 0.15; end end % c. Calculate decision scores using a sliding window. window_percentage = 0.05; window_size = round(length(bitterness) * window_percentage); Rounding down to the nearest even number (5 for even numbers) last_digit = mod(window_size, 10); if last_digit == 5 if mod(floor(window_size / 10), 2) == 0 % The previous digit is even. window_size = window_size - 1; % Keep even numbers in the five-element rule else window_size = window_size + 1; % Keep even numbers in the five-element range end end window_size = max(3, window_size); % Ensures the window size is at least 3 if mod(window_size, 2) == 0 window_size = window_size + 1; % Ensures the window size is an odd number end decision_scores = zeros(1, length(bitterness)); for i = 1:length(bitterness) window_start = max(1, i - floor(window_size / 2)); window_end = min(length(bitterness), i + floor(window_size / 2)); % Calculate the sum of the weights of feature points within the window in_window = ismember(feature_points, window_start:window_end); decision_scores(i) = sum(weights(in_window)); end % d. Determine the optimal cutting range for the wine. % Calculate the moving average as the baseline mov_avg = movmean(decision_scores, window_size); threshold = mov_avg + 0.5*std(decision_scores); % Find regions exceeding the threshold above_threshold = decision_scores > threshold; regions = bwconncomp(above_threshold); if regions.NumObjects == 0 warning('No obvious peak region found, using the global maximum range'); [~, best_start] = max(decision_scores); best_end = best_start; else % Calculate the statistics for each region region_stats = regionprops(regions, 'Area', 'PixelIdxList'); % Sort by area [~, idx] = sort([region_stats.Area], 'descend'); % The starting point is the beginning of the first significant region. first_region = region_stats(idx(1)).PixelIdxList; best_start = first_region(1); The end of the last significant region is taken as the endpoint. last_region = region_stats(idx(end)).PixelIdxList; best_end = last_region(end); end %% Visualization Results figure('Position', [100, 100, 800, 1000]); % Bitterness data visualization subplot(4,1,1); plot(bitterness, 'b-'); hold on; plot(bitterness_smoothed, 'r-', 'LineWidth', 2); plot(bitter_valley_locs, bitterness_smoothed(bitter_valley_locs), 'go', 'MarkerSize', 10, 'MarkerFaceColor', 'g'); plot(bitter_diff_max_locs, bitterness_smoothed(bitter_diff_max_locs),'m^', 'MarkerSize', 8); plot(bitter_diff_min_locs, bitterness_smoothed(bitter_diff_min_locs),'cv', 'MarkerSize', 8); title('Analysis of Bitterness Indicators'); legend('Original data', 'Smoothed data', 'Trough point', 'Inflection point', 'Inflection point', 'Location', 'northwest'); % Richness data visualization subplot(4,1,2); plot(richness, 'b-'); hold on; plot(richness_smoothed, 'r-', 'LineWidth', 2); plot(rich_peak_locs, richness_smoothed(rich_peak_locs), 'mo', 'MarkerSize', 10, 'MarkerFaceColor', 'm'); plot(rich_diff_max_locs, richness_smoothed(rich_diff_max_locs), 'g^','MarkerSize', 8); plot(rich_diff_min_locs, richness_smoothed(rich_diff_min_locs), 'yv','MarkerSize', 8); title('Richness Index Analysis'); legend('original data', 'smoothed data', 'peak point', 'rising inflection point', 'falling inflection point', 'Location', 'northwest'); % Decision Score Visualization subplot(4,1,3); plot(decision_scores, 'k-', 'LineWidth', 2); hold on; plot([best_start, best_start], [0, max(decision_scores)], 'r--'); plot([best_end, best_end], [0, max(decision_scores)], 'r--'); title('Decision Model Results'); legend('Decision Score', 'Wine Cutting Zone', 'Location', 'northwest'); xlabel('sample number'); ylabel('score');
[0066] The result after the code runs is as follows Figure 3 As shown, based on the results, the wine cutting method can be concluded as follows: wine samples 1-18 are the first portion, wine samples 19-34 are mixed to form the second portion, and wine samples 35-60 are mixed to form the third portion.
[0067] Comparative Example 2
[0068] Take 10L of the column distillate from Example 2 and perform the same pot distillation operation. Have an experienced operator perform the distillation by combining experience-based operations such as smelling, tasting, and temperature monitoring, to obtain three portions of the liquor.
[0069] Twenty-five experienced wine tasters were assigned to conduct a blind tasting of the second wine sample from Example 1 and Comparative Example 1, and Example 2 and Comparative Example 2, selecting the wine they considered superior. The process was as follows:
[0070] In summary, by adopting the electronic tongue-based rum pot distillation cutting method of this application, reliance on operator experience can be avoided, ensuring uniform cutting standards and making the base spirits of different segments have unique flavors, which is beneficial to the subsequent blending and stability of rum.
[0071] like Figure 4As shown, this application embodiment provides an electronic device, including a processor 111, a communication interface 112, a memory 113, and a communication bus 114. The processor 111, the communication interface 112, and the memory 113 communicate with each other through the communication bus 114. The memory 113 is used to store computer programs. When the processor 111 executes the program stored in the memory 113, it implements the steps of the rum pot distillation and wine cutting decision method based on an electronic tongue provided in any of the aforementioned method embodiments.
[0072] This application also provides a computer-readable storage medium storing a computer program thereon, which, when executed by a processor, implements the steps of the rum pot distillation and rum cutting decision method based on an electronic tongue as provided in any of the foregoing method embodiments.
[0073] The above embodiments are preferred embodiments of the present invention, but the embodiments of the present invention are not limited to the above embodiments. Any changes, modifications, substitutions, combinations, or simplifications made without departing from the spirit and principle of the present invention should be considered equivalent substitutions.
[0074] The above embodiments are merely illustrative of the technical concept and features of the present invention, and are intended to enable those skilled in the art to understand the content of the present invention and implement it accordingly. They should not be construed as limiting the scope of protection of the present invention. All equivalent changes or modifications made based on the essence of the content of the present invention should be covered within the scope of protection of the present invention.
Claims
1. A method for rum pot distillation and rum cutting decision-making based on an electronic tongue, characterized in that, include: Obtain several samples of the distillate; Each distillate sample was measured using an electronic tongue to obtain the raw data sequences of two taste indicators: bitterness and richness. The original data sequence is processed to obtain processed data; The feature points are identified from the processed data, including the lowest bitterness point, the highest richness point, the bitterness inflection point, and the richness inflection point. A decision model is established based on the aforementioned feature points to determine the optimal wine cutting interval and achieve wine portion division.
2. The rum pot distillation method for cutting rum based on an electronic tongue as described in claim 1, characterized in that, A decision model is established based on the aforementioned feature points to determine the optimal wine cutting interval, including: The feature points are incorporated into a candidate point set to construct a feature point pool; Given the weights of each feature point, a sliding window is used to traverse the entire sequence with the sample number as the horizontal axis; within each window, the sum of the weights of all feature points falling into the window is calculated to obtain the decision score of the window. The starting edge of the first peak region of the decision score sequence is determined as the starting point of the second alcoholic beverage; the ending edge of the last peak region of the decision score sequence is determined as the ending point of the second alcoholic beverage.
3. The rum pot distillation method for cutting rum based on an electronic tongue as described in claim 2, characterized in that, The wine portioning can be achieved in the following way: All samples from the first portion to the starting point of the second portion are considered the first portion; all samples between the starting and ending points of the second portion are considered the second portion. All samples after the end point of the second alcohol fraction are considered the third alcohol fraction.
4. The rum pot distillation method for cutting rum based on an electronic tongue as described in claim 1, characterized in that, The processing of the original data sequence includes smoothing filtering and first-order derivative calculation; the smoothing filtering uses a Savitzky-Golay filter, and the first-order derivative calculation is to calculate the first derivative of the smoothed sequence.
5. The rum pot distillation method for rum cutting decisions based on an electronic tongue as described in claim 4, characterized in that, The lowest bitterness point is the trough of the bitterness smooth sequence; the highest richness point is the peak of the richness smooth sequence; the bitterness inflection point is the maximum and minimum of the first-order differential sequence of bitterness; the richness inflection point is the maximum and minimum of the first-order differential sequence of richness.
6. The rum pot distillation method for cutting rum based on an electronic tongue as described in claim 1, characterized in that, Several distillate samples were obtained using the following method: First, determine the volume of the object to be distilled, then begin distillation. Start collecting samples as soon as distillate comes out, with each sample containing 0.2%-1.0% of the volume of the object to be distilled. Measure the alcohol content of the distillate sample at an opportune time (the alcohol content of the distillate will be very high at first, then gradually decrease). Stop collecting samples when the alcohol content is <20% vol. The number of samples collected should be ≥50.
7. The rum pot distillation method for cutting rum based on an electronic tongue as described in claim 2, characterized in that, The weights of each given feature point include: the highest richness point has a weight of 0.4, the lowest bitterness point has a weight of 0.3, and the bitterness inflection point and richness inflection point both have a weight of 0.
15.
8. The rum pot distillation method for cutting rum based on an electronic tongue as described in claim 2, characterized in that, The size of the sliding window is 5% of the total number of samples.
9. An electronic device, characterized in that, It includes a processor, a communication interface, a memory, and a communication bus, wherein the processor, the communication interface, and the memory communicate with each other through the communication bus; Memory, used to store computer programs; A processor, when executing a program stored in memory, implements the steps of the method according to any one of claims 1-8.
10. A computer-readable storage medium storing a computer program, characterized in that, When the computer program is executed by a processor, it implements the steps of the method as described in any one of claims 1 to 8.